Mercurial > hg > monetdb-java
diff tests/OnClientTester.java @ 604:8e5dbe2ebe7d
Test uploading compressed files in FileTransferHandler
author | Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com> |
---|---|
date | Thu, 09 Dec 2021 16:53:27 +0100 (2021-12-09) |
parents | 662e8de9b002 |
children | 69b0bcf5f62d |
line wrap: on
line diff
--- a/tests/OnClientTester.java +++ b/tests/OnClientTester.java @@ -28,6 +28,7 @@ import java.sql.Statement; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; +import java.util.zip.GZIPOutputStream; import static java.nio.file.StandardOpenOption.CREATE_NEW; @@ -168,6 +169,14 @@ public final class OnClientTester { test_FileTransferHandlerDownloadLatin1(); if (isSelected("FileTransferHandlerDownloadNull")) test_FileTransferHandlerDownloadNull(); + if (isSelected("test_FileTransferHandlerUploadNotCompressed")) + test_FileTransferHandlerUploadNotCompressed(); + if (isSelected("test_FileTransferHandlerUploadNotCompressedSkip")) + test_FileTransferHandlerUploadNotCompressedSkip(); + if (isSelected("test_FileTransferHandlerUploadCompressed")) + test_FileTransferHandlerUploadCompressed(); + if (isSelected("test_FileTransferHandlerUploadCompressedSkip")) + test_FileTransferHandlerUploadCompressedSkip(); if (isSelected("FileTransferHandlerDownloadRefused")) test_FileTransferHandlerDownloadRefused(); } catch (Failure e) { @@ -589,21 +598,45 @@ public final class OnClientTester { exitTest(); } + private void test_FileTransferHandlerUploadNotCompressed() throws IOException, SQLException, Failure { + initTest("FileTransferHandlerUploadNotCompressed"); + testFileTransferHandlerUploadCompressed(StandardCharsets.UTF_8, false, 0); + exitTest(); + } + + private void test_FileTransferHandlerUploadNotCompressedSkip() throws IOException, SQLException, Failure { + initTest("FileTransferHandlerUploadNotCompressedSkip"); + testFileTransferHandlerUploadCompressed(StandardCharsets.UTF_8, false, 2); + exitTest(); + } + + private void test_FileTransferHandlerUploadCompressed() throws IOException, SQLException, Failure { + initTest("FileTransferHandlerUploadCompressed"); + testFileTransferHandlerUploadCompressed(StandardCharsets.UTF_8, true, 0); + exitTest(); + } + + private void test_FileTransferHandlerUploadCompressedSkip() throws IOException, SQLException, Failure { + initTest("FileTransferHandlerUploadCompressedSkip"); + testFileTransferHandlerUploadCompressed(StandardCharsets.UTF_8, true, 2); + exitTest(); + } + private void test_FileTransferHandlerUploadUtf8() throws IOException, SQLException, Failure { initTest("test_FileTransferHandlerUploadUtf8"); - testFileTransferHandlerUpload(StandardCharsets.UTF_8, "UTF-8"); + testFileTransferHandlerUploadEncoding(StandardCharsets.UTF_8, "UTF-8"); exitTest(); } private void test_FileTransferHandlerUploadLatin1() throws IOException, SQLException, Failure { initTest("test_FileTransferHandlerUploadLatin1"); - testFileTransferHandlerUpload(Charset.forName("latin1"), "latin1"); + testFileTransferHandlerUploadEncoding(Charset.forName("latin1"), "latin1"); exitTest(); } private void test_FileTransferHandlerUploadNull() throws IOException, SQLException, Failure { initTest("test_FileTransferHandlerUploadNull"); - testFileTransferHandlerUpload(null, Charset.defaultCharset().name()); + testFileTransferHandlerUploadEncoding(null, Charset.defaultCharset().name()); exitTest(); } @@ -628,7 +661,7 @@ public final class OnClientTester { return "<" + buf.toString().trim() + ">"; } - private void testFileTransferHandlerUpload(Charset handlerEncoding, String fileEncoding) throws IOException, SQLException, Failure { + private void testFileTransferHandlerUploadEncoding(Charset handlerEncoding, String fileEncoding) throws IOException, SQLException, Failure { prepare(); outBuffer.append("Default encoding is " + Charset.defaultCharset().displayName() + "\n"); Path d = getTmpDir(currentTestName); @@ -651,6 +684,37 @@ public final class OnClientTester { // assertEq("query result", two, result); } + private void testFileTransferHandlerUploadCompressed(Charset encoding, boolean compressed, int skipLines) throws IOException, SQLException, Failure { + prepare(); + Path d = getTmpDir(currentTestName); + String fileName = "data.txt"; + if (compressed) + fileName += ".gz"; + Path f = d.resolve(fileName); + OutputStream s = Files.newOutputStream(f, CREATE_NEW); + if (compressed) { + s = new GZIPOutputStream(s); + } + Writer w = new OutputStreamWriter(s, encoding); + PrintWriter ps = new PrintWriter(w); + String[] words = { "one", "twø", "three" }; + int i = 0; + int expectedSum = 0; + for (String word: words) { + int n = i + 1; + ps.println("" + n + "|" + word); + if (i >= skipLines) { + expectedSum += n; + } + i += 1; + } + ps.close(); + conn.setUploadHandler(new FileTransferHandler(d, encoding)); + String query = "COPY OFFSET " + (skipLines + 1) + " INTO foo FROM '" + fileName + "' ON CLIENT"; + update(query); + assertQueryInt("SELECT SUM(i) FROM foo", expectedSum); + } + private void test_FileTransferHandlerUploadRefused() throws IOException, SQLException, Failure { initTest("test_FileTransferHandlerUploadRefused"); prepare();