66import cbit .vcell .parser .ExpressionException ;
77import cbit .vcell .solver .SolverException ;
88import cbit .vcell .xml .XmlParseException ;
9+ import org .apache .commons .compress .archivers .tar .TarArchiveEntry ;
10+ import org .apache .commons .compress .archivers .tar .TarArchiveInputStream ;
911import org .junit .jupiter .api .Test ;
1012
1113import java .beans .PropertyVetoException ;
1618import java .util .Objects ;
1719import java .util .UUID ;
1820import java .util .stream .Collectors ;
21+ import java .util .zip .GZIPInputStream ;
1922
2023import static org .junit .jupiter .api .Assertions .*;
2124import 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}
0 commit comments