Mercurial > hg > monetdb-java
comparison tests/OnClientTester.java @ 523:3ff972d266cb onclient
Suppress some warnings
author | Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com> |
---|---|
date | Thu, 26 Aug 2021 12:12:32 +0200 (2021-08-26) |
parents | 279414178dc6 |
children | 71644dc873fe |
comparison
equal
deleted
inserted
replaced
522:279414178dc6 | 523:3ff972d266cb |
---|---|
3 import org.monetdb.jdbc.MonetUploadHandler; | 3 import org.monetdb.jdbc.MonetUploadHandler; |
4 | 4 |
5 import java.io.*; | 5 import java.io.*; |
6 import java.lang.reflect.InvocationTargetException; | 6 import java.lang.reflect.InvocationTargetException; |
7 import java.lang.reflect.Method; | 7 import java.lang.reflect.Method; |
8 import java.nio.charset.StandardCharsets; | |
9 import java.sql.*; | 8 import java.sql.*; |
10 | 9 |
11 public final class OnClientTester { | 10 public final class OnClientTester { |
12 private String jdbcUrl; | 11 private String jdbcUrl; |
13 boolean verbose = false; | 12 boolean verbose = false; |
201 execute("DROP TABLE IF EXISTS foo"); | 200 execute("DROP TABLE IF EXISTS foo"); |
202 execute("CREATE TABLE foo (i INT, t TEXT)"); | 201 execute("CREATE TABLE foo (i INT, t TEXT)"); |
203 } | 202 } |
204 | 203 |
205 static class MyUploadHandler implements MonetUploadHandler { | 204 static class MyUploadHandler implements MonetUploadHandler { |
206 | |
207 private final int rows; | 205 private final int rows; |
208 private final int errorAt; | 206 private final int errorAt; |
209 private final String errorMessage; | 207 private final String errorMessage; |
210 | 208 |
211 private int chunkSize = 100; // small number to trigger more bugs | 209 private int chunkSize = 100; // small number to trigger more bugs |
328 super(message, cause); | 326 super(message, cause); |
329 } | 327 } |
330 | 328 |
331 } | 329 } |
332 | 330 |
333 private void test_Upload() throws Exception { | 331 public void test_Upload() throws Exception { |
334 prepare(); | 332 prepare(); |
335 conn.setUploadHandler(new MyUploadHandler(100)); | 333 conn.setUploadHandler(new MyUploadHandler(100)); |
336 update("COPY INTO foo FROM 'banana' ON CLIENT", 100); | 334 update("COPY INTO foo FROM 'banana' ON CLIENT", 100); |
337 queryInt("SELECT COUNT(*) FROM foo", 100); | 335 queryInt("SELECT COUNT(*) FROM foo", 100); |
338 } | 336 } |
339 | 337 |
340 private void test_ClientRefuses() throws Exception { | 338 public void test_ClientRefuses() throws Exception { |
341 prepare(); | 339 prepare(); |
342 conn.setUploadHandler(new MyUploadHandler("immediate error")); | 340 conn.setUploadHandler(new MyUploadHandler("immediate error")); |
343 expectError("COPY INTO foo FROM 'banana' ON CLIENT", "immediate error"); | 341 expectError("COPY INTO foo FROM 'banana' ON CLIENT", "immediate error"); |
344 queryInt("SELECT COUNT(*) FROM foo", 0); | 342 queryInt("SELECT COUNT(*) FROM foo", 0); |
345 } | 343 } |
346 | 344 |
347 private void test_Offset0() throws SQLException, Failure { | 345 public void test_Offset0() throws SQLException, Failure { |
348 prepare(); | 346 prepare(); |
349 conn.setUploadHandler(new MyUploadHandler(100)); | 347 conn.setUploadHandler(new MyUploadHandler(100)); |
350 update("COPY OFFSET 0 INTO foo FROM 'banana' ON CLIENT", 100); | 348 update("COPY OFFSET 0 INTO foo FROM 'banana' ON CLIENT", 100); |
351 queryInt("SELECT MIN(i) FROM foo", 1); | 349 queryInt("SELECT MIN(i) FROM foo", 1); |
352 queryInt("SELECT MAX(i) FROM foo", 100); | 350 queryInt("SELECT MAX(i) FROM foo", 100); |
353 } | 351 } |
354 | 352 |
355 private void test_Offset1() throws SQLException, Failure { | 353 public void test_Offset1() throws SQLException, Failure { |
356 prepare(); | 354 prepare(); |
357 conn.setUploadHandler(new MyUploadHandler(100)); | 355 conn.setUploadHandler(new MyUploadHandler(100)); |
358 update("COPY OFFSET 1 INTO foo FROM 'banana' ON CLIENT", 100); | 356 update("COPY OFFSET 1 INTO foo FROM 'banana' ON CLIENT", 100); |
359 queryInt("SELECT MIN(i) FROM foo", 1); | 357 queryInt("SELECT MIN(i) FROM foo", 1); |
360 queryInt("SELECT MAX(i) FROM foo", 100); | 358 queryInt("SELECT MAX(i) FROM foo", 100); |
361 } | 359 } |
362 | 360 |
363 private void test_Offset5() throws SQLException, Failure { | 361 public void test_Offset5() throws SQLException, Failure { |
364 prepare(); | 362 prepare(); |
365 conn.setUploadHandler(new MyUploadHandler(100)); | 363 conn.setUploadHandler(new MyUploadHandler(100)); |
366 update("COPY OFFSET 5 INTO foo FROM 'banana' ON CLIENT", 96); | 364 update("COPY OFFSET 5 INTO foo FROM 'banana' ON CLIENT", 96); |
367 queryInt("SELECT MIN(i) FROM foo", 5); | 365 queryInt("SELECT MIN(i) FROM foo", 5); |
368 queryInt("SELECT MAX(i) FROM foo", 100); | 366 queryInt("SELECT MAX(i) FROM foo", 100); |
369 } | 367 } |
370 | 368 |
371 private void testx_ServerCancels() throws SQLException, Failure { | 369 public void testx_ServerCancels() throws SQLException, Failure { |
372 prepare(); | 370 prepare(); |
373 conn.setUploadHandler(new MyUploadHandler(100)); | 371 conn.setUploadHandler(new MyUploadHandler(100)); |
374 update("COPY 10 RECORDS INTO foo FROM 'banana' ON CLIENT", 96); | 372 update("COPY 10 RECORDS INTO foo FROM 'banana' ON CLIENT", 96); |
375 // Server stopped reading after 10 rows. Will we stay in sync? | 373 // Server stopped reading after 10 rows. Will we stay in sync? |
376 queryInt("SELECT COUNT(i) FROM foo", 10); | 374 queryInt("SELECT COUNT(i) FROM foo", 10); |
377 } | 375 } |
378 | 376 |
379 private void test_Download(int n) throws SQLException, Failure { | 377 public void test_Download(int n) throws SQLException, Failure { |
380 prepare(); | 378 prepare(); |
381 MyDownloadHandler handler = new MyDownloadHandler(); | 379 MyDownloadHandler handler = new MyDownloadHandler(); |
382 conn.setDownloadHandler(handler); | 380 conn.setDownloadHandler(handler); |
383 String q = "INSERT INTO foo SELECT value as i, 'number' || value AS t FROM sys.generate_series(0, " + n + ")"; | 381 String q = "INSERT INTO foo SELECT value as i, 'number' || value AS t FROM sys.generate_series(0, " + n + ")"; |
384 update(q, n); | 382 update(q, n); |
385 update("COPY (SELECT * FROM foo) INTO 'banana' ON CLIENT", -1); | 383 update("COPY (SELECT * FROM foo) INTO 'banana' ON CLIENT", -1); |
386 assertEq("download attempts", 1, handler.countAttempts()); | 384 assertEq("download attempts", 1, handler.countAttempts()); |
387 assertEq("lines downloaded", n, handler.lineCount()); | 385 assertEq("lines downloaded", n, handler.lineCount()); |
388 } | 386 } |
389 | 387 |
390 private void test_Download() throws SQLException, Failure { | 388 public void test_Download() throws SQLException, Failure { |
391 test_Download(100); | 389 test_Download(100); |
392 } | 390 } |
393 | 391 |
394 private void test_CancelledDownload() throws SQLException, Failure { | 392 public void test_CancelledDownload() throws SQLException, Failure { |
395 prepare(); | 393 prepare(); |
396 MyDownloadHandler handler = new MyDownloadHandler("download refused"); | 394 MyDownloadHandler handler = new MyDownloadHandler("download refused"); |
397 conn.setDownloadHandler(handler); | 395 conn.setDownloadHandler(handler); |
398 update("INSERT INTO foo SELECT value as i, 'number' || value AS t FROM sys.generate_series(0, 100)", 100); | 396 update("INSERT INTO foo SELECT value as i, 'number' || value AS t FROM sys.generate_series(0, 100)", 100); |
399 expectError("COPY (SELECT * FROM foo) INTO 'banana' ON CLIENT", "download refused"); | 397 expectError("COPY (SELECT * FROM foo) INTO 'banana' ON CLIENT", "download refused"); |
409 handler.setChunkSize(1024 * 1024); | 407 handler.setChunkSize(1024 * 1024); |
410 update("COPY INTO foo FROM 'banana' ON CLIENT", n); | 408 update("COPY INTO foo FROM 'banana' ON CLIENT", n); |
411 queryInt("SELECT COUNT(DISTINCT i) FROM foo", n); | 409 queryInt("SELECT COUNT(DISTINCT i) FROM foo", n); |
412 } | 410 } |
413 | 411 |
414 private void test_LargeDownload() throws SQLException, Failure { | 412 public void test_LargeDownload() throws SQLException, Failure { |
415 test_Download(4_000_000); | 413 test_Download(4_000_000); |
416 } | 414 } |
417 | 415 |
418 } | 416 } |