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