Mercurial > hg > monetdb-java
comparison tests/OnClientTester.java @ 557:ce2b616ed22e onclient
Add a cancellation callback to UploadHandler
author | Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com> |
---|---|
date | Thu, 16 Sep 2021 15:12:26 +0200 (2021-09-16) |
parents | 87feb93330a6 |
children | 8a4e6c82815a |
comparison
equal
deleted
inserted
replaced
556:87feb93330a6 | 557:ce2b616ed22e |
---|---|
61 public void test_Upload() throws Exception { | 61 public void test_Upload() throws Exception { |
62 prepare(); | 62 prepare(); |
63 MyUploadHandler handler = new MyUploadHandler(100); | 63 MyUploadHandler handler = new MyUploadHandler(100); |
64 conn.setUploadHandler(handler); | 64 conn.setUploadHandler(handler); |
65 update("COPY INTO foo FROM 'banana' ON CLIENT", 100); | 65 update("COPY INTO foo FROM 'banana' ON CLIENT", 100); |
66 assertEq("handler encountered write error", false, handler.encounteredWriteError()); | 66 assertEq("cancellation callback called", false, handler.isCancelled()); |
67 queryInt("SELECT COUNT(*) FROM foo", 100); | 67 queryInt("SELECT COUNT(*) FROM foo", 100); |
68 } | 68 } |
69 | 69 |
70 public void test_ClientRefusesUpload() throws Exception { | 70 public void test_ClientRefusesUpload() throws Exception { |
71 prepare(); | 71 prepare(); |
72 MyUploadHandler handler = new MyUploadHandler("immediate error"); | 72 MyUploadHandler handler = new MyUploadHandler("immediate error"); |
73 conn.setUploadHandler(handler); | 73 conn.setUploadHandler(handler); |
74 expectError("COPY INTO foo FROM 'banana' ON CLIENT", "immediate error"); | 74 expectError("COPY INTO foo FROM 'banana' ON CLIENT", "immediate error"); |
75 assertEq("handler encountered write error", false, handler.encounteredWriteError()); | 75 assertEq("cancellation callback called", false, handler.isCancelled()); |
76 queryInt("SELECT COUNT(*) FROM foo", 0); | 76 queryInt("SELECT COUNT(*) FROM foo", 0); |
77 } | 77 } |
78 | 78 |
79 public void test_Offset0() throws SQLException, Failure { | 79 public void test_Offset0() throws SQLException, Failure { |
80 prepare(); | 80 prepare(); |
81 MyUploadHandler handler = new MyUploadHandler(100); | 81 MyUploadHandler handler = new MyUploadHandler(100); |
82 conn.setUploadHandler(handler); | 82 conn.setUploadHandler(handler); |
83 update("COPY OFFSET 0 INTO foo FROM 'banana' ON CLIENT", 100); | 83 update("COPY OFFSET 0 INTO foo FROM 'banana' ON CLIENT", 100); |
84 assertEq("handler encountered write error", false, handler.encounteredWriteError()); | 84 assertEq("cancellation callback called", false, handler.isCancelled()); |
85 queryInt("SELECT MIN(i) FROM foo", 1); | 85 queryInt("SELECT MIN(i) FROM foo", 1); |
86 queryInt("SELECT MAX(i) FROM foo", 100); | 86 queryInt("SELECT MAX(i) FROM foo", 100); |
87 } | 87 } |
88 | 88 |
89 public void test_Offset1() throws SQLException, Failure { | 89 public void test_Offset1() throws SQLException, Failure { |
90 prepare(); | 90 prepare(); |
91 MyUploadHandler handler = new MyUploadHandler(100); | 91 MyUploadHandler handler = new MyUploadHandler(100); |
92 conn.setUploadHandler(handler); | 92 conn.setUploadHandler(handler); |
93 update("COPY OFFSET 1 INTO foo FROM 'banana' ON CLIENT", 100); | 93 update("COPY OFFSET 1 INTO foo FROM 'banana' ON CLIENT", 100); |
94 assertEq("handler encountered write error", false, handler.encounteredWriteError()); | 94 assertEq("cancellation callback called", false, handler.isCancelled()); |
95 queryInt("SELECT MIN(i) FROM foo", 1); | 95 queryInt("SELECT MIN(i) FROM foo", 1); |
96 queryInt("SELECT MAX(i) FROM foo", 100); | 96 queryInt("SELECT MAX(i) FROM foo", 100); |
97 } | 97 } |
98 | 98 |
99 public void test_Offset5() throws SQLException, Failure { | 99 public void test_Offset5() throws SQLException, Failure { |
100 prepare(); | 100 prepare(); |
101 MyUploadHandler handler = new MyUploadHandler(100); | 101 MyUploadHandler handler = new MyUploadHandler(100); |
102 conn.setUploadHandler(handler); | 102 conn.setUploadHandler(handler); |
103 update("COPY OFFSET 5 INTO foo FROM 'banana' ON CLIENT", 96); | 103 update("COPY OFFSET 5 INTO foo FROM 'banana' ON CLIENT", 96); |
104 assertEq("handler encountered write error", false, handler.encounteredWriteError()); | 104 assertEq("cancellation callback called", false, handler.isCancelled()); |
105 queryInt("SELECT MIN(i) FROM foo", 5); | 105 queryInt("SELECT MIN(i) FROM foo", 5); |
106 queryInt("SELECT MAX(i) FROM foo", 100); | 106 queryInt("SELECT MAX(i) FROM foo", 100); |
107 } | 107 } |
108 | 108 |
109 public void test_ServerStopsReading() throws SQLException, Failure { | 109 public void test_ServerStopsReading() throws SQLException, Failure { |
110 prepare(); | 110 prepare(); |
111 MyUploadHandler handler = new MyUploadHandler(100); | 111 MyUploadHandler handler = new MyUploadHandler(100); |
112 conn.setUploadHandler(handler); | 112 conn.setUploadHandler(handler); |
113 update("COPY 10 RECORDS INTO foo FROM 'banana' ON CLIENT", 10); | 113 update("COPY 10 RECORDS INTO foo FROM 'banana' ON CLIENT", 10); |
114 assertEq("cancellation callback called", true, handler.isCancelled()); | |
114 assertEq("handler encountered write error", true, handler.encounteredWriteError()); | 115 assertEq("handler encountered write error", true, handler.encounteredWriteError()); |
115 // Server stopped reading after 10 rows. Will we stay in sync? | 116 // Server stopped reading after 10 rows. Will we stay in sync? |
116 queryInt("SELECT COUNT(i) FROM foo", 10); | 117 queryInt("SELECT COUNT(i) FROM foo", 10); |
117 } | 118 } |
118 | 119 |
147 int n = 4_000_000; | 148 int n = 4_000_000; |
148 MyUploadHandler handler = new MyUploadHandler(n); | 149 MyUploadHandler handler = new MyUploadHandler(n); |
149 conn.setUploadHandler(handler); | 150 conn.setUploadHandler(handler); |
150 handler.setChunkSize(1024 * 1024); | 151 handler.setChunkSize(1024 * 1024); |
151 update("COPY INTO foo FROM 'banana' ON CLIENT", n); | 152 update("COPY INTO foo FROM 'banana' ON CLIENT", n); |
152 assertEq("handler encountered write error", false, handler.encounteredWriteError()); | 153 assertEq("cancellation callback called", false, handler.isCancelled()); |
153 queryInt("SELECT COUNT(DISTINCT i) FROM foo", n); | 154 queryInt("SELECT COUNT(DISTINCT i) FROM foo", n); |
154 } | 155 } |
155 | 156 |
156 public void test_LargeDownload() throws SQLException, Failure { | 157 public void test_LargeDownload() throws SQLException, Failure { |
157 watchDog.setDuration(25_000); | 158 watchDog.setDuration(25_000); |
211 public void test_FailUploadLate() throws SQLException, Failure { | 212 public void test_FailUploadLate() throws SQLException, Failure { |
212 prepare(); | 213 prepare(); |
213 MyUploadHandler handler = new MyUploadHandler(100, 50, "i don't like line 50"); | 214 MyUploadHandler handler = new MyUploadHandler(100, 50, "i don't like line 50"); |
214 conn.setUploadHandler(handler); | 215 conn.setUploadHandler(handler); |
215 expectError("COPY INTO foo FROM 'banana' ON CLIENT", "i don't like"); | 216 expectError("COPY INTO foo FROM 'banana' ON CLIENT", "i don't like"); |
216 assertEq("handler encountered write error", false, handler.encounteredWriteError()); | 217 assertEq("cancellation callback called", false, handler.isCancelled()); |
217 assertEq("connection is closed", true, conn.isClosed()); | 218 assertEq("connection is closed", true, conn.isClosed()); |
218 } | 219 } |
219 | 220 |
220 | 221 |
221 public void test_FailUploadLate2() throws SQLException, Failure { | 222 public void test_FailUploadLate2() throws SQLException, Failure { |
252 | 253 |
253 static class MyUploadHandler implements UploadHandler { | 254 static class MyUploadHandler implements UploadHandler { |
254 private final long rows; | 255 private final long rows; |
255 private final long errorAt; | 256 private final long errorAt; |
256 private final String errorMessage; | 257 private final String errorMessage; |
257 private boolean encounteredWriteError; | 258 private boolean encounteredWriteError = false; |
259 private boolean cancelled = false; | |
258 | 260 |
259 private int chunkSize = 100; // small number to trigger more bugs | 261 private int chunkSize = 100; // small number to trigger more bugs |
260 | 262 |
261 MyUploadHandler(long rows, long errorAt, String errorMessage) { | 263 MyUploadHandler(long rows, long errorAt, String errorMessage) { |
262 this.rows = rows; | 264 this.rows = rows; |
272 this(0, -1, errorMessage); | 274 this(0, -1, errorMessage); |
273 } | 275 } |
274 | 276 |
275 public void setChunkSize(int chunkSize) { | 277 public void setChunkSize(int chunkSize) { |
276 this.chunkSize = chunkSize; | 278 this.chunkSize = chunkSize; |
279 } | |
280 | |
281 @Override | |
282 public void uploadCancelled() { | |
283 cancelled = true; | |
277 } | 284 } |
278 | 285 |
279 @Override | 286 @Override |
280 public void handleUpload(MonetConnection.Upload handle, String name, boolean textMode, long linesToSkip) throws IOException { | 287 public void handleUpload(MonetConnection.Upload handle, String name, boolean textMode, long linesToSkip) throws IOException { |
281 if (errorAt == -1 && errorMessage != null) { | 288 if (errorAt == -1 && errorMessage != null) { |
296 } | 303 } |
297 } | 304 } |
298 | 305 |
299 public Object encounteredWriteError() { | 306 public Object encounteredWriteError() { |
300 return encounteredWriteError; | 307 return encounteredWriteError; |
308 } | |
309 | |
310 public boolean isCancelled() { | |
311 return cancelled; | |
301 } | 312 } |
302 } | 313 } |
303 | 314 |
304 static class MyDownloadHandler implements DownloadHandler { | 315 static class MyDownloadHandler implements DownloadHandler { |
305 private final int errorAtByte; | 316 private final int errorAtByte; |