Mercurial > hg > monetdb-java
comparison tests/OnClientTester.java @ 575:08c9918177b2 onclient
Do not check the updated row count, it varies between server versions
author | Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com> |
---|---|
date | Wed, 06 Oct 2021 15:30:47 +0200 (2021-10-06) |
parents | 3370027aeb7f |
children | 687034945b3f |
comparison
equal
deleted
inserted
replaced
574:3370027aeb7f | 575:08c9918177b2 |
---|---|
156 | 156 |
157 public void test_Upload() throws SQLException, Failure { | 157 public void test_Upload() throws SQLException, Failure { |
158 prepare(); | 158 prepare(); |
159 MyUploadHandler handler = new MyUploadHandler(100); | 159 MyUploadHandler handler = new MyUploadHandler(100); |
160 conn.setUploadHandler(handler); | 160 conn.setUploadHandler(handler); |
161 update("COPY INTO foo FROM 'banana' ON CLIENT", 100); | 161 update("COPY INTO foo FROM 'banana' ON CLIENT"); |
162 assertEq("cancellation callback called", false, handler.isCancelled()); | 162 assertEq("cancellation callback called", false, handler.isCancelled()); |
163 assertQueryInt("SELECT COUNT(*) FROM foo", 100); | 163 assertQueryInt("SELECT COUNT(*) FROM foo", 100); |
164 } | 164 } |
165 | 165 |
166 public void test_ClientRefusesUpload() throws SQLException, Failure { | 166 public void test_ClientRefusesUpload() throws SQLException, Failure { |
174 | 174 |
175 public void test_Offset0() throws SQLException, Failure { | 175 public void test_Offset0() throws SQLException, Failure { |
176 prepare(); | 176 prepare(); |
177 MyUploadHandler handler = new MyUploadHandler(100); | 177 MyUploadHandler handler = new MyUploadHandler(100); |
178 conn.setUploadHandler(handler); | 178 conn.setUploadHandler(handler); |
179 update("COPY OFFSET 0 INTO foo FROM 'banana' ON CLIENT", 100); | 179 update("COPY OFFSET 0 INTO foo FROM 'banana' ON CLIENT"); |
180 assertEq("cancellation callback called", false, handler.isCancelled()); | 180 assertEq("cancellation callback called", false, handler.isCancelled()); |
181 assertQueryInt("SELECT MIN(i) FROM foo", 1); | 181 assertQueryInt("SELECT MIN(i) FROM foo", 1); |
182 assertQueryInt("SELECT MAX(i) FROM foo", 100); | 182 assertQueryInt("SELECT MAX(i) FROM foo", 100); |
183 } | 183 } |
184 | 184 |
185 public void test_Offset1() throws SQLException, Failure { | 185 public void test_Offset1() throws SQLException, Failure { |
186 prepare(); | 186 prepare(); |
187 MyUploadHandler handler = new MyUploadHandler(100); | 187 MyUploadHandler handler = new MyUploadHandler(100); |
188 conn.setUploadHandler(handler); | 188 conn.setUploadHandler(handler); |
189 update("COPY OFFSET 1 INTO foo FROM 'banana' ON CLIENT", 100); | 189 update("COPY OFFSET 1 INTO foo FROM 'banana' ON CLIENT"); |
190 assertEq("cancellation callback called", false, handler.isCancelled()); | 190 assertEq("cancellation callback called", false, handler.isCancelled()); |
191 assertQueryInt("SELECT MIN(i) FROM foo", 1); | 191 assertQueryInt("SELECT MIN(i) FROM foo", 1); |
192 assertQueryInt("SELECT MAX(i) FROM foo", 100); | 192 assertQueryInt("SELECT MAX(i) FROM foo", 100); |
193 } | 193 } |
194 | 194 |
195 public void test_Offset5() throws SQLException, Failure { | 195 public void test_Offset5() throws SQLException, Failure { |
196 prepare(); | 196 prepare(); |
197 MyUploadHandler handler = new MyUploadHandler(100); | 197 MyUploadHandler handler = new MyUploadHandler(100); |
198 conn.setUploadHandler(handler); | 198 conn.setUploadHandler(handler); |
199 update("COPY OFFSET 5 INTO foo FROM 'banana' ON CLIENT", 96); | 199 update("COPY OFFSET 5 INTO foo FROM 'banana' ON CLIENT"); |
200 assertEq("cancellation callback called", false, handler.isCancelled()); | 200 assertEq("cancellation callback called", false, handler.isCancelled()); |
201 assertQueryInt("SELECT MIN(i) FROM foo", 5); | 201 assertQueryInt("SELECT MIN(i) FROM foo", 5); |
202 assertQueryInt("SELECT MAX(i) FROM foo", 100); | 202 assertQueryInt("SELECT MAX(i) FROM foo", 100); |
203 } | 203 } |
204 | 204 |
205 public void test_ServerStopsReading() throws SQLException, Failure { | 205 public void test_ServerStopsReading() throws SQLException, Failure { |
206 prepare(); | 206 prepare(); |
207 MyUploadHandler handler = new MyUploadHandler(100); | 207 MyUploadHandler handler = new MyUploadHandler(100); |
208 conn.setUploadHandler(handler); | 208 conn.setUploadHandler(handler); |
209 update("COPY 10 RECORDS INTO foo FROM 'banana' ON CLIENT", 10); | 209 update("COPY 10 RECORDS INTO foo FROM 'banana' ON CLIENT"); |
210 assertEq("cancellation callback called", true, handler.isCancelled()); | 210 assertEq("cancellation callback called", true, handler.isCancelled()); |
211 assertEq("handler encountered write error", true, handler.encounteredWriteError()); | 211 assertEq("handler encountered write error", true, handler.encounteredWriteError()); |
212 // connection is still alive | 212 // connection is still alive |
213 assertQueryInt("SELECT COUNT(i) FROM foo", 10); | 213 assertQueryInt("SELECT COUNT(i) FROM foo", 10); |
214 } | 214 } |
216 public void test_Download(int n) throws SQLException, Failure { | 216 public void test_Download(int n) throws SQLException, Failure { |
217 prepare(); | 217 prepare(); |
218 MyDownloadHandler handler = new MyDownloadHandler(); | 218 MyDownloadHandler handler = new MyDownloadHandler(); |
219 conn.setDownloadHandler(handler); | 219 conn.setDownloadHandler(handler); |
220 String q = "INSERT INTO foo SELECT value as i, 'number' || value AS t FROM sys.generate_series(0, " + n + ")"; | 220 String q = "INSERT INTO foo SELECT value as i, 'number' || value AS t FROM sys.generate_series(0, " + n + ")"; |
221 update(q, n); | 221 update(q); |
222 update("COPY (SELECT * FROM foo) INTO 'banana' ON CLIENT", -1); | 222 update("COPY (SELECT * FROM foo) INTO 'banana' ON CLIENT"); |
223 assertEq("download attempts", 1, handler.countAttempts()); | 223 assertEq("download attempts", 1, handler.countAttempts()); |
224 assertEq("lines downloaded", n, handler.lineCount()); | 224 assertEq("lines downloaded", n, handler.lineCount()); |
225 // connection is still alive | 225 // connection is still alive |
226 assertQueryInt("SELECT COUNT(*) FROM foo", n); | 226 assertQueryInt("SELECT COUNT(*) FROM foo", n); |
227 } | 227 } |
233 public void test_ClientRefusesDownload() throws SQLException, Failure { | 233 public void test_ClientRefusesDownload() throws SQLException, Failure { |
234 prepare(); | 234 prepare(); |
235 BugFixLevel level = getLevel(); | 235 BugFixLevel level = getLevel(); |
236 MyDownloadHandler handler = new MyDownloadHandler("download refused"); | 236 MyDownloadHandler handler = new MyDownloadHandler("download refused"); |
237 conn.setDownloadHandler(handler); | 237 conn.setDownloadHandler(handler); |
238 update("INSERT INTO foo SELECT value as i, 'number' || value AS t FROM sys.generate_series(0, 100)", 100); | 238 update("INSERT INTO foo SELECT value as i, 'number' || value AS t FROM sys.generate_series(0, 100)"); |
239 expectError("COPY (SELECT * FROM foo) INTO 'banana' ON CLIENT", "download refused"); | 239 expectError("COPY (SELECT * FROM foo) INTO 'banana' ON CLIENT", "download refused"); |
240 // Wish it were different but the server closes the connection | 240 // Wish it were different but the server closes the connection |
241 expectError("SELECT 42 -- check if the connection still works", "Connection to server lost!"); | 241 expectError("SELECT 42 -- check if the connection still works", "Connection to server lost!"); |
242 if (level.compareTo(BugFixLevel.CanRefuseDownload) >= 0) { | 242 if (level.compareTo(BugFixLevel.CanRefuseDownload) >= 0) { |
243 // connection is still alive | 243 // connection is still alive |
250 prepare(); | 250 prepare(); |
251 int n = 4_000_000; | 251 int n = 4_000_000; |
252 MyUploadHandler handler = new MyUploadHandler(n); | 252 MyUploadHandler handler = new MyUploadHandler(n); |
253 conn.setUploadHandler(handler); | 253 conn.setUploadHandler(handler); |
254 handler.setChunkSize(1024 * 1024); | 254 handler.setChunkSize(1024 * 1024); |
255 update("COPY INTO foo FROM 'banana' ON CLIENT", n); | 255 update("COPY INTO foo FROM 'banana' ON CLIENT"); |
256 assertEq("cancellation callback called", false, handler.isCancelled()); | 256 assertEq("cancellation callback called", false, handler.isCancelled()); |
257 // connection is still alive | 257 // connection is still alive |
258 assertQueryInt("SELECT COUNT(DISTINCT i) FROM foo", n); | 258 assertQueryInt("SELECT COUNT(DISTINCT i) FROM foo", n); |
259 } | 259 } |
260 | 260 |
274 ByteArrayInputStream s = new ByteArrayInputStream(data.getBytes(StandardCharsets.UTF_8)); | 274 ByteArrayInputStream s = new ByteArrayInputStream(data.getBytes(StandardCharsets.UTF_8)); |
275 handle.uploadFrom(s); | 275 handle.uploadFrom(s); |
276 } | 276 } |
277 }; | 277 }; |
278 conn.setUploadHandler(handler); | 278 conn.setUploadHandler(handler); |
279 update("COPY INTO foo FROM 'banana' ON CLIENT", 3); | 279 update("COPY INTO foo FROM 'banana' ON CLIENT"); |
280 // connection is still alive | 280 // connection is still alive |
281 assertQueryInt("SELECT i FROM foo WHERE t = 'three'", 3); | 281 assertQueryInt("SELECT i FROM foo WHERE t = 'three'", 3); |
282 } | 282 } |
283 | 283 |
284 public void test_UploadFromReader() throws SQLException, Failure { | 284 public void test_UploadFromReader() throws SQLException, Failure { |
292 StringReader r = new StringReader(data); | 292 StringReader r = new StringReader(data); |
293 handle.uploadFrom(r); | 293 handle.uploadFrom(r); |
294 } | 294 } |
295 }; | 295 }; |
296 conn.setUploadHandler(handler); | 296 conn.setUploadHandler(handler); |
297 update("COPY INTO foo FROM 'banana' ON CLIENT", 3); | 297 update("COPY INTO foo FROM 'banana' ON CLIENT"); |
298 assertQueryInt("SELECT i FROM foo WHERE t = 'three'", 3); | 298 assertQueryInt("SELECT i FROM foo WHERE t = 'three'", 3); |
299 } | 299 } |
300 | 300 |
301 public void test_UploadFromReaderOffset() throws SQLException, Failure { | 301 public void test_UploadFromReaderOffset() throws SQLException, Failure { |
302 prepare(); | 302 prepare(); |
308 BufferedReader r = new BufferedReader(new StringReader(data)); | 308 BufferedReader r = new BufferedReader(new StringReader(data)); |
309 handle.uploadFrom(r, linesToSkip); | 309 handle.uploadFrom(r, linesToSkip); |
310 } | 310 } |
311 }; | 311 }; |
312 conn.setUploadHandler(handler); | 312 conn.setUploadHandler(handler); |
313 update("COPY OFFSET 2 INTO foo FROM 'banana' ON CLIENT", 2); | 313 update("COPY OFFSET 2 INTO foo FROM 'banana' ON CLIENT"); |
314 assertQueryInt("SELECT i FROM foo WHERE t = 'three'", 3); | 314 assertQueryInt("SELECT i FROM foo WHERE t = 'three'", 3); |
315 } | 315 } |
316 | 316 |
317 public void test_FailUploadLate() throws SQLException, Failure { | 317 public void test_FailUploadLate() throws SQLException, Failure { |
318 prepare(); | 318 prepare(); |
347 | 347 |
348 public void test_FailDownloadLate() throws SQLException, Failure { | 348 public void test_FailDownloadLate() throws SQLException, Failure { |
349 prepare(); | 349 prepare(); |
350 MyDownloadHandler handler = new MyDownloadHandler(200, "download refused"); | 350 MyDownloadHandler handler = new MyDownloadHandler(200, "download refused"); |
351 conn.setDownloadHandler(handler); | 351 conn.setDownloadHandler(handler); |
352 update("INSERT INTO foo SELECT value as i, 'number' || value AS t FROM sys.generate_series(0, 100)", 100); | 352 update("INSERT INTO foo SELECT value as i, 'number' || value AS t FROM sys.generate_series(0, 100)"); |
353 expectError("COPY (SELECT * FROM sys.generate_series(0,200)) INTO 'banana' ON CLIENT", "download refused"); | 353 expectError("COPY (SELECT * FROM sys.generate_series(0,200)) INTO 'banana' ON CLIENT", "download refused"); |
354 // Exception closes the connection | 354 // Exception closes the connection |
355 assertEq("connection is closed", conn.isClosed(), true); | 355 assertEq("connection is closed", conn.isClosed(), true); |
356 } | 356 } |
357 | 357 |
364 ps.println("1|one"); | 364 ps.println("1|one"); |
365 ps.println("2|two"); | 365 ps.println("2|two"); |
366 ps.println("3|three"); | 366 ps.println("3|three"); |
367 ps.close(); | 367 ps.close(); |
368 conn.setUploadHandler(new FileTransferHandler(d, true)); | 368 conn.setUploadHandler(new FileTransferHandler(d, true)); |
369 update("COPY INTO foo FROM 'data.txt' ON CLIENT", 3); | 369 update("COPY INTO foo FROM 'data.txt' ON CLIENT"); |
370 assertQueryInt("SELECT SUM(i) FROM foo", 6); | 370 assertQueryInt("SELECT SUM(i) FROM foo", 6); |
371 } | 371 } |
372 | 372 |
373 public void test_FileTransferHandlerUploadRefused() throws IOException, SQLException, Failure { | 373 public void test_FileTransferHandlerUploadRefused() throws IOException, SQLException, Failure { |
374 prepare(); | 374 prepare(); |
389 assertQueryInt("SELECT SUM(i) FROM foo", 0); | 389 assertQueryInt("SELECT SUM(i) FROM foo", 0); |
390 } | 390 } |
391 | 391 |
392 public void test_FileTransferHandlerDownload() throws SQLException, Failure, IOException { | 392 public void test_FileTransferHandlerDownload() throws SQLException, Failure, IOException { |
393 prepare(); | 393 prepare(); |
394 update("INSERT INTO foo VALUES (42, 'forty-two')", 1); | 394 update("INSERT INTO foo VALUES (42, 'forty-two')"); |
395 Path d = getTmpDir(currentTestName); | 395 Path d = getTmpDir(currentTestName); |
396 conn.setDownloadHandler(new FileTransferHandler(d, false)); | 396 conn.setDownloadHandler(new FileTransferHandler(d, false)); |
397 update("COPY SELECT * FROM foo INTO 'data.txt' ON CLIENT", -1); | 397 update("COPY SELECT * FROM foo INTO 'data.txt' ON CLIENT"); |
398 List<String> lines = Files.readAllLines(d.resolve("data.txt")); | 398 List<String> lines = Files.readAllLines(d.resolve("data.txt")); |
399 assertEq("lines written", lines.size(), 1); | 399 assertEq("lines written", lines.size(), 1); |
400 assertEq("line content", lines.get(0), "42|\"forty-two\""); | 400 assertEq("line content", lines.get(0), "42|\"forty-two\""); |
401 // connection is still alive | 401 // connection is still alive |
402 assertQueryInt("SELECT SUM(i) FROM foo", 42); | 402 assertQueryInt("SELECT SUM(i) FROM foo", 42); |
403 } | 403 } |
404 | 404 |
405 public void test_FileTransferHandlerDownloadRefused() throws SQLException, Failure, IOException { | 405 public void test_FileTransferHandlerDownloadRefused() throws SQLException, Failure, IOException { |
406 prepare(); | 406 prepare(); |
407 BugFixLevel level = getLevel(); | 407 BugFixLevel level = getLevel(); |
408 update("INSERT INTO foo VALUES (42, 'forty-two')", 1); | 408 update("INSERT INTO foo VALUES (42, 'forty-two')"); |
409 Path d = getTmpDir(currentTestName); | 409 Path d = getTmpDir(currentTestName); |
410 Path d2 = getTmpDir(currentTestName + "2"); | 410 Path d2 = getTmpDir(currentTestName + "2"); |
411 conn.setDownloadHandler(new FileTransferHandler(d2, false)); | 411 conn.setDownloadHandler(new FileTransferHandler(d2, false)); |
412 String quoted = d.resolve("data.txt").toAbsolutePath().toString().replaceAll("'", "''"); | 412 String quoted = d.resolve("data.txt").toAbsolutePath().toString().replaceAll("'", "''"); |
413 expectError("COPY SELECT * FROM foo INTO R'" + quoted + "' ON CLIENT", "not in download directory"); | 413 expectError("COPY SELECT * FROM foo INTO R'" + quoted + "' ON CLIENT", "not in download directory"); |