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) {}

Reply via email to