Mercurial > hg > monetdb-java
diff tests/OnClientTester.java @ 571:8a4e6c82815a onclient
Fix problems with FileTransferHandler and add tests
author | Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com> |
---|---|
date | Mon, 04 Oct 2021 12:35:15 +0200 (2021-10-04) |
parents | ce2b616ed22e |
children | 3370027aeb7f |
line wrap: on
line diff
--- a/tests/OnClientTester.java +++ b/tests/OnClientTester.java @@ -9,10 +9,16 @@ import org.monetdb.jdbc.MonetConnection; import org.monetdb.jdbc.MonetConnection.UploadHandler; import org.monetdb.jdbc.MonetConnection.DownloadHandler; +import org.monetdb.util.FileTransferHandler; import java.io.*; import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; import java.sql.SQLException; +import java.util.List; + +import static java.nio.file.StandardOpenOption.CREATE_NEW; public final class OnClientTester extends TestRunner { @@ -251,6 +257,62 @@ public final class OnClientTester extend assertEq("connection is closed", conn.isClosed(), true); } + public void test_FileTransferHandlerUpload() throws IOException, SQLException, Failure { + prepare(); + Path d = getTmpDir(currentTestName); + Path f = d.resolve("data.txt"); + OutputStream s = Files.newOutputStream(f, CREATE_NEW); + PrintStream ps = new PrintStream(s, false, "UTF-8"); + ps.println("1|one"); + ps.println("2|two"); + ps.println("3|three"); + ps.close(); + conn.setUploadHandler(new FileTransferHandler(d, true)); + update("COPY INTO foo FROM 'data.txt' ON CLIENT", 3); + queryInt("SELECT SUM(i) FROM foo", 6); + } + + public void test_FileTransferHandlerUploadRefused() throws IOException, SQLException, Failure { + prepare(); + Path d = getTmpDir(currentTestName); + Path f = d.resolve("data.txt"); + OutputStream s = Files.newOutputStream(f, CREATE_NEW); + PrintStream ps = new PrintStream(s, false, "UTF-8"); + ps.println("1|one"); + ps.println("2|two"); + ps.println("3|three"); + ps.close(); + + Path d2 = getTmpDir(currentTestName + "2"); + conn.setUploadHandler(new FileTransferHandler(d2, false)); + String quoted = f.toAbsolutePath().toString().replaceAll("'", "''"); + expectError("COPY INTO foo FROM R'"+ quoted + "' ON CLIENT", "not in upload directory"); + // connection is still alive + queryInt("SELECT SUM(i) FROM foo", 0); + } + + public void test_FileTransferHandlerDownload() throws SQLException, Failure, IOException { + prepare(); + update("INSERT INTO foo VALUES (42, 'forty-two')", 1); + Path d = getTmpDir(currentTestName); + conn.setDownloadHandler(new FileTransferHandler(d, false)); + update("COPY SELECT * FROM foo INTO 'data.txt' ON CLIENT", -1); + List<String> lines = Files.readAllLines(d.resolve("data.txt")); + assertEq("lines written", lines.size(), 1); + assertEq("line content", lines.get(0), "42|\"forty-two\""); + } + + public void test_FileTransferHandlerDownloadRefused() throws SQLException, Failure, IOException { + prepare(); + update("INSERT INTO foo VALUES (42, 'forty-two')", 1); + Path d = getTmpDir(currentTestName); + Path d2 = getTmpDir(currentTestName + "2"); + conn.setDownloadHandler(new FileTransferHandler(d2, false)); + String quoted = d.resolve("data.txt").toAbsolutePath().toString().replaceAll("'", "''"); + expectError("COPY SELECT * FROM foo INTO R'" + quoted + "' ON CLIENT", "not in download directory"); + + } + static class MyUploadHandler implements UploadHandler { private final long rows; private final long errorAt;