Repository: flink Updated Branches: refs/heads/release-1.4 5380ad3a3 -> 1a852ecfe
[FLINK-9743][client] Use correct zip path separator for nested jars This closes #6263. Project: http://git-wip-us.apache.org/repos/asf/flink/repo Commit: http://git-wip-us.apache.org/repos/asf/flink/commit/1a852ecf Tree: http://git-wip-us.apache.org/repos/asf/flink/tree/1a852ecf Diff: http://git-wip-us.apache.org/repos/asf/flink/diff/1a852ecf Branch: refs/heads/release-1.4 Commit: 1a852ecfeb077a5bee6ccb4f7af7ac1303421742 Parents: 5380ad3 Author: snuyanzin <snuyan...@gmail.com> Authored: Thu Jul 5 11:58:33 2018 +0300 Committer: zentol <ches...@apache.org> Committed: Tue Jul 10 21:05:58 2018 +0200 ---------------------------------------------------------------------- .../flink/client/program/PackagedProgram.java | 4 ++- .../client/program/PackagedProgramTest.java | 28 ++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flink/blob/1a852ecf/flink-clients/src/main/java/org/apache/flink/client/program/PackagedProgram.java ---------------------------------------------------------------------- diff --git a/flink-clients/src/main/java/org/apache/flink/client/program/PackagedProgram.java b/flink-clients/src/main/java/org/apache/flink/client/program/PackagedProgram.java index 35bb04f..8d2c248 100644 --- a/flink-clients/src/main/java/org/apache/flink/client/program/PackagedProgram.java +++ b/flink-clients/src/main/java/org/apache/flink/client/program/PackagedProgram.java @@ -692,7 +692,9 @@ public class PackagedProgram { for (int i = 0; i < containedJarFileEntries.size(); i++) { final JarEntry entry = containedJarFileEntries.get(i); String name = entry.getName(); - name = name.replace(File.separatorChar, '_'); + // '/' as in case of zip, jar + // java.util.zip.ZipEntry#isDirectory always looks only for '/' not for File.separator + name = name.replace('/', '_'); File tempFile; try { http://git-wip-us.apache.org/repos/asf/flink/blob/1a852ecf/flink-clients/src/test/java/org/apache/flink/client/program/PackagedProgramTest.java ---------------------------------------------------------------------- diff --git a/flink-clients/src/test/java/org/apache/flink/client/program/PackagedProgramTest.java b/flink-clients/src/test/java/org/apache/flink/client/program/PackagedProgramTest.java index e68d1dc..fdbaefa 100644 --- a/flink-clients/src/test/java/org/apache/flink/client/program/PackagedProgramTest.java +++ b/flink-clients/src/test/java/org/apache/flink/client/program/PackagedProgramTest.java @@ -19,18 +19,29 @@ package org.apache.flink.client.program; import org.apache.flink.client.CliFrontendTestUtils; +import org.apache.flink.configuration.ConfigConstants; import org.junit.Assert; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.TemporaryFolder; import java.io.File; +import java.io.FileOutputStream; import java.io.PrintStream; +import java.nio.file.Files; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; /** * Tests for the {@link PackagedProgramTest}. */ public class PackagedProgramTest { + @Rule + public final TemporaryFolder temporaryFolder = new TemporaryFolder(); + @Test public void testGetPreviewPlan() { try { @@ -56,6 +67,23 @@ public class PackagedProgramTest { } } + @Test + public void testExtractContainedLibraries() throws Exception { + String s = "testExtractContainedLibraries"; + byte[] nestedJarContent = s.getBytes(ConfigConstants.DEFAULT_CHARSET); + File fakeJar = temporaryFolder.newFile("test.jar"); + try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(fakeJar))) { + ZipEntry entry = new ZipEntry("lib/internalTest.jar"); + zos.putNextEntry(entry); + zos.write(nestedJarContent); + zos.closeEntry(); + } + + final List<File> files = PackagedProgram.extractContainedLibraries(fakeJar.toURI().toURL()); + Assert.assertEquals(1, files.size()); + Assert.assertArrayEquals(nestedJarContent, Files.readAllBytes(files.iterator().next().toPath())); + } + private static final class NullOutputStream extends java.io.OutputStream { @Override public void write(int b) {}