Commit 1d2b85b2 authored by Andy Wilkinson's avatar Andy Wilkinson

Ensure that TestJarFile uses insertion order for jar's entries

Previously, the order of the entries in a TestJarFile was determined
by the underlying file system rather than by the order in which
they were added. This could lead to unpredicatable ordering and
failures in tests that verify archive entry ordering.

This commit updates TestJarFile to add entries to the archive in
insertion order.

See gh-11695
See gh-11696
parent cafe6dbb
......@@ -22,10 +22,14 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.jar.JarFile;
import java.util.jar.Manifest;
import org.junit.rules.TemporaryFolder;
import org.zeroturnaround.zip.FileSource;
import org.zeroturnaround.zip.ZipEntrySource;
import org.zeroturnaround.zip.ZipUtil;
/**
......@@ -40,6 +44,8 @@ public class TestJarFile {
private final File jarSource;
private final List<ZipEntrySource> entries = new ArrayList<>();
public TestJarFile(TemporaryFolder temporaryFolder) throws IOException {
this.temporaryFolder = temporaryFolder;
this.jarSource = temporaryFolder.newFolder();
......@@ -59,6 +65,7 @@ public class TestJarFile {
if (time != null) {
file.setLastModified(time);
}
this.entries.add(new FileSource(filename, file));
}
public void addFile(String filename, File fileToCopy) throws IOException {
......@@ -67,6 +74,7 @@ public class TestJarFile {
try (InputStream inputStream = new FileInputStream(fileToCopy)) {
copyToFile(inputStream, file);
}
this.entries.add(new FileSource(filename, file));
}
public void addManifest(Manifest manifest) throws IOException {
......@@ -75,6 +83,7 @@ public class TestJarFile {
try (OutputStream outputStream = new FileOutputStream(manifestFile)) {
manifest.write(outputStream);
}
this.entries.add(new FileSource("META-INF/MANIFEST.MF", manifestFile));
}
private File getFilePath(String filename) {
......@@ -114,7 +123,7 @@ public class TestJarFile {
public File getFile(String extension) throws IOException {
File file = this.temporaryFolder.newFile();
file = new File(file.getParent(), file.getName() + "." + extension);
ZipUtil.pack(this.jarSource, file);
ZipUtil.pack(this.entries.toArray(new ZipEntrySource[this.entries.size()]), file);
return file;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment