annotate tests/OnClientTester.java @ 529:ac6331eb7175 onclient

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