Skip to content

Commit 6f82a4b

Browse files
committed
recreate tar file without macos metadata files.
1 parent 57c68f4 commit 6f82a4b

File tree

2 files changed

+45
-32
lines changed

2 files changed

+45
-32
lines changed

vcell-native/src/test/java/org/vcell/libvcell/EntrypointsTest.java

Lines changed: 45 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import cbit.vcell.parser.ExpressionException;
77
import cbit.vcell.solver.SolverException;
88
import cbit.vcell.xml.XmlParseException;
9+
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
10+
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
911
import org.junit.jupiter.api.Test;
1012

1113
import java.beans.PropertyVetoException;
@@ -16,6 +18,7 @@
1618
import java.util.Objects;
1719
import java.util.UUID;
1820
import java.util.stream.Collectors;
21+
import java.util.zip.GZIPInputStream;
1922

2023
import static org.junit.jupiter.api.Assertions.*;
2124
import static org.vcell.libvcell.SolverUtils.sbmlToFiniteVolumeInput;
@@ -56,22 +59,12 @@ public void testVcmlToFiniteVolumeInput_field_data() throws SolverException, Exp
5659
String vcmlContent = getFileContentsAsString("/FieldDataDemo.vcml");
5760
File parent_dir = Files.createTempDirectory("vcmlToFiniteVolumeInput_"+UUID.randomUUID()).toFile();
5861
File output_dir = new File(parent_dir, "output_dir");
59-
byte[] tgz_dir = getFileContentsAsBytes("/test2_lsm_DEMO.tgz");
60-
// extract the tgz_dir to parent_dir
6162
File ext_data_dir = new File(parent_dir, "test2_lsm_DEMO");
6263
assertEquals(0, countFiles(ext_data_dir));
63-
assertEquals(0, countFiles(output_dir));
64-
removeDirectory(ext_data_dir);
65-
try (FileOutputStream fos = new FileOutputStream(new File(parent_dir, "test2_lsm_DEMO.tgz"))) {
66-
fos.write(tgz_dir);
67-
// untar the tgz file
68-
ProcessBuilder pb = new ProcessBuilder("tar", "-xzf", "test2_lsm_DEMO.tgz");
69-
pb.directory(parent_dir);
70-
Process p = pb.start();
71-
assertEquals(0, p.waitFor());
72-
}
64+
extractTgz(EntrypointsTest.class.getResourceAsStream("/test2_lsm_DEMO.tgz"), parent_dir);
7365
listFilesInDirectory(ext_data_dir);
7466
assertEquals(10, countFiles(ext_data_dir));
67+
7568
assertEquals(0, countFiles(output_dir));
7669
String simulationName = "Simulation0";
7770
vcmlToFiniteVolumeInput(vcmlContent, simulationName, parent_dir, output_dir);
@@ -85,31 +78,22 @@ public void testVcmlToFiniteVolumeInput_field_data_not_found() throws SolverExce
8578
String vcmlContent = getFileContentsAsString("/FieldDataDemo.vcml");
8679
File parent_dir = Files.createTempDirectory("vcmlToFiniteVolumeInput_"+UUID.randomUUID()).toFile();
8780
File output_dir = new File(parent_dir, "output_dir");
88-
byte[] tgz_dir = getFileContentsAsBytes("/test2_lsm_DEMO.tgz");
89-
// extract the tgz_dir to parent_dir
90-
File ext_data_dir_correctly_named = new File(parent_dir, "test2_lsm_DEMO");
81+
File ext_data_dir = new File(parent_dir, "test2_lsm_DEMO");
9182
File ext_data_dir_MISSPELLED = new File(parent_dir, "test2_lsm_DEMO_MISSPELLED");
92-
assertEquals(0, countFiles(ext_data_dir_correctly_named));
93-
assertEquals(0, countFiles(output_dir));
94-
removeDirectory(ext_data_dir_correctly_named);
95-
try (FileOutputStream fos = new FileOutputStream(new File(parent_dir, "test2_lsm_DEMO.tgz"))) {
96-
fos.write(tgz_dir);
97-
// untar the tgz file
98-
ProcessBuilder pb = new ProcessBuilder("tar", "-xzf", "test2_lsm_DEMO.tgz");
99-
pb.directory(parent_dir);
100-
Process p = pb.start();
101-
assertEquals(0, p.waitFor());
102-
}
83+
assertEquals(0, countFiles(ext_data_dir));
84+
assertEquals(0, countFiles(ext_data_dir_MISSPELLED));
85+
extractTgz(EntrypointsTest.class.getResourceAsStream("/test2_lsm_DEMO.tgz"), parent_dir);
86+
Files.move(ext_data_dir.toPath(), ext_data_dir_MISSPELLED.toPath()).toFile();
87+
assertEquals(0, countFiles(ext_data_dir));
88+
listFilesInDirectory(ext_data_dir_MISSPELLED);
89+
assertEquals(10, countFiles(ext_data_dir_MISSPELLED));
10390

104-
// rename ext_data_dir on the filesystem to "test2_lsm_DEMO_MISSPELLED"
105-
File ext_data_dir_moved = Files.move(ext_data_dir_correctly_named.toPath(), ext_data_dir_MISSPELLED.toPath()).toFile();
106-
listFilesInDirectory(ext_data_dir_moved);
107-
assertEquals(10, countFiles(ext_data_dir_moved));
91+
assertEquals(10, countFiles(ext_data_dir_MISSPELLED));
10892
assertEquals(0, countFiles(output_dir));
10993
String simulationName = "Simulation0";
11094
IllegalArgumentException exc = assertThrows(IllegalArgumentException.class, () -> vcmlToFiniteVolumeInput(vcmlContent, simulationName, parent_dir, output_dir));
111-
assertTrue(exc.getMessage().contains("Field data directory does not exist") && exc.getMessage().contains(ext_data_dir_correctly_named.getName()));
112-
assertEquals(10, countFiles(ext_data_dir_moved));
95+
assertTrue(exc.getMessage().contains("Field data directory does not exist") && exc.getMessage().contains(ext_data_dir.getName()));
96+
assertEquals(10, countFiles(ext_data_dir_MISSPELLED));
11397
assertEquals(0, countFiles(output_dir));
11498
removeDirectory(parent_dir);
11599
}
@@ -219,4 +203,33 @@ private void listFilesInDirectory(File dir) {
219203
}
220204
}
221205
}
206+
207+
public static void extractTgz(InputStream tgzFileStream, File outputDir) throws IOException {
208+
try (GZIPInputStream gis = new GZIPInputStream(tgzFileStream);
209+
TarArchiveInputStream tis = new TarArchiveInputStream(gis)) {
210+
211+
TarArchiveEntry entry;
212+
while ((entry = tis.getNextTarEntry()) != null) {
213+
File outputFile = new File(outputDir, entry.getName());
214+
if (entry.isDirectory()) {
215+
if (!outputFile.exists()) {
216+
outputFile.mkdirs();
217+
}
218+
} else {
219+
File parent = outputFile.getParentFile();
220+
if (!parent.exists()) {
221+
parent.mkdirs();
222+
}
223+
try (OutputStream os = Files.newOutputStream(outputFile.toPath())) {
224+
byte[] buffer = new byte[1024];
225+
int len;
226+
while ((len = tis.read(buffer)) != -1) {
227+
os.write(buffer, 0, len);
228+
}
229+
}
230+
}
231+
}
232+
}
233+
}
234+
222235
}
-585 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)