annotate tests/TLSTester.java @ 925:4dfdb62e3e9d

Extend JDBC_API_Tester program with optional second startup argument '-skipMALoutput'. This allows the JDBC_API_Tester program to be called to skip the comparing the MAL output of tests which return MAL output such as PLAN, EXPLAIN and TRACE statements. It is intended for internal development use only.
author Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
date Thu, 08 Aug 2024 15:26:28 +0200 (8 months ago)
parents c2164decf7f1
children d416e9b6b3d0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
855
839d76eeb4ae Added missing Copyright header comments
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 851
diff changeset
1 /*
839d76eeb4ae Added missing Copyright header comments
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 851
diff changeset
2 * SPDX-License-Identifier: MPL-2.0
839d76eeb4ae Added missing Copyright header comments
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 851
diff changeset
3 *
839d76eeb4ae Added missing Copyright header comments
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 851
diff changeset
4 * This Source Code Form is subject to the terms of the Mozilla Public
839d76eeb4ae Added missing Copyright header comments
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 851
diff changeset
5 * License, v. 2.0. If a copy of the MPL was not distributed with this
839d76eeb4ae Added missing Copyright header comments
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 851
diff changeset
6 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
839d76eeb4ae Added missing Copyright header comments
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 851
diff changeset
7 *
839d76eeb4ae Added missing Copyright header comments
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 851
diff changeset
8 * Copyright 2024 MonetDB Foundation;
839d76eeb4ae Added missing Copyright header comments
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 851
diff changeset
9 * Copyright August 2008 - 2023 MonetDB B.V.;
839d76eeb4ae Added missing Copyright header comments
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 851
diff changeset
10 * Copyright 1997 - July 2008 CWI.
839d76eeb4ae Added missing Copyright header comments
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 851
diff changeset
11 */
839d76eeb4ae Added missing Copyright header comments
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 851
diff changeset
12
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
13 import org.monetdb.mcl.net.Parameter;
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
14
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
15 import java.io.*;
875
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
16 import java.net.URISyntaxException;
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
17 import java.net.URL;
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
18 import java.net.URLConnection;
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
19 import java.nio.charset.StandardCharsets;
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
20 import java.nio.file.Files;
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
21 import java.sql.Connection;
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
22 import java.sql.DriverManager;
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
23 import java.sql.SQLException;
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
24 import java.util.HashMap;
805
2fee4b71baac Set ALPN protocol if the runtime supports it
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 804
diff changeset
25 import java.util.HashSet;
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
26 import java.util.Properties;
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
27
917
c2164decf7f1 Add final to classes
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 875
diff changeset
28 public final class TLSTester {
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
29 final HashMap<String, File> fileCache = new HashMap<>();
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
30 int verbose = 0;
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
31 String serverHost = null;
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
32 String altHost = null;
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
33 int serverPort = -1;
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
34 boolean enableTrusted = false;
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
35 File tempDir = null;
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
36 private final HashSet<String> preparedButNotRun = new HashSet<>();
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
37
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
38 public TLSTester(String[] args) {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
39 for (int i = 0; i < args.length; i++) {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
40 String arg = args[i];
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
41 if (arg.equals("-v")) {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
42 verbose = 1;
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
43 } else if (arg.equals("-a")) {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
44 altHost = args[++i];
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
45 } else if (arg.equals("-t")) {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
46 enableTrusted = true;
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
47 } else if (!arg.startsWith("-") && serverHost == null) {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
48 int idx = arg.indexOf(':');
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
49 if (idx > 0) {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
50 serverHost = arg.substring(0, idx);
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
51 try {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
52 serverPort = Integer.parseInt(arg.substring(idx + 1));
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
53 if (serverPort > 0 && serverPort < 65536)
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
54 continue;
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
55 } catch (NumberFormatException ignored) {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
56 }
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
57 }
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
58 // if we get here it wasn't very valid
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
59 throw new IllegalArgumentException("Invalid argument: " + arg);
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
60 } else {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
61 throw new IllegalArgumentException("Unexpected argument: " + arg);
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
62 }
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
63 }
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
64 }
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
65
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
66 public static void main(String[] args) throws IOException, SQLException, ClassNotFoundException {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
67 Class.forName("org.monetdb.jdbc.MonetDriver");
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
68 TLSTester main = new TLSTester(args);
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
69 main.run();
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
70 }
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
71
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
72 private HashMap<String, Integer> loadPortMap(String testName) throws IOException {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
73 HashMap<String, Integer> portMap = new HashMap<>();
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
74 InputStream in = fetchData("/?test=" + testName);
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
75 BufferedReader br = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8));
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
76 for (String line = br.readLine(); line != null; line = br.readLine()) {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
77 int idx = line.indexOf(':');
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
78 String service = line.substring(0, idx);
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
79 int port;
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
80 try {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
81 port = Integer.parseInt(line.substring(idx + 1));
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
82 } catch (NumberFormatException e) {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
83 throw new RuntimeException("Invalid port map line: " + line);
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
84 }
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
85 portMap.put(service, port);
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
86 }
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
87 return portMap;
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
88 }
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
89
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
90 private File resource(String resource) throws IOException {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
91 if (!fileCache.containsKey(resource))
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
92 fetchResource(resource);
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
93 return fileCache.get(resource);
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
94 }
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
95
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
96 private void fetchResource(String resource) throws IOException {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
97 if (!resource.startsWith("/")) {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
98 throw new IllegalArgumentException("Resource must start with slash: " + resource);
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
99 }
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
100 if (tempDir == null) {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
101 tempDir = Files.createTempDirectory("tlstest").toFile();
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
102 tempDir.deleteOnExit();
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
103 }
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
104 File outPath = new File(tempDir, resource.substring(1));
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
105 try (InputStream in = fetchData(resource); FileOutputStream out = new FileOutputStream(outPath)) {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
106 byte[] buffer = new byte[12];
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
107 while (true) {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
108 int n = in.read(buffer);
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
109 if (n <= 0)
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
110 break;
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
111 out.write(buffer, 0, n);
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
112 }
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
113 }
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
114 fileCache.put(resource, outPath);
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
115 }
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
116
875
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
117 private InputStream fetchData(String resource) throws IOException {
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
118 String urlText = "http://" + serverHost + ":" + serverPort + resource;
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
119 if (verbose > 0) {
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
120 System.out.println("Fetching " + resource + " from " + urlText);
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
121 }
875
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
122 URL url = null;
859
68994abe3e03 Also catch java.net.URISyntaxException and java.net.MalformedURLException and convert them to an IOException.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 858
diff changeset
123 try {
875
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
124 url = new java.net.URI(urlText).toURL();
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
125 URLConnection conn = url.openConnection();
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
126 conn.connect();
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
127 return conn.getInputStream();
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
128 } catch (URISyntaxException | IOException e) {
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
129 throw new IOException("Cannot fetch resource " + resource + " from " + urlText + ": " + e, e);
859
68994abe3e03 Also catch java.net.URISyntaxException and java.net.MalformedURLException and convert them to an IOException.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 858
diff changeset
130 }
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
131 }
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
132
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
133 private void run() throws IOException, SQLException {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
134 test_connect_plain();
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
135 test_connect_tls();
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
136 test_refuse_no_cert();
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
137 test_refuse_wrong_cert();
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
138 test_refuse_wrong_host();
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
139 test_refuse_tlsv12();
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
140 test_refuse_expired();
855
839d76eeb4ae Added missing Copyright header comments
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 851
diff changeset
141 // test_connect_client_auth1();
839d76eeb4ae Added missing Copyright header comments
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 851
diff changeset
142 // test_connect_client_auth2();
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
143 test_fail_tls_to_plain();
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
144 test_fail_plain_to_tls();
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
145 test_connect_server_name();
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
146 test_connect_alpn_mapi9();
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
147 test_connect_trusted();
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
148 test_refuse_trusted_wrong_host();
805
2fee4b71baac Set ALPN protocol if the runtime supports it
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 804
diff changeset
149
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
150 // did we forget to call expectSucceed and expectFailure somewhere?
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
151 if (!preparedButNotRun.isEmpty()) {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
152 String names = String.join(", ", preparedButNotRun);
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
153 throw new RuntimeException("Not all tests called expectSuccess/expectFailure: " + names);
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
154 }
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
155 }
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
156
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
157 private void test_connect_plain() throws IOException, SQLException {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
158 attempt("connect_plain", "plain").with(Parameter.TLS, false).expectSuccess();
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
159 }
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
160
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
161 private void test_connect_tls() throws IOException, SQLException {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
162 Attempt attempt = attempt("connect_tls", "server1");
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
163 attempt.withFile(Parameter.CERT, "/ca1.crt").expectSuccess();
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
164 }
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
165
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
166 private void test_refuse_no_cert() throws IOException, SQLException {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
167 attempt("refuse_no_cert", "server1").expectFailure("PKIX path building failed");
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
168 }
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
169
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
170 private void test_refuse_wrong_cert() throws IOException, SQLException {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
171 Attempt attempt = attempt("refuse_wrong_cert", "server1");
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
172 attempt.withFile(Parameter.CERT, "/ca2.crt").expectFailure("PKIX path building failed");
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
173 }
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
174
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
175 private void test_refuse_wrong_host() throws IOException, SQLException {
875
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
176 if (altHost == null)
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
177 return;
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
178 Attempt attempt = attempt("refuse_wrong_host", "server1").with(Parameter.HOST, altHost);
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
179 attempt.withFile(Parameter.CERT, "/ca1.crt").expectFailure("No subject alternative DNS name");
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
180 }
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
181
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
182 private void test_refuse_tlsv12() throws IOException, SQLException {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
183 Attempt attempt = attempt("refuse_tlsv12", "tls12");
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
184 attempt.withFile(Parameter.CERT, "/ca1.crt").expectFailure("protocol_version");
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
185 }
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
186
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
187 private void test_refuse_expired() throws IOException, SQLException {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
188 Attempt attempt = attempt("refuse_expired", "expiredcert");
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
189 attempt.withFile(Parameter.CERT, "/ca1.crt").expectFailure("PKIX path validation failed");
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
190 }
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
191
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
192 private void test_connect_client_auth1() throws IOException, SQLException {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
193 attempt("connect_client_auth1", "clientauth")
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
194 .withFile(Parameter.CERT, "/ca1.crt")
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
195 .withFile(Parameter.CLIENTKEY, "/client2.keycrt")
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
196 .expectSuccess();
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
197 }
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
198
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
199 private void test_connect_client_auth2() throws IOException, SQLException {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
200 attempt("connect_client_auth2", "clientauth")
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
201 .withFile(Parameter.CERT, "/ca1.crt")
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
202 .withFile(Parameter.CLIENTKEY, "/client2.key")
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
203 .withFile(Parameter.CLIENTCERT, "/client2.crt")
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
204 .expectSuccess();
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
205 }
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
206
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
207 private void test_fail_tls_to_plain() throws IOException, SQLException {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
208 Attempt attempt = attempt("fail_tls_to_plain", "plain");
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
209 attempt.withFile(Parameter.CERT, "/ca1.crt").expectFailure("");
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
210
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
211 }
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
212
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
213 private void test_fail_plain_to_tls() throws IOException, SQLException {
851
157dcb2d6516 relax wording of expected exception
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 834
diff changeset
214 attempt("fail_plain_to_tls", "server1").with(Parameter.TLS, false).expectFailure("Cannot connect", "Could not connect");
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
215 }
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
216
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
217 private void test_connect_server_name() throws IOException, SQLException {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
218 Attempt attempt = attempt("connect_server_name", "sni");
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
219 attempt.withFile(Parameter.CERT, "/ca1.crt").expectSuccess();
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
220 }
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
221
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
222 private void test_connect_alpn_mapi9() throws IOException, SQLException {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
223 attempt("connect_alpn_mapi9", "alpn_mapi9").withFile(Parameter.CERT, "/ca1.crt").expectSuccess();
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
224 }
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
225
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
226 private void test_connect_trusted() throws IOException, SQLException {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
227 attempt("connect_trusted", null)
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
228 .with(Parameter.HOST, "monetdb.ergates.nl")
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
229 .with(Parameter.PORT, 50000)
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
230 .expectSuccess();
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
231 }
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
232
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
233 private void test_refuse_trusted_wrong_host() throws IOException, SQLException {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
234 attempt("test_refuse_trusted_wrong_host", null)
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
235 .with(Parameter.HOST, "monetdbxyz.ergates.nl")
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
236 .with(Parameter.PORT, 50000)
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
237 .expectFailure("No subject alternative DNS name");
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
238 }
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
239
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
240 private Attempt attempt(String testName, String portName) throws IOException {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
241 preparedButNotRun.add(testName);
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
242 return new Attempt(testName, portName);
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
243 }
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
244
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
245 private class Attempt {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
246 private final String testName;
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
247 private final Properties props = new Properties();
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
248 boolean disabled = false;
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
249
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
250 public Attempt(String testName, String portName) throws IOException {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
251 HashMap<String, Integer> portMap = loadPortMap(testName);
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
252
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
253 this.testName = testName;
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
254 with(Parameter.TLS, true);
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
255 with(Parameter.HOST, serverHost);
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
256 with(Parameter.SO_TIMEOUT, 3000);
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
257 if (portName != null) {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
258 Integer port = portMap.get(portName);
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
259 if (port != null) {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
260 with(Parameter.PORT, port);
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
261 } else {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
262 throw new RuntimeException("Unknown port name: " + portName);
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
263 }
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
264 }
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
265 }
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
266
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
267 private Attempt with(Parameter parm, String value) {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
268 props.setProperty(parm.name, value);
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
269 return this;
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
270 }
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
271
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
272 private Attempt with(Parameter parm, int value) {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
273 props.setProperty(parm.name, Integer.toString(value));
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
274 return this;
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
275 }
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
276
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
277 private Attempt with(Parameter parm, boolean value) {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
278 props.setProperty(parm.name, value ? "true" : "false");
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
279 return this;
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
280 }
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
281
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
282 private Attempt withFile(Parameter parm, String certResource) throws IOException {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
283 File certFile = resource(certResource);
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
284 String path = certFile.getPath();
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
285 with(parm, path);
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
286 return this;
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
287 }
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
288
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
289 public void expectSuccess() throws SQLException {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
290 preparedButNotRun.remove(testName);
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
291 if (disabled)
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
292 return;
875
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
293 startVerbose();
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
294 try {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
295 Connection conn = DriverManager.getConnection("jdbc:monetdb:", props);
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
296 conn.close();
875
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
297 throw new RuntimeException("Test " + testName + " was supposed to throw an Exception saying 'Sorry, this is not a real MonetDB instance'");
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
298 } catch (SQLException e) {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
299 if (e.getMessage().startsWith("Sorry, this is not a real MonetDB instance")) {
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
300 // it looks like a failure but this is actually our success scenario
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
301 // because this is what the TLS Tester does when the connection succeeds.
875
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
302 endVerbose("succesful MAPI handshake, as expected");
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
303 return;
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
304 }
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
305 // other exceptions ARE errors and should be reported.
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
306 throw e;
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
307 }
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
308 }
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
309
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
310 public void expectFailure(String... expectedMessages) throws SQLException {
875
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
311 preparedButNotRun.remove(testName);
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
312 if (disabled)
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
313 return;
875
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
314 startVerbose();
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
315 try {
875
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
316 Connection conn = DriverManager.getConnection("jdbc:monetdb:", props);
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
317 conn.close();
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
318 throw new RuntimeException("Expected test " + testName + " to throw an exception but it didn't");
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
319 } catch (SQLException e) {
855
839d76eeb4ae Added missing Copyright header comments
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 851
diff changeset
320 for (String expected : expectedMessages) {
875
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
321 if (e.getMessage().contains(expected)) {
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
322 endVerbose("connection failed as expected, message: " + e.getMessage());
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
323 return;
875
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
324 }
855
839d76eeb4ae Added missing Copyright header comments
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 851
diff changeset
325 }
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
326 String message = "Test " + testName + " threw the wrong exception: " + e.getMessage() + '\n' + "Expected:\n <" + String.join(">\n <", expectedMessages) + ">";
851
157dcb2d6516 relax wording of expected exception
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 834
diff changeset
327 throw new RuntimeException(message, e);
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
328 }
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
329 }
875
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
330
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
331 private void startVerbose() {
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
332 if (verbose == 0)
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
333 return;
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
334
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
335 System.out.println("Test " + testName + ":");
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
336 for (String key: props.stringPropertyNames()) {
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
337 Object value = props.get(key);
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
338 if (value == null)
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
339 System.out.println(" " + key + " is null");
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
340 else
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
341 System.out.println(" " + key + " = " + value.toString());
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
342 }
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
343 }
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
344
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
345 private void endVerbose(String message) {
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
346 if (verbose > 0) {
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
347 System.out.println(" -> " + message);
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
348 System.out.println();
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
349 }
06f532009fda Add verbose mode to TLSTester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 859
diff changeset
350 }
834
5aa19bbed0d6 Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 805
diff changeset
351 }
802
5d04490bc58b Add tests using monetdb-tlstester
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
352 }