Update extract to write files to their original, unlayered location

This commit is contained in:
Andy Wilkinson
2020-03-18 09:51:57 +00:00
parent 44f7508825
commit 9f3bc78f36
5 changed files with 52 additions and 10 deletions

View File

@@ -70,9 +70,9 @@ class ExtractCommandTests {
void runExtractsLayers() throws Exception {
this.command.run(Collections.emptyMap(), Collections.emptyList());
assertThat(this.extract.list()).containsOnly("a", "b", "c");
assertThat(new File(this.extract, "a/a/a.jar")).exists();
assertThat(new File(this.extract, "b/b/b.jar")).exists();
assertThat(new File(this.extract, "c/c/c.jar")).exists();
assertThat(new File(this.extract, "a/a.jar")).exists();
assertThat(new File(this.extract, "b/b.jar")).exists();
assertThat(new File(this.extract, "c/c.jar")).exists();
}
@Test
@@ -81,17 +81,17 @@ class ExtractCommandTests {
this.command.run(Collections.singletonMap(ExtractCommand.DESTINATION_OPTION, out.getAbsolutePath()),
Collections.emptyList());
assertThat(this.extract.list()).containsOnly("out");
assertThat(new File(this.extract, "out/a/a/a.jar")).exists();
assertThat(new File(this.extract, "out/b/b/b.jar")).exists();
assertThat(new File(this.extract, "out/c/c/c.jar")).exists();
assertThat(new File(this.extract, "out/a/a.jar")).exists();
assertThat(new File(this.extract, "out/b/b.jar")).exists();
assertThat(new File(this.extract, "out/c/c.jar")).exists();
}
@Test
void runWhenHasLayerParamsExtractsLimitedLayers() {
this.command.run(Collections.emptyMap(), Arrays.asList("a", "c"));
assertThat(this.extract.list()).containsOnly("a", "c");
assertThat(new File(this.extract, "a/a/a.jar")).exists();
assertThat(new File(this.extract, "c/c/c.jar")).exists();
assertThat(new File(this.extract, "a/a.jar")).exists();
assertThat(new File(this.extract, "c/c.jar")).exists();
}
private File createJarFile(String name) throws IOException {
@@ -133,6 +133,11 @@ class ExtractCommandTests {
return "c";
}
@Override
public String getOriginalLocation(ZipEntry entry) {
return entry.getName().substring(2);
}
}
}

View File

@@ -75,6 +75,24 @@ class IndexedLayersTests {
IndexedLayers layers = new IndexedLayers("test");
assertThat(layers.getLayer(mockEntry("META-INF/MANIFEST.MF"))).isEqualTo("springbootapplication");
}
@Test
void getOriginalLocationWithLibJarReturnsBootInfLibLocation() {
IndexedLayers layers = new IndexedLayers("test");
assertThat(layers.getOriginalLocation(mockEntry("BOOT-INF/layers/test/lib/file.jar"))).isEqualTo("BOOT-INF/lib/file.jar");
}
@Test
void getOriginalLocationWithClassesEntryReturnsBootInfClassesLocation() {
IndexedLayers layers = new IndexedLayers("test");
assertThat(layers.getOriginalLocation(mockEntry("BOOT-INF/layers/test/classes/com/example/Test.class"))).isEqualTo("BOOT-INF/classes/com/example/Test.class");
}
@Test
void getOriginalLocationWhenDoesNotMatchLayerPatternsReturnsEntryLocationAsIs() {
IndexedLayers layers = new IndexedLayers("test");
assertThat(layers.getOriginalLocation(mockEntry("META-INF/MANIFEST.MF"))).isEqualTo("META-INF/MANIFEST.MF");
}
private ZipEntry mockEntry(String name) {
ZipEntry entry = mock(ZipEntry.class);