annotate tests/UrlTester.java @ 789:88c5b678e974 monetdbs

URL parser passes the tests. Some tests had to change to accomodate Java.
author Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
date Wed, 29 Nov 2023 13:28:52 +0100 (17 months ago)
parents
children 4de810c22328
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
789
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
1 import org.monetdb.mcl.net.*;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
2
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
3 import java.io.*;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
4 import java.net.URISyntaxException;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
5 import java.util.Properties;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
6
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
7 public class UrlTester {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
8 String filename = null;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
9 int verbose = 0;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
10 BufferedReader reader = null;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
11 int lineno = 0;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
12 int testCount = 0;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
13 Properties props = null;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
14 Target validated = null;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
15
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
16 public UrlTester() {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
17 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
18
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
19 public UrlTester(String filename) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
20 this.filename = filename;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
21 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
22
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
23 public static void main(String[] args) throws Exception {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
24 int exitcode;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
25 UrlTester tester = new UrlTester();
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
26 exitcode = tester.parseArgs(args);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
27 if (exitcode == 0)
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
28 exitcode = tester.run();
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
29 System.exit(exitcode);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
30 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
31
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
32 private int parseArgs(String[] args) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
33 for (int i = 0; i < args.length; i++) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
34 String arg = args[i];
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
35 if (arg.startsWith("-")) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
36 int result = handleFlags(arg);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
37 if (result != 0)
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
38 return result;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
39 } else if (filename == null) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
40 filename = arg;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
41 } else {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
42 System.err.println("Unexpected argument: " + arg);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
43 return 1;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
44 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
45 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
46 return 0;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
47 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
48
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
49 private int run() throws IOException {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
50 if (filename != null) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
51 reader = new BufferedReader(new FileReader(filename));
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
52 } else {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
53 String resourceName = "/tests.md";
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
54 InputStream stream = this.getClass().getResourceAsStream(resourceName);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
55 if (stream == null) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
56 System.err.println("Resource " + resourceName + " not found");
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
57 return 1;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
58 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
59 reader = new BufferedReader(new InputStreamReader(stream));
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
60 filename = "tests/tests.md";
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
61 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
62
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
63 try {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
64 processFile();
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
65 } catch (Failure e) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
66 System.err.println("" + filename + ":" + lineno + ": " + e.getMessage());
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
67 return 1;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
68 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
69 return 0;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
70 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
71
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
72 private int handleFlags(String arg) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
73 if (!arg.startsWith("-") || arg.equals("-")) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
74 System.err.println("Invalid flag: " + arg);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
75 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
76 String a = arg.substring(1);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
77
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
78 while (!a.isEmpty()) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
79 char letter = a.charAt(0);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
80 a = a.substring(1);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
81 switch (letter) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
82 case 'v':
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
83 verbose++;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
84 break;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
85 default:
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
86 System.err.println("Unexpected flag " + letter + " in " + arg);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
87 return -1;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
88 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
89 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
90
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
91 return 0;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
92 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
93
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
94 private void processFile() throws IOException, Failure {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
95 while (true) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
96 String line = reader.readLine();
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
97 if (line == null)
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
98 break;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
99 lineno++;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
100 processLine(line);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
101 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
102 if (verbose >= 1) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
103 System.out.println();
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
104 System.out.println("Ran " + testCount + " tests in " + lineno + " lines");
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
105 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
106 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
107
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
108 private void processLine(String line) throws Failure {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
109 line = line.replaceFirst("\\s+$", ""); // remove trailing
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
110 if (props == null && line.equals("```test")) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
111 if (verbose >= 2) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
112 if (testCount > 0) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
113 System.out.println();
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
114 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
115 System.out.println("\u25B6 " + filename + ":" + lineno);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
116 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
117 props = Target.defaultProperties();
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
118 testCount++;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
119 return;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
120 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
121 if (props != null) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
122 if (line.equals("```")) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
123 stopProcessing();
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
124 return;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
125 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
126 handleCommand(line);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
127 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
128 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
129
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
130 private void stopProcessing() {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
131 props = null;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
132 validated = null;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
133 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
134
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
135 private void handleCommand(String line) throws Failure {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
136 if (verbose >= 3) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
137 System.out.println(line);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
138 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
139 if (line.isEmpty())
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
140 return;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
141
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
142 String[] parts = line.split("\\s+", 2);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
143 String command = parts[0];
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
144 switch (command.toUpperCase()) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
145 case "ONLY":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
146 handleOnly(true, parts[1]);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
147 return;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
148 case "NOT":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
149 handleOnly(false, parts[1]);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
150 return;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
151 case "PARSE":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
152 handleParse(parts[1], null);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
153 return;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
154 case "ACCEPT":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
155 handleParse(parts[1], true);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
156 return;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
157 case "REJECT":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
158 handleParse(parts[1], false);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
159 return;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
160 case "SET":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
161 handleSet(parts[1]);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
162 return;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
163 case "EXPECT":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
164 handleExpect(parts[1]);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
165 return;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
166 default:
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
167 throw new Failure("Unexpected command: " + command);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
168 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
169
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
170 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
171
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
172 private void handleOnly(boolean mustBePresent, String rest) throws Failure {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
173 boolean found = false;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
174 for (String part: rest.split("\\s+")) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
175 if (part.equals("jdbc")) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
176 found = true;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
177 break;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
178 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
179 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
180 if (found != mustBePresent) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
181 // do not further process this block
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
182 stopProcessing();
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
183 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
184 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
185
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
186 private int findEqualSign(String rest) throws Failure {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
187 int index = rest.indexOf('=');
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
188 if (index < -1)
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
189 throw new Failure("Expected to find a '='");
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
190 return index;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
191 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
192
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
193 private String splitKey(String rest) throws Failure {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
194 int index = findEqualSign(rest);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
195 return rest.substring(0, index);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
196 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
197
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
198 private String splitValue(String rest) throws Failure {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
199 int index = findEqualSign(rest);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
200 return rest.substring(index + 1);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
201 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
202
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
203 private void handleSet(String rest) throws Failure {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
204 validated = null;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
205 String key = splitKey(rest);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
206 String value = splitValue(rest);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
207
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
208 props.put(key, value);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
209 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
210
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
211 private void handleParse(String rest, Boolean shouldSucceed) throws Failure {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
212 URISyntaxException parseError = null;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
213 ValidationError validationError = null;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
214
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
215 validated = null;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
216 try {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
217 MonetUrlParser.parse(props, rest);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
218 } catch (URISyntaxException e) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
219 parseError = e;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
220 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
221
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
222 if (parseError == null) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
223 try {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
224 validated = new Target(props);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
225 } catch (ValidationError e) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
226 validationError = e;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
227 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
228 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
229
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
230 if (shouldSucceed == Boolean.FALSE) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
231 if (parseError != null || validationError != null)
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
232 return; // happy
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
233 else
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
234 throw new Failure("URL unexpectedly parsed and validated");
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
235 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
236
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
237 if (parseError != null)
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
238 throw new Failure("Parse error: " + parseError);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
239 if (validationError != null && shouldSucceed == Boolean.TRUE)
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
240 throw new Failure("Validation error: " + validationError);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
241 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
242
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
243 private void handleExpect(String rest) throws Failure {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
244 String key = splitKey(rest);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
245 String expectedString = splitValue(rest);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
246
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
247 Object actual = null;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
248 try {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
249 actual = extract(key);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
250 } catch (ValidationError e) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
251 throw new Failure(e.getMessage());
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
252 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
253
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
254 Object expected;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
255 try {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
256 if (actual instanceof Boolean)
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
257 expected = ParameterType.Bool.parse(key, expectedString);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
258 else if (actual instanceof Integer)
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
259 expected = ParameterType.Int.parse(key, expectedString);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
260 else
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
261 expected = expectedString;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
262 } catch (ValidationError e) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
263 String typ = actual.getClass().getName();
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
264 throw new Failure("Cannot convert expected value <" + expectedString + "> to " + typ + ": " + e.getMessage());
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
265 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
266
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
267 if (actual.equals(expected))
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
268 return;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
269 throw new Failure("Expected " + key + "=<" + expectedString + ">, found <" + actual + ">");
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
270 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
271
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
272 private Target tryValidate() throws ValidationError {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
273 if (validated == null)
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
274 validated = new Target(props);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
275 return validated;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
276 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
277
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
278 private Object extract(String key) throws ValidationError, Failure {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
279 switch (key) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
280 case "tls":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
281 return Target.validateBoolean(props, Parameter.TLS);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
282 case "host":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
283 return Target.validateString(props, Parameter.HOST);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
284 case "port":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
285 return Target.validateInt(props, Parameter.PORT);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
286 case "database":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
287 return Target.validateString(props, Parameter.DATABASE);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
288 case "tableschema":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
289 return Target.validateString(props, Parameter.TABLESCHEMA);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
290 case "table":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
291 return Target.validateString(props, Parameter.TABLE);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
292 case "sock":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
293 return Target.validateString(props, Parameter.SOCK);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
294 case "sockdir":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
295 return Target.validateString(props, Parameter.SOCKDIR);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
296 case "cert":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
297 return Target.validateString(props, Parameter.CERT);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
298 case "certhash":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
299 return Target.validateString(props, Parameter.CERTHASH);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
300 case "clientkey":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
301 return Target.validateString(props, Parameter.CLIENTKEY);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
302 case "clientcert":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
303 return Target.validateString(props, Parameter.CLIENTCERT);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
304 case "user":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
305 return Target.validateString(props, Parameter.USER);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
306 case "password":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
307 return Target.validateString(props, Parameter.PASSWORD);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
308 case "language":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
309 return Target.validateString(props, Parameter.LANGUAGE);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
310 case "autocommit":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
311 return Target.validateBoolean(props, Parameter.AUTOCOMMIT);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
312 case "schema":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
313 return Target.validateString(props, Parameter.SCHEMA);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
314 case "timezone":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
315 return Target.validateInt(props, Parameter.TIMEZONE);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
316 case "binary":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
317 return Target.validateString(props, Parameter.BINARY);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
318 case "replysize":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
319 return Target.validateInt(props, Parameter.REPLYSIZE);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
320 case "fetchsize":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
321 return Target.validateInt(props, Parameter.FETCHSIZE);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
322 case "hash":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
323 return Target.validateString(props, Parameter.HASH);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
324 case "debug":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
325 return Target.validateBoolean(props, Parameter.DEBUG);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
326 case "logfile":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
327 return Target.validateString(props, Parameter.LOGFILE);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
328
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
329 case "valid":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
330 try {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
331 tryValidate();
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
332 } catch (ValidationError e) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
333 return Boolean.FALSE;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
334 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
335 return Boolean.TRUE;
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
336
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
337 case "connect_scan":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
338 return tryValidate().connectScan();
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
339 case "connect_port":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
340 return tryValidate().connectPort();
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
341 case "connect_unix":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
342 return tryValidate().connectUnix();
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
343 case "connect_tcp":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
344 return tryValidate().connectTcp();
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
345 case "connect_tls_verify":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
346 switch (tryValidate().connectVerify()) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
347 case None: return "";
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
348 case Cert: return "cert";
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
349 case Hash: return "hash";
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
350 case System: return "system";
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
351 default:
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
352 throw new IllegalStateException("unreachable");
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
353 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
354 case "connect_certhash_digits":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
355 return tryValidate().connectCertHashDigits();
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
356 case "connect_binary":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
357 return tryValidate().connectBinary();
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
358 case "connect_clientkey":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
359 return tryValidate().connectClientKey();
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
360 case "connect_clientcert":
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
361 return tryValidate().connectClientCert();
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
362
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
363 default:
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
364 throw new Failure("Unknown attribute: " + key);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
365 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
366 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
367
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
368 private class Failure extends Exception {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
369 public Failure(String message) {
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
370 super(message);
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
371 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
372 }
88c5b678e974 URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
373 }