Mercurial > hg > monetdb-java
annotate tests/OnClientTester.java @ 527:ccf9c7fbdb50 onclient
Add watchdog timer to catch hangs
author | Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com> |
---|---|
date | Thu, 26 Aug 2021 16:25:09 +0200 (2021-08-26) |
parents | 6060ca8c5c1a |
children | 2d14abd1fc52 |
rev | line source |
---|---|
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
1 import org.monetdb.jdbc.MonetConnection; |
520
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
2 import org.monetdb.jdbc.MonetDownloadHandler; |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
3 import org.monetdb.jdbc.MonetUploadHandler; |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
4 |
520
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
5 import java.io.*; |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
6 import java.lang.reflect.InvocationTargetException; |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
7 import java.lang.reflect.Method; |
526
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
8 import java.nio.charset.StandardCharsets; |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
9 import java.sql.*; |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
10 |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
11 public final class OnClientTester { |
524
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
12 public static final int VERBOSITY_NONE = 0; |
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
13 public static final int VERBOSITY_ON = 1; |
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
14 public static final int VERBOSITY_SHOW_ALL = 2; |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
15 private String jdbcUrl; |
524
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
16 int verbosity = VERBOSITY_NONE; |
520
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
17 int testCount = 0; |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
18 int failureCount = 0; |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
19 private MonetConnection conn; |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
20 private PrintWriter out; |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
21 private Statement stmt; |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
22 private StringWriter outBuffer; |
527
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
23 private WatchDog watchDog; |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
24 |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
25 public static void main(String[] args) throws SQLException, NoSuchMethodException { |
524
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
26 String jdbcUrl = null; |
525
70ff796c42f7
Run subset of tests based on prefix
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
524
diff
changeset
|
27 String requiredPrefix = null; |
524
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
28 int verbosity = 0; |
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
29 |
525
70ff796c42f7
Run subset of tests based on prefix
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
524
diff
changeset
|
30 for (String arg : args) { |
524
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
31 if (arg.equals("-v")) |
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
32 verbosity++; |
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
33 else if (arg.equals("-vv")) |
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
34 verbosity += 2; |
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
35 else if (jdbcUrl == null) |
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
36 jdbcUrl = arg; |
525
70ff796c42f7
Run subset of tests based on prefix
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
524
diff
changeset
|
37 else if (requiredPrefix == null) |
70ff796c42f7
Run subset of tests based on prefix
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
524
diff
changeset
|
38 requiredPrefix = arg; |
524
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
39 else { |
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
40 System.err.println("Unexpected argument " + arg); |
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
41 System.exit(2); |
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
42 } |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
43 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
44 |
524
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
45 OnClientTester tester = new OnClientTester(jdbcUrl, verbosity); |
525
70ff796c42f7
Run subset of tests based on prefix
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
524
diff
changeset
|
46 tester.runTests(requiredPrefix); |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
47 |
524
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
48 if (tester.verbosity >= VERBOSITY_ON || tester.failureCount > 0) { |
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
49 System.out.println(); |
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
50 System.out.println("Ran " + tester.testCount + " tests, " + tester.failureCount + " failed"); |
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
51 } |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
52 if (tester.failureCount > 0) { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
53 System.exit(1); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
54 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
55 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
56 |
524
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
57 public OnClientTester(String jdbcUrl, int verbosity) { |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
58 this.jdbcUrl = jdbcUrl; |
524
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
59 this.verbosity = verbosity; |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
60 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
61 |
525
70ff796c42f7
Run subset of tests based on prefix
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
524
diff
changeset
|
62 private void runTests(String testPrefix) throws SQLException, NoSuchMethodException { |
527
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
63 watchDog = new WatchDog(); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
64 try { |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
65 String initialPrefix = "test_"; |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
66 String methodPrefix = testPrefix == null ? initialPrefix : initialPrefix + testPrefix; |
525
70ff796c42f7
Run subset of tests based on prefix
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
524
diff
changeset
|
67 |
527
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
68 for (Method method : this.getClass().getDeclaredMethods()) { |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
69 String methodName = method.getName(); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
70 if (methodName.startsWith(methodPrefix) && method.getParameterCount() == 0) { |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
71 String testName = methodName.substring(initialPrefix.length()); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
72 runTest(testName, method); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
73 } |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
74 } |
527
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
75 } finally { |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
76 watchDog.kill(); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
77 watchDog = null; |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
78 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
79 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
80 |
520
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
81 private synchronized void runTest(String testName, Method method) throws SQLException { |
527
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
82 watchDog.setContext("test " + testName); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
83 watchDog.setDuration(3_000); |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
84 outBuffer = new StringWriter(); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
85 out = new PrintWriter(outBuffer); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
86 |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
87 Connection genericConnection = DriverManager.getConnection(jdbcUrl); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
88 conn = genericConnection.unwrap(MonetConnection.class); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
89 stmt = conn.createStatement(); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
90 |
520
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
91 boolean failed = false; |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
92 try { |
527
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
93 long duration; |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
94 try { |
527
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
95 long t0 = System.currentTimeMillis(); |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
96 method.invoke(this); |
527
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
97 long t1 = System.currentTimeMillis(); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
98 duration = t1 - t0; |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
99 } catch (InvocationTargetException e) { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
100 Throwable cause = e.getCause(); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
101 if (cause instanceof Failure) |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
102 throw (Failure)cause; |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
103 else if (cause instanceof Exception) { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
104 throw (Exception)cause; |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
105 } else { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
106 throw e; |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
107 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
108 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
109 |
524
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
110 if (verbosity > VERBOSITY_ON) |
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
111 System.out.println(); |
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
112 if (verbosity >= VERBOSITY_ON) |
527
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
113 System.out.println("Test " + testName + " succeeded in " + duration + "ms"); |
524
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
114 if (verbosity >= VERBOSITY_SHOW_ALL) |
520
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
115 dumpOutput(testName); |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
116 } catch (Failure e) { |
520
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
117 failed = true; |
524
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
118 System.out.println(); |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
119 System.out.println("Test " + testName + " failed"); |
520
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
120 dumpOutput(testName); |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
121 } catch (Exception e) { |
520
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
122 failed = true; |
524
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
123 System.out.println(); |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
124 System.out.println("Test " + testName + " failed:"); |
524
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
125 e.printStackTrace(System.out); |
520
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
126 dumpOutput(testName); |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
127 // Show the inner bits of the exception again, they may have scrolled off screen |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
128 Throwable t = e; |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
129 while (t.getCause() != null) { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
130 t = t.getCause(); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
131 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
132 System.out.println("Innermost cause was " + t); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
133 if (t.getStackTrace().length > 0) { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
134 System.out.println(" at " + t.getStackTrace()[0]); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
135 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
136 } finally { |
527
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
137 watchDog.setContext(null); |
520
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
138 testCount++; |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
139 if (failed) |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
140 failureCount++; |
524
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
141 if (failed && verbosity == VERBOSITY_ON) { |
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
142 // next test case will not print separator |
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
143 System.out.println(); |
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
144 } |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
145 stmt.close(); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
146 conn.close(); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
147 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
148 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
149 |
520
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
150 private void dumpOutput(String testName) { |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
151 String output = outBuffer.getBuffer().toString(); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
152 if (output.isEmpty()) { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
153 System.out.println("(Test did not produce any output)"); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
154 } else { |
524
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
155 System.out.println("------ Accumulated output for test " + testName + ":"); |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
156 boolean terminated = output.endsWith(System.lineSeparator()); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
157 if (terminated) { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
158 System.out.print(output); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
159 } else { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
160 System.out.println(output); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
161 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
162 System.out.println("------ End of accumulated output" + (terminated ? "" : " (no trailing newline)")); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
163 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
164 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
165 |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
166 private void fail(String message) throws Failure { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
167 out.println("FAILURE: " + message); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
168 throw new Failure(message); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
169 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
170 |
524
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
171 private void checked(String quantity, Object actual) { |
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
172 out.println(" CHECKED: " + "<" + quantity + "> is " + actual + " as expected"); |
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
173 } |
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
174 |
520
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
175 private void assertEq(String quantity, Object expected, Object actual) throws Failure { |
524
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
176 if (expected.equals(actual)) { |
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
177 checked(quantity, actual); |
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
178 } else { |
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
179 fail("Expected <" + quantity + "' to be " + expected + "> got " + actual); |
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
180 } |
520
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
181 } |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
182 |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
183 protected boolean execute(String query) throws SQLException { |
527
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
184 try { |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
185 watchDog.start(); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
186 out.println("EXECUTE: " + query); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
187 boolean result; |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
188 result = stmt.execute(query); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
189 if (result) { |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
190 out.println(" OK"); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
191 } else { |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
192 out.println(" OK, updated " + stmt.getUpdateCount() + " rows"); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
193 } |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
194 return result; |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
195 } finally { |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
196 watchDog.stop(); |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
197 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
198 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
199 |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
200 protected void update(String query, int expectedUpdateCount) throws SQLException, Failure { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
201 execute(query); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
202 int updateCount = stmt.getUpdateCount(); |
520
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
203 assertEq("Update count", expectedUpdateCount, updateCount); |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
204 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
205 |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
206 protected void expectError(String query, String expectedError) throws SQLException, Failure { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
207 try { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
208 execute(query); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
209 } catch (SQLException e) { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
210 if (e.getMessage().contains(expectedError)) { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
211 out.println(" GOT EXPECTED EXCEPTION: " + e.getMessage()); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
212 } else { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
213 throw e; |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
214 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
215 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
216 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
217 |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
218 protected void queryInt(String query, int expected) throws SQLException, Failure { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
219 if (execute(query) == false) { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
220 fail("Query does not return a result set"); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
221 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
222 ResultSet rs = stmt.getResultSet(); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
223 ResultSetMetaData metaData = rs.getMetaData(); |
520
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
224 assertEq("column count", 1, metaData.getColumnCount()); |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
225 if (!rs.next()) { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
226 fail("Result set is empty"); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
227 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
228 int result = rs.getInt(1); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
229 if (rs.next()) { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
230 String message = "Result set has more than one row"; |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
231 fail(message); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
232 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
233 rs.close(); |
524
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
234 checked("row count", 1); |
520
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
235 assertEq("query result", expected, result); |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
236 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
237 |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
238 protected void prepare() throws SQLException { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
239 execute("DROP TABLE IF EXISTS foo"); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
240 execute("CREATE TABLE foo (i INT, t TEXT)"); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
241 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
242 |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
243 static class MyUploadHandler implements MonetUploadHandler { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
244 private final int rows; |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
245 private final int errorAt; |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
246 private final String errorMessage; |
522
279414178dc6
Also test larger up- and downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
520
diff
changeset
|
247 |
279414178dc6
Also test larger up- and downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
520
diff
changeset
|
248 private int chunkSize = 100; // small number to trigger more bugs |
279414178dc6
Also test larger up- and downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
520
diff
changeset
|
249 |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
250 MyUploadHandler(int rows, int errorAt, String errorMessage) { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
251 this.rows = rows; |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
252 this.errorAt = errorAt; |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
253 this.errorMessage = errorMessage; |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
254 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
255 |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
256 MyUploadHandler(int rows) { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
257 this(rows, -1, null); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
258 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
259 |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
260 MyUploadHandler(String errorMessage) { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
261 this(0, -1, errorMessage); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
262 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
263 |
522
279414178dc6
Also test larger up- and downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
520
diff
changeset
|
264 public void setChunkSize(int chunkSize) { |
279414178dc6
Also test larger up- and downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
520
diff
changeset
|
265 this.chunkSize = chunkSize; |
279414178dc6
Also test larger up- and downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
520
diff
changeset
|
266 } |
279414178dc6
Also test larger up- and downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
520
diff
changeset
|
267 |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
268 @Override |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
269 public void handleUpload(MonetConnection.Upload handle, String name, boolean textMode, int offset) throws IOException { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
270 int toSkip = offset > 0 ? offset - 1 : 0; |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
271 if (errorAt == -1 && errorMessage != null) { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
272 handle.sendError(errorMessage); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
273 return; |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
274 } |
522
279414178dc6
Also test larger up- and downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
520
diff
changeset
|
275 handle.setChunkSize(chunkSize); |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
276 PrintStream stream = handle.getStream(); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
277 for (int i = toSkip; i < rows; i++) { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
278 if (i == errorAt) { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
279 throw new IOException(errorMessage); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
280 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
281 stream.printf("%d|%d%n", i + 1, i + 1); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
282 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
283 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
284 |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
285 } |
520
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
286 |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
287 static class MyDownloadHandler implements MonetDownloadHandler { |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
288 private final int errorAtByte; |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
289 private final String errorMessage; |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
290 private int attempts = 0; |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
291 private int bytesSeen = 0; |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
292 private int lineEndingsSeen = 0; |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
293 private int startOfLine = 0; |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
294 |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
295 MyDownloadHandler(int errorAtByte, String errorMessage) { |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
296 this.errorAtByte = errorAtByte; |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
297 this.errorMessage = errorMessage; |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
298 } |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
299 |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
300 MyDownloadHandler(String errorMessage) { |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
301 this(-1, errorMessage); |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
302 } |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
303 |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
304 MyDownloadHandler() { |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
305 this(-1, null); |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
306 } |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
307 |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
308 @Override |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
309 public void handleDownload(MonetConnection.Download handle, String name, boolean textMode) throws IOException { |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
310 attempts++; |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
311 bytesSeen = 0; |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
312 lineEndingsSeen = 0; |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
313 startOfLine = 0; |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
314 |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
315 if (errorMessage != null && errorAtByte < 0) { |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
316 handle.sendError(errorMessage); |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
317 return; |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
318 } |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
319 |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
320 InputStream stream = handle.getStream(); |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
321 byte[] buffer = new byte[1024]; |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
322 while (true) { |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
323 int toRead = buffer.length; |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
324 if (errorMessage != null && errorAtByte >= 0) { |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
325 if (bytesSeen == errorAtByte) { |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
326 throw new IOException(errorMessage); |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
327 } |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
328 toRead = Integer.min(toRead, errorAtByte - bytesSeen); |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
329 } |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
330 int nread = stream.read(buffer, 0, toRead); |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
331 if (nread < 0) |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
332 break; |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
333 for (int i = 0; i < nread; i++) { |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
334 if (buffer[i] == '\n') { |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
335 lineEndingsSeen += 1; |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
336 startOfLine = bytesSeen + i + 1; |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
337 } |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
338 } |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
339 bytesSeen += nread; |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
340 } |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
341 } |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
342 |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
343 public int countAttempts() { |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
344 return attempts; |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
345 } |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
346 public int countBytes() { |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
347 return bytesSeen; |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
348 } |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
349 |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
350 public int lineCount() { |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
351 int lines = lineEndingsSeen; |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
352 if (startOfLine != bytesSeen) |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
353 lines++; |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
354 return lines; |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
355 } |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
356 } |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
357 |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
358 |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
359 static class Failure extends Exception { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
360 |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
361 public Failure(String message) { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
362 super(message); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
363 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
364 public Failure(String message, Throwable cause) { |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
365 super(message, cause); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
366 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
367 |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
368 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
369 |
527
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
370 static class WatchDog { |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
371 private long duration = 1000; |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
372 private long started = 0; |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
373 private String context = "no context"; |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
374 |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
375 WatchDog() { |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
376 Thread watchDog = new Thread(this::work); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
377 watchDog.setName("watchdog_timer"); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
378 watchDog.setDaemon(true); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
379 watchDog.start(); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
380 } |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
381 |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
382 synchronized void setContext(String context) { |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
383 this.context = context; |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
384 } |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
385 synchronized void setDuration(long duration) { |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
386 if (duration <= 0) |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
387 throw new IllegalArgumentException("duration should be > 0"); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
388 this.duration = duration; |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
389 this.notifyAll(); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
390 } |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
391 |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
392 synchronized void start() { |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
393 started = System.currentTimeMillis(); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
394 this.notifyAll(); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
395 } |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
396 |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
397 synchronized void stop() { |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
398 started = 0; |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
399 this.notifyAll(); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
400 } |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
401 |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
402 synchronized void kill() { |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
403 started = -1; |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
404 this.notifyAll(); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
405 } |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
406 |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
407 private synchronized void work() { |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
408 long now; |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
409 try { |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
410 while (true) { |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
411 now = System.currentTimeMillis(); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
412 final long sleepTime; |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
413 if (started < 0) { |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
414 // client asked us to go away |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
415 // System.err.println("++ EXIT"); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
416 return; |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
417 } else if (started == 0) { |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
418 // wait for client to start us |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
419 sleepTime = 600_000; |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
420 } else { |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
421 long deadline = started + duration; |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
422 sleepTime = deadline - now; |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
423 } |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
424 // System.err.printf("++ now=%d, started=now%+d, duration=%d, sleep=%d%n", |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
425 // now, started - now, duration, sleepTime |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
426 // ); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
427 if (sleepTime > 0) { |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
428 this.wait(sleepTime); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
429 } else { |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
430 trigger(); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
431 return; |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
432 } |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
433 } |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
434 } catch (InterruptedException e) { |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
435 System.err.println("WATCHDOG TIMER INTERRUPTED, SHOULDN'T HAPPEN"); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
436 System.exit(4); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
437 } |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
438 } |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
439 |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
440 private void trigger() { |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
441 String c = context != null ? context : "no context"; |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
442 System.err.println(); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
443 System.err.println(); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
444 System.err.println("WATCHDOG TIMER EXPIRED [" + c + "], KILLING TESTS"); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
445 System.exit(3); |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
446 } |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
447 } |
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
448 |
523
3ff972d266cb
Suppress some warnings
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
522
diff
changeset
|
449 public void test_Upload() throws Exception { |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
450 prepare(); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
451 conn.setUploadHandler(new MyUploadHandler(100)); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
452 update("COPY INTO foo FROM 'banana' ON CLIENT", 100); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
453 queryInt("SELECT COUNT(*) FROM foo", 100); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
454 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
455 |
523
3ff972d266cb
Suppress some warnings
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
522
diff
changeset
|
456 public void test_ClientRefuses() throws Exception { |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
457 prepare(); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
458 conn.setUploadHandler(new MyUploadHandler("immediate error")); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
459 expectError("COPY INTO foo FROM 'banana' ON CLIENT", "immediate error"); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
460 queryInt("SELECT COUNT(*) FROM foo", 0); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
461 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
462 |
523
3ff972d266cb
Suppress some warnings
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
522
diff
changeset
|
463 public void test_Offset0() throws SQLException, Failure { |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
464 prepare(); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
465 conn.setUploadHandler(new MyUploadHandler(100)); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
466 update("COPY OFFSET 0 INTO foo FROM 'banana' ON CLIENT", 100); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
467 queryInt("SELECT MIN(i) FROM foo", 1); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
468 queryInt("SELECT MAX(i) FROM foo", 100); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
469 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
470 |
523
3ff972d266cb
Suppress some warnings
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
522
diff
changeset
|
471 public void test_Offset1() throws SQLException, Failure { |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
472 prepare(); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
473 conn.setUploadHandler(new MyUploadHandler(100)); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
474 update("COPY OFFSET 1 INTO foo FROM 'banana' ON CLIENT", 100); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
475 queryInt("SELECT MIN(i) FROM foo", 1); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
476 queryInt("SELECT MAX(i) FROM foo", 100); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
477 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
478 |
523
3ff972d266cb
Suppress some warnings
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
522
diff
changeset
|
479 public void test_Offset5() throws SQLException, Failure { |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
480 prepare(); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
481 conn.setUploadHandler(new MyUploadHandler(100)); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
482 update("COPY OFFSET 5 INTO foo FROM 'banana' ON CLIENT", 96); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
483 queryInt("SELECT MIN(i) FROM foo", 5); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
484 queryInt("SELECT MAX(i) FROM foo", 100); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
485 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
486 |
523
3ff972d266cb
Suppress some warnings
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
522
diff
changeset
|
487 public void testx_ServerCancels() throws SQLException, Failure { |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
488 prepare(); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
489 conn.setUploadHandler(new MyUploadHandler(100)); |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
490 update("COPY 10 RECORDS INTO foo FROM 'banana' ON CLIENT", 96); |
520
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
491 // Server stopped reading after 10 rows. Will we stay in sync? |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
492 queryInt("SELECT COUNT(i) FROM foo", 10); |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
493 } |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
494 |
523
3ff972d266cb
Suppress some warnings
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
522
diff
changeset
|
495 public void test_Download(int n) throws SQLException, Failure { |
520
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
496 prepare(); |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
497 MyDownloadHandler handler = new MyDownloadHandler(); |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
498 conn.setDownloadHandler(handler); |
522
279414178dc6
Also test larger up- and downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
520
diff
changeset
|
499 String q = "INSERT INTO foo SELECT value as i, 'number' || value AS t FROM sys.generate_series(0, " + n + ")"; |
279414178dc6
Also test larger up- and downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
520
diff
changeset
|
500 update(q, n); |
520
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
501 update("COPY (SELECT * FROM foo) INTO 'banana' ON CLIENT", -1); |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
502 assertEq("download attempts", 1, handler.countAttempts()); |
522
279414178dc6
Also test larger up- and downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
520
diff
changeset
|
503 assertEq("lines downloaded", n, handler.lineCount()); |
279414178dc6
Also test larger up- and downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
520
diff
changeset
|
504 } |
279414178dc6
Also test larger up- and downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
520
diff
changeset
|
505 |
523
3ff972d266cb
Suppress some warnings
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
522
diff
changeset
|
506 public void test_Download() throws SQLException, Failure { |
522
279414178dc6
Also test larger up- and downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
520
diff
changeset
|
507 test_Download(100); |
520
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
508 } |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
509 |
523
3ff972d266cb
Suppress some warnings
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
522
diff
changeset
|
510 public void test_CancelledDownload() throws SQLException, Failure { |
520
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
511 prepare(); |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
512 MyDownloadHandler handler = new MyDownloadHandler("download refused"); |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
513 conn.setDownloadHandler(handler); |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
514 update("INSERT INTO foo SELECT value as i, 'number' || value AS t FROM sys.generate_series(0, 100)", 100); |
b4c7816e3592
Add more tests
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
519
diff
changeset
|
515 expectError("COPY (SELECT * FROM foo) INTO 'banana' ON CLIENT", "download refused"); |
524
71644dc873fe
Manage verbosity
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
523
diff
changeset
|
516 queryInt("SELECT 42 -- check if the connection still works", 42); |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
517 } |
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
518 |
522
279414178dc6
Also test larger up- and downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
520
diff
changeset
|
519 public void test_LargeUpload() throws SQLException, Failure { |
527
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
520 watchDog.setDuration(25_000); |
522
279414178dc6
Also test larger up- and downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
520
diff
changeset
|
521 prepare(); |
279414178dc6
Also test larger up- and downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
520
diff
changeset
|
522 int n = 4_000_000; |
279414178dc6
Also test larger up- and downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
520
diff
changeset
|
523 MyUploadHandler handler = new MyUploadHandler(n); |
279414178dc6
Also test larger up- and downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
520
diff
changeset
|
524 conn.setUploadHandler(handler); |
279414178dc6
Also test larger up- and downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
520
diff
changeset
|
525 handler.setChunkSize(1024 * 1024); |
279414178dc6
Also test larger up- and downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
520
diff
changeset
|
526 update("COPY INTO foo FROM 'banana' ON CLIENT", n); |
279414178dc6
Also test larger up- and downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
520
diff
changeset
|
527 queryInt("SELECT COUNT(DISTINCT i) FROM foo", n); |
279414178dc6
Also test larger up- and downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
520
diff
changeset
|
528 } |
279414178dc6
Also test larger up- and downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
520
diff
changeset
|
529 |
523
3ff972d266cb
Suppress some warnings
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
522
diff
changeset
|
530 public void test_LargeDownload() throws SQLException, Failure { |
527
ccf9c7fbdb50
Add watchdog timer to catch hangs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
526
diff
changeset
|
531 watchDog.setDuration(25_000); |
522
279414178dc6
Also test larger up- and downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
520
diff
changeset
|
532 test_Download(4_000_000); |
279414178dc6
Also test larger up- and downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
520
diff
changeset
|
533 } |
519
04a72c5bde80
Add OnclientTester.java
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
534 |
526
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
535 public void test_UploadFromStream() throws SQLException, Failure { |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
536 prepare(); |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
537 MonetUploadHandler handler = new MonetUploadHandler() { |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
538 String data = "1|one\n2|two\n3|three\n"; |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
539 |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
540 @Override |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
541 public void handleUpload(MonetConnection.Upload handle, String name, boolean textMode, int offset) throws IOException { |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
542 ByteArrayInputStream s = new ByteArrayInputStream(data.getBytes(StandardCharsets.UTF_8)); |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
543 handle.uploadFrom(s); |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
544 } |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
545 }; |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
546 conn.setUploadHandler(handler); |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
547 update("COPY INTO foo FROM 'banana' ON CLIENT", 3); |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
548 queryInt("SELECT i FROM foo WHERE t = 'three'", 3); |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
549 } |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
550 |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
551 public void test_UploadFromReader() throws SQLException, Failure { |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
552 prepare(); |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
553 MonetUploadHandler handler = new MonetUploadHandler() { |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
554 String data = "1|one\n2|two\n3|three\n"; |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
555 |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
556 @Override |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
557 public void handleUpload(MonetConnection.Upload handle, String name, boolean textMode, int offset) throws IOException { |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
558 StringReader r = new StringReader(data); |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
559 handle.uploadFrom(r); |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
560 } |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
561 }; |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
562 conn.setUploadHandler(handler); |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
563 update("COPY INTO foo FROM 'banana' ON CLIENT", 3); |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
564 queryInt("SELECT i FROM foo WHERE t = 'three'", 3); |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
565 } |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
566 |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
567 public void test_UploadFromReaderOffset() throws SQLException, Failure { |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
568 prepare(); |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
569 MonetUploadHandler handler = new MonetUploadHandler() { |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
570 String data = "1|one\n2|two\n3|three\n"; |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
571 |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
572 @Override |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
573 public void handleUpload(MonetConnection.Upload handle, String name, boolean textMode, int offset) throws IOException { |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
574 BufferedReader r = new BufferedReader(new StringReader(data)); |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
575 handle.uploadFrom(r, offset); |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
576 } |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
577 }; |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
578 conn.setUploadHandler(handler); |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
579 update("COPY OFFSET 2 INTO foo FROM 'banana' ON CLIENT", 2); |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
580 queryInt("SELECT i FROM foo WHERE t = 'three'", 3); |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
581 } |
6060ca8c5c1a
Add test for uploadFrom methods
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
525
diff
changeset
|
582 } |