diff --git a/.gitignore b/.gitignore index d217a9f056ef2d187b035ab9da6ba7c82d4fdaf6..dbd4f463e0a23fd215c3a53539a23b9e4a364ebb 100755 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,9 @@ /bindings/java/dist /bindings/java/test/output/results /bindings/java/test/output/gold/dummy +/bindings/java/test/output/gold/*_BU.txt +/bindings/java/test/output/gold/*_CPP.txt +/bindings/java/test/output/gold/*_CPP_SRT.txt /bindings/java/test/input /bindings/java/nbproject/genfiles.properties /bindings/java/nbproject/nbjdk.properties diff --git a/bindings/java/test/org/sleuthkit/datamodel/BottomUpTest.java b/bindings/java/test/org/sleuthkit/datamodel/BottomUpTest.java index 1890c4130b52331410f06ee712d7511565b98fc3..09ebae050d09e03b736919d067a85e2ccdc7242c 100644 --- a/bindings/java/test/org/sleuthkit/datamodel/BottomUpTest.java +++ b/bindings/java/test/org/sleuthkit/datamodel/BottomUpTest.java @@ -19,6 +19,7 @@ package org.sleuthkit.datamodel; import java.io.FileNotFoundException; +import java.io.OutputStreamWriter; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -30,12 +31,12 @@ /** * - * Verifies that getParent works as intended. + * Verifies that getParent works as intended by verifying that it gets the + * same structure as we got from the TopDown tests. Does not compare against + * a gold standard. */ @RunWith(Parameterized.class) public class BottomUpTest { - - static final String BU = "_BU"; private List<String> imagePaths; public BottomUpTest(List<String> imagePaths) { @@ -67,11 +68,11 @@ public static Collection<Object[]> testImageData() { @Test public void testBottomUpDiff() { String title = DataModelTestSuite.getImgName(imagePaths.get(0)); - String exFile = DataModelTestSuite.buildPath(DataModelTestSuite.getRsltPath(), title, BU, ".txt"); + String exFile = DataModelTestSuite.buildPath(DataModelTestSuite.getRsltPath(), title, DataModelTestSuite.BTTMUP, ".txt"); try { java.io.File dbFile = new java.io.File(DataModelTestSuite.getRsltPath()); String tempDirPath = dbFile.getAbsolutePath(); - String dbPath = DataModelTestSuite.buildPath(tempDirPath, title, BU, ".db"); + String dbPath = DataModelTestSuite.buildPath(tempDirPath, title, DataModelTestSuite.BTTMUP, ".db"); dbFile.delete(); SleuthkitCase sk = SleuthkitCase.newCase(dbPath); String timezone = ""; @@ -85,6 +86,8 @@ public void testBottomUpDiff() { DataModelTestSuite.writeExceptions(exFile, inp); } process.commit(); + + // open the "leaf file" generated by the TopDown test and verify that getParent() follows the same sequence java.io.File lvs = new java.io.File(dbFile.getAbsolutePath() + java.io.File.separator + title); Scanner climber; climber = new Scanner(lvs); diff --git a/bindings/java/test/org/sleuthkit/datamodel/CPPtoJavaCompare.java b/bindings/java/test/org/sleuthkit/datamodel/CPPtoJavaCompare.java index dc1ccfc5abffe7b6e27bdde5235ac07e44356e7b..f42894004e6d51ebfa52dbfdc98c4b50e056c07d 100644 --- a/bindings/java/test/org/sleuthkit/datamodel/CPPtoJavaCompare.java +++ b/bindings/java/test/org/sleuthkit/datamodel/CPPtoJavaCompare.java @@ -20,12 +20,14 @@ import java.io.BufferedOutputStream; import java.io.FileOutputStream; +import java.io.FileWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Scanner; import java.util.logging.Level; import java.util.logging.Logger; import static org.junit.Assert.*; @@ -64,32 +66,119 @@ public static Collection<Object[]> testImageData() { return data; } + /** * Runs the test */ @Test - public void CPPtoJavaCompare() { + public void testCppToJavaDiff() { try { + // generate the C++ output and store it in gold standard -- even though it won't be checked in -- redesign this! + String standardPathCPP = DataModelTestSuite.standardFilePath(imagePaths, DataModelTestSuite.CPP); + runTskGetTimes(standardPathCPP, imagePaths); + + // perform test List<Boolean> test = basicTest(); - assertEquals("Generated results (" + oldStandardPath + ") differ with gold standard (" + testStandardPath + ") .", test.get(0), true); + + // compare exceptions + assertEquals("Generated exceptions (" + outputExceptionsPath + ") differ with gold standards (" + goldExceptionsPath + ") .", test.get(0), true); + + //compare sorted output instead of unsorted output + String goldFilePathSorted = DataModelTestSuite.sortedFlPth(goldFilePath); + String outputFilePathSorted = DataModelTestSuite.sortedFlPth(outputFilePath); + List<Boolean> ret = new ArrayList<Boolean>(1); + ret.add(DataModelTestSuite.comparecontent(goldFilePathSorted, outputFilePathSorted)); + assertEquals("Java output (" + outputFilePathSorted + ") differ with C++ results (" + goldFilePathSorted + ") .", ret.get(0), true); } catch (Exception ex) { fail("Couldn't open gold standard file."); } } - + + /** - * Extends basicTest to compare the sorted files and not the output files + * Runs tsk_gettimes to create a standard for comparing DataModel and TSK + * output. + * + * @param outputFile The path to the file to put the tsk data in. Sorted results will be stored in separate file. + * @param img the path to the image, is a list for compatability reasons */ - @Override - public List<Boolean> basicTest() { - super.basicTest(); - oldStandardPath = DataModelTestSuite.sortedFlPth(oldStandardPath); - testStandardPath = DataModelTestSuite.sortedFlPth(testStandardPath); - List<Boolean> ret = new ArrayList<Boolean>(1); - ret.add(DataModelTestSuite.comparecontent(oldStandardPath, testStandardPath)); - return ret; + private static void runTskGetTimes(String outputFile, List<String> img) { + String tsk_loc; + java.io.File up = new java.io.File(System.getProperty("user.dir")); + up = up.getParentFile(); + up = up.getParentFile(); + if (System.getProperty("os.name").contains("Windows")) { + tsk_loc = up.getAbsolutePath() + "\\win32\\Release\\tsk_gettimes.exe"; + } else { + tsk_loc = up.getAbsolutePath() + "/tools/autotools/tsk_gettimes"; + } + + // verify it exists + java.io.File f = new java.io.File(tsk_loc); + assertTrue("cannot find tsk_gettimes method", f.exists()); + + String[] cmd = {tsk_loc, img.get(0)}; + try { + Process p = Runtime.getRuntime().exec(cmd); + Scanner read = new Scanner(p.getInputStream()); + Scanner error1 = new Scanner(p.getErrorStream()); + FileWriter out = new FileWriter(outputFile); + while (read.hasNextLine()) { + String line = read.nextLine(); + line = line.replace(" (deleted)", ""); + line = line.replace("(null)", ""); + //removes unknown data attached to metaAddr + String[] linecontents = line.split("\\|"); + String metaaddrcon = linecontents[2]; + String mtad = metaaddrcon.split("\\-")[0]; + line = line.replace(metaaddrcon, mtad); + out.append(line); + out.flush(); + out.append("\n"); + } + DataModelTestSuite.runSort(outputFile); + } catch (Exception ex) { + logg.log(Level.SEVERE, "Failed to run CPP program", ex); + } + + java.io.File xfile = new java.io.File(DataModelTestSuite.exceptionPath(outputFile)); + try { + xfile.createNewFile(); + } catch (IOException ex) { + logg.log(Level.SEVERE, "Failed to create exceptions file", ex); + } + } + + /** + * gets the metadata from a datamodel file object + * + * @param fi + * @return + * @throws TskCoreException + */ + private static String convertToBodyFileFormat(FsContent fi) throws TskCoreException { + String[] path = fi.getUniquePath().split("/", 3); + String name; + if (path[2].contains("vol_")) { + String[] pthget = path[2].split("_", 2); + name = pthget[pthget.length - 1]; + } else { + name = path[2]; + } + name = name.replaceAll("[^\\x20-\\x7e]", ""); + String prpnd; + if (fi.isFile()) { + prpnd = "r/"; + } else { + prpnd = "d/"; + } + if (fi.isVirtual() && !fi.isDir()) { + prpnd = "v/"; + } + return ("0|" + name + "|" + fi.metaAddr + "|" + fi.getMetaTypeAsString() + "/" + fi.getModesAsString() + "|" + fi.getUid() + "|0|" + fi.getSize() + "|" + fi.getAtime() + "|" + fi.getMtime() + "|" + fi.getCtime() + "|" + fi.getCrtime()); } + /** * Traverses through an image and generates a TSK gettimes like * representation @@ -109,7 +198,7 @@ public OutputStreamWriter traverse(SleuthkitCase sk, String path) { } catch (TskCoreException ex) { List<Exception> inp = new ArrayList<Exception>(); inp.add(ex); - DataModelTestSuite.writeExceptions(testStandardPath, inp); + DataModelTestSuite.writeExceptions(outputFilePath, inp); } } catch (IOException ex) { logg.log(Level.SEVERE, "Failed to Traverse", ex); @@ -118,7 +207,7 @@ public OutputStreamWriter traverse(SleuthkitCase sk, String path) { } /** - * Traverses through an image and generates a TSK gettimes like + * Recursively traverses through an image and generates a TSK gettimes like * representation * * @param lc the list of content to be traversed @@ -129,17 +218,18 @@ private void tskTraverse(List<Content> lc, Appendable reslt) { try { if (c instanceof FsContent && !c.getUniquePath().endsWith(".") && !c.getUniquePath().endsWith("/")) { try { - reslt.append(DataModelTestSuite.getFsCData((FsContent) c)); + reslt.append(convertToBodyFileFormat((FsContent) c)); reslt.append("\n"); } catch (IOException ex) { logg.log(Level.SEVERE, "Failed to Traverse", ex); } } + // recurse into childern tskTraverse(c.getChildren(), reslt); } catch (TskCoreException ex) { List<Exception> inp = new ArrayList<Exception>(); inp.add(ex); - DataModelTestSuite.writeExceptions(testStandardPath, inp); + DataModelTestSuite.writeExceptions(outputFilePath, inp); } } } diff --git a/bindings/java/test/org/sleuthkit/datamodel/DataModelTestSuite.java b/bindings/java/test/org/sleuthkit/datamodel/DataModelTestSuite.java index a8c87cc88c6c15f8425f93efaa12ce63b624669b..be12057cc1205d7b1535a39e0f106b4f698ebd58 100644 --- a/bindings/java/test/org/sleuthkit/datamodel/DataModelTestSuite.java +++ b/bindings/java/test/org/sleuthkit/datamodel/DataModelTestSuite.java @@ -31,6 +31,7 @@ import java.util.Scanner; import java.util.logging.Level; import java.util.logging.Logger; +import static org.junit.Assert.*; import org.junit.BeforeClass; import org.junit.runner.RunWith; import org.junit.runners.Suite; @@ -38,6 +39,7 @@ /** * * Runs all regression tests and contains utility methods for the tests + * The default ant target sets properties for the various folders. */ @RunWith(Suite.class) @Suite.SuiteClasses({org.sleuthkit.datamodel.TopDownTraversal.class, org.sleuthkit.datamodel.SequentialTraversal.class, org.sleuthkit.datamodel.CrossCompare.class, org.sleuthkit.datamodel.BottomUpTest.class, org.sleuthkit.datamodel.CPPtoJavaCompare.class}) @@ -49,10 +51,10 @@ public class DataModelTestSuite { static final String RSLT = "rslt"; static final String SEQ = "_Seq"; static final String TD = "_TD"; - static final String BTTMUP = "_BU"; + static final String BTTMUP = "_BU"; // update .gitignore if this changes static final String EX = "_Exc"; static final String TST = "types"; - static final String CPP = "_CPP"; + static final String CPP = "_CPP"; // update .gitignore if this changes static final int READ_BUFFER_SIZE = 8192; static final String HASH_ALGORITHM = "MD5"; private static final Logger logg = Logger.getLogger(DataModelTestSuite.class.getName()); @@ -71,44 +73,47 @@ public static void setUpClass() throws Exception { } /** - * Generates a list of the traversals to be used for standard creations + * Generates a list of the traversals to be used for standard creations. + * Not all tests need to be rebuilt. * * @return */ - public static List<ImgTraverser> getTests() { + public static List<ImgTraverser> getTestsToRebuild() { List<ImgTraverser> ret = new ArrayList<ImgTraverser>(); ret.add(new SequentialTraversal(null)); ret.add(new TopDownTraversal(null)); + return ret; } /** * Creates the Sleuth Kit database for an image, then generates a string - * representation of the given traversal type of the resulting database to - * use as a standard for comparison, and saves the the standard to a file. + * representation of the given traversal testType of the resulting database to + * use as a standard for comparison, and saves the the standard to a file. Sorts + * the data and saves both the unsorted and sorted files * - * @param standardPath The path to save the standard file to (will be + * @param outputPath The path to save the standard file to (will be * overwritten if it already exists) * @param tempDirPath An existing directory to create the test database in * @param imagePaths The path(s) to the image file(s) - * @param type The type of traversal to run. - * @param exFile The exceptions file, will be used for logging purposes + * @param testType The testType of traversal (i.e. test) to run. + * @param outputExceptionsPath The exceptions file, will be used for logging purposes */ - public static void createStandard(String standardPath, String tempDirPath, List<String> imagePaths, ImgTraverser type) { - java.io.File standardFile = new java.io.File(standardPath); - String exFile = standardFile.getAbsolutePath().replace(".txt", EX + ".txt"); + public static void createOutput(String outputPath, String tempDirPath, List<String> imagePaths, ImgTraverser testType) { + java.io.File standardFile = new java.io.File(outputPath); + List<Exception> inp = new ArrayList<Exception>(); try { + // make the database String firstImageFile = getImgName(imagePaths.get(0)); - String dbPath = buildPath(tempDirPath, firstImageFile, type.testName, ".db"); + String dbPath = buildPath(tempDirPath, firstImageFile, testType.testName, ".db"); standardFile.createNewFile(); java.io.File dbFile = new java.io.File(dbPath); dbFile.delete(); SleuthkitCase sk = SleuthkitCase.newCase(dbPath); + String timezone = ""; SleuthkitJNI.CaseDbHandle.AddImageProcess process = sk.makeAddImageProcess(timezone, true, false); - java.io.File xfile = new java.io.File(exFile); - xfile.createNewFile(); try { process.run(imagePaths.toArray(new String[imagePaths.size()])); } catch (TskDataException ex) { @@ -116,9 +121,13 @@ public static void createStandard(String standardPath, String tempDirPath, List< } writeExceptions(standardFile.getAbsolutePath(), inp); process.commit(); - OutputStreamWriter standardWriter = type.traverse(sk, standardFile.getAbsolutePath()); + + // dump the database based on the specific test testType + OutputStreamWriter standardWriter = testType.traverse(sk, standardFile.getAbsolutePath()); standardWriter.flush(); sk.close(); + + // sort the data for later comparison (if needed) runSort(standardFile.getAbsolutePath()); } catch (IOException ex) { logg.log(Level.SEVERE, "Couldn't create Standard", ex); @@ -157,14 +166,15 @@ public boolean accept(java.io.File f) { } /** - * Get the path for a standard corresponding to the given image path. + * Get the path for a gold standard file for a given image and test. * - * @param imagePaths path of the image to get a standard for + * @param imagePaths image being tested + * @param type Test type * @return path to put/find the standard at */ - static String standardPath(List<String> imagePaths, String type) { + static String standardFilePath(List<String> imagePaths, String type) { String firstImage = getImgName(imagePaths.get(0)); - String standardPath = goldStandardPath() + java.io.File.separator + firstImage + type + ".txt"; + String standardPath = standardRootDirPath() + java.io.File.separator + firstImage + type + ".txt"; return standardPath; } @@ -188,53 +198,7 @@ public boolean accept(java.io.File f) { } } - /** - * Runs tsk_gettimes to create a standard for comparing DataModel and TSK - * output. - * - * @param standardPath The path to the file to put the tsk data in - * @param img the path to the image, is a list for compatability reasons - */ - private static void getTSKData(String standardPath, List<String> img) { - String tsk_loc; - java.io.File up = new java.io.File(System.getProperty("user.dir")); - up = up.getParentFile(); - up = up.getParentFile(); - if (System.getProperty("os.name").contains("Windows")) { - tsk_loc = up.getAbsolutePath() + "\\win32\\Release\\tsk_gettimes"; - } else { - tsk_loc = up.getAbsolutePath() + "/tools/autotools/tsk_gettimes"; - } - String[] cmd = {tsk_loc, img.get(0)}; - try { - Process p = Runtime.getRuntime().exec(cmd); - Scanner read = new Scanner(p.getInputStream()); - Scanner error1 = new Scanner(p.getErrorStream()); - FileWriter out = new FileWriter(standardPath); - while (read.hasNextLine()) { - String line = read.nextLine(); - line = line.replace(" (deleted)", ""); - line = line.replace("(null)", ""); - //removes unknown data attached to metaAddr - String[] linecontents = line.split("\\|"); - String metaaddrcon = linecontents[2]; - String mtad = metaaddrcon.split("\\-")[0]; - line = line.replace(metaaddrcon, mtad); - out.append(line); - out.flush(); - out.append("\n"); - } - runSort(standardPath); - } catch (Exception ex) { - logg.log(Level.SEVERE, "Failed to run CPP program", ex); - } - java.io.File xfile = new java.io.File(standardPath.replace(".txt", DataModelTestSuite.EX + ".txt")); - try { - xfile.createNewFile(); - } catch (IOException ex) { - logg.log(Level.SEVERE, "Failed to create exceptions file", ex); - } - } + /** * Strips the file extension from the given string @@ -275,6 +239,7 @@ public static String getImgName(String img) { return stripExtension(imgSp[imgSp.length - 1]); } + /** * Gets the location results are stored in. * @@ -289,7 +254,7 @@ public static String getRsltPath() { * * @return */ - private static String getSortPath() { + private static String getSortCmdPath() { if (!System.getProperty("os.name").contains("Windows")) { return "sort"; } else { @@ -302,7 +267,7 @@ private static String getSortPath() { * * @return */ - private static String getDiffPath() { + private static String getDiffCmdPath() { if (!System.getProperty("os.name").contains("Windows")) { return "diff"; } else { @@ -313,14 +278,13 @@ private static String getDiffPath() { /** * Writes the given exception to the given file * - * @param filename the path of the file that exceptions are being stored for + * @param filename the path of the test output file that exceptions correspond to * @param ex the exception to be written */ protected static void writeExceptions(String filename, List<Exception> ex) { - filename = filename.replace(".txt", EX + ".txt"); - FileWriter exWriter; + String exceptionFileName = exceptionPath(filename); try { - exWriter = new FileWriter(filename, true); + FileWriter exWriter = new FileWriter(exceptionFileName, true); for(Exception exc: ex) { exWriter.append(exc.toString()); @@ -337,18 +301,18 @@ protected static void writeExceptions(String filename, List<Exception> ex) { * * @return */ - private static String goldStandardPath() { + private static String standardRootDirPath() { return System.getProperty(GOLD, ("test" + java.io.File.separator + "output" + java.io.File.separator + "gold")); } /** - * Reads the data for a given content object, used to create hashes + * Reads the data for a given content object and adds the MD5 to the result object * * @param c the content object to be read - * @param result the appendable to append the results to + * @param result the appendable to text of the MD5 to * @param StrgFile the file path that the content is being read for */ - public static void readContent(Content c, Appendable result, String StrgFile) { + public static void hashContent(Content c, Appendable result, String StrgFile) { long size = c.getSize(); byte[] readBuffer = new byte[READ_BUFFER_SIZE]; try { @@ -388,38 +352,9 @@ private static String toHex(byte[] bytes) { return hex.toString(); } + /** - * gets the metadata from a datamodel file object - * - * @param fi - * @return - * @throws TskCoreException - */ - protected static String getFsCData(FsContent fi) throws TskCoreException { - String[] path = fi.getUniquePath().split("/", 3); - String name; - if (path[2].contains("vol_")) { - String[] pthget = path[2].split("_", 2); - name = pthget[pthget.length - 1]; - } else { - name = path[2]; - } - name = name.replaceAll("[^\\x20-\\x7e]", ""); - String prpnd; - if (fi.isFile()) { - prpnd = "r/"; - } else { - prpnd = "d/"; - } - if (fi.isVirtual() && !fi.isDir()) { - prpnd = "v/"; - } - return ("0|" + name + "|" + fi.metaAddr + "|" + fi.getMetaTypeAsString() + "/" + fi.getModesAsString() + "|" + fi.getUid() + "|0|" + fi.getSize() + "|" + fi.getAtime() + "|" + fi.getMtime() + "|" + fi.getCtime() + "|" + fi.getCrtime()); - } - - /** - * Calls {@link #createStandard(String, String, String[]) createStandard} - * with default arguments + * This is used only to regenerate the gold standards. It does not run tests. * * @param args Ignored */ @@ -437,37 +372,42 @@ public static void main(String[] args) { throw new RuntimeException("Run make install on tsk"); } } + String tempDirPath = System.getProperty("java.io.tmpdir"); tempDirPath = tempDirPath.substring(0, tempDirPath.length() - 1); - java.io.File pth = new java.io.File(DataModelTestSuite.goldStandardPath()); + + + java.io.File goldStandardDirPath = new java.io.File(DataModelTestSuite.standardRootDirPath()); + // delete the exception files FileFilter testExFilter = new FileFilter() { @Override public boolean accept(java.io.File f) { return f.getName().contains(EX); } }; - for (java.io.File del : pth.listFiles(testExFilter)) { + for (java.io.File del : goldStandardDirPath.listFiles(testExFilter)) { del.delete(); } - List<ImgTraverser> tests = DataModelTestSuite.getTests(); + + // cycle through each image and test to generate output + List<ImgTraverser> tests = DataModelTestSuite.getTestsToRebuild(); List<List<String>> imagePaths = DataModelTestSuite.getImagePaths(); for (List<String> paths : imagePaths) { for (ImgTraverser tstrn : tests) { - String standardPath = DataModelTestSuite.standardPath(paths, tstrn.testName); - System.out.println("Creating " + tstrn.testName + " standard for: " + paths.get(0)); - DataModelTestSuite.createStandard(standardPath, tempDirPath, paths, tstrn); + // run the test and save the output to the gold standard folder + String standardPath = DataModelTestSuite.standardFilePath(paths, tstrn.testName); + System.out.println("Rebuilding " + tstrn.testName + " standard for: " + paths.get(0)); + DataModelTestSuite.createOutput(standardPath, tempDirPath, paths, tstrn); } - String standardPathCPP = DataModelTestSuite.standardPath(paths, CPP); - DataModelTestSuite.getTSKData(standardPathCPP, paths); } } /** - * Compares the content of two files to determine if they are equal, if they - * are it removes the file from the results folder + * Compares the content of two files to determine if they are equal * * @param original is the first file to be compared * @param results is the second file to be compared + * @returns true if both files are equal */ protected static boolean comparecontent(String original, String results) { try { @@ -496,13 +436,13 @@ protected static boolean comparecontent(String original, String results) { } /** - * runs sort on the given file + * runs sort on the given file and saves to sortedFlPth() named file * * @param inp */ - private static void runSort(String inp) { + public static void runSort(String inp) { String outp = sortedFlPth(inp); - String cygpath = getSortPath(); + String cygpath = getSortCmdPath(); String[] cmd = {cygpath, inp, "-o", outp}; try { Runtime.getRuntime().exec(cmd).waitFor(); @@ -524,6 +464,16 @@ private static void runSort(String inp) { protected static String sortedFlPth(String path) { return path.replace(".txt", "_SRT.txt"); } + + /** + * Returns the name of the exception file given the name of the test output file. + * + * @param path Path to the test output file + * @return String to exception file for the test + */ + public static String exceptionPath(String path) { + return path.replace(".txt", DataModelTestSuite.EX + ".txt"); + } /** * Runs the Cygwin Diff algorithm on two files, is currently unused @@ -532,7 +482,7 @@ protected static String sortedFlPth(String path) { * @param path2 is the path to the second file */ private static void runDiff(String path1, String path2) { - String diffPath = getDiffPath(); + String diffPath = getDiffCmdPath(); String outputLoc = path2.replace(".txt", "_Diff.txt"); String[] cmd = {diffPath, path1, path2}; try { diff --git a/bindings/java/test/org/sleuthkit/datamodel/ImgTraverser.java b/bindings/java/test/org/sleuthkit/datamodel/ImgTraverser.java index 60a798559918fd7e34a09f63ee3c2ea43d6b0c2b..eacb5b6fb199f608940be9ad968728aa3a42e718 100644 --- a/bindings/java/test/org/sleuthkit/datamodel/ImgTraverser.java +++ b/bindings/java/test/org/sleuthkit/datamodel/ImgTraverser.java @@ -29,31 +29,37 @@ public abstract class ImgTraverser{ protected List<String> imagePaths; - protected String exFile; - protected String testStandardPath; - protected String oldStandardPath; - protected String oldExceptionsPath; + protected String outputFilePath; // where output of current test is being stored + protected String outputExceptionsPath; // exceptions of current test + protected String goldFilePath; // gold paths for test and exception data + protected String goldExceptionsPath; protected String testName; /** - * sets up the variables for a basic test, method can be called for any - * traversal test + * Run a test and compare the unsorted results. * - * @return + * @return List of test results. Entry 0 is content and 1 is for exceptions. True if test passed. */ public List<Boolean> basicTest() { String title = DataModelTestSuite.getImgName(imagePaths.get(0)); - java.io.File testFolder = new java.io.File(DataModelTestSuite.getRsltPath()); - java.io.File testStandard = new java.io.File(DataModelTestSuite.buildPath(testFolder.getAbsolutePath(), title, this.testName, ".txt")); - testStandardPath = testStandard.getPath(); - exFile = testStandardPath.replace(".txt", DataModelTestSuite.EX + ".txt"); - oldStandardPath = DataModelTestSuite.standardPath(imagePaths, this.testName); - DataModelTestSuite.createStandard(testStandardPath, testFolder.getAbsolutePath(), imagePaths, this); - oldExceptionsPath = oldStandardPath.replace(".txt", DataModelTestSuite.EX + ".txt"); + + // get paths to store output of test and exceptions + java.io.File outputFolder = new java.io.File(DataModelTestSuite.getRsltPath()); + java.io.File outputFile = new java.io.File(DataModelTestSuite.buildPath(outputFolder.getAbsolutePath(), title, this.testName, ".txt")); + outputFilePath = outputFile.getPath(); + outputExceptionsPath = DataModelTestSuite.exceptionPath(outputFilePath); + goldFilePath = DataModelTestSuite.standardFilePath(imagePaths, this.testName); + goldExceptionsPath = DataModelTestSuite.exceptionPath(goldFilePath); + + // Generate the sorted output needed for the test + DataModelTestSuite.createOutput(outputFilePath, outputFolder.getAbsolutePath(), imagePaths, this); + + // compare the unsorted results List<Boolean> ret = new ArrayList<Boolean>(2); - ret.add(DataModelTestSuite.comparecontent(oldExceptionsPath, exFile)); - ret.add(DataModelTestSuite.comparecontent(oldStandardPath, testStandardPath)); + ret.add(DataModelTestSuite.comparecontent(goldExceptionsPath, outputExceptionsPath)); + ret.add(DataModelTestSuite.comparecontent(goldFilePath, outputFilePath)); return ret; } + abstract public OutputStreamWriter traverse(SleuthkitCase sk, String path); } diff --git a/bindings/java/test/org/sleuthkit/datamodel/SequentialTraversal.java b/bindings/java/test/org/sleuthkit/datamodel/SequentialTraversal.java index b370c7eda054b6c1b99ede8684aa48a46e871853..35b645709b06e842e616c5cc6ad2abb59f0f5ff9 100644 --- a/bindings/java/test/org/sleuthkit/datamodel/SequentialTraversal.java +++ b/bindings/java/test/org/sleuthkit/datamodel/SequentialTraversal.java @@ -72,8 +72,8 @@ public static Collection<Object[]> testImageData() { public void testSequentialDiff() { try { List<Boolean> test = basicTest(); - assertEquals("Generated results (" + exFile + ") differ with gold standard (" + oldExceptionsPath + ") .", test.get(0), true); - assertEquals("Generated results (" + testStandardPath + ") differ with gold standard (" + oldStandardPath + ") .", test.get(1), true); + assertEquals("Generated results (" + outputExceptionsPath + ") differ with gold standard (" + goldExceptionsPath + ") .", test.get(0), true); + assertEquals("Generated results (" + outputFilePath + ") differ with gold standard (" + goldFilePath + ") .", test.get(1), true); } catch (Exception ex) { fail("Couldn't open gold standard file."); } @@ -85,7 +85,7 @@ public void testSequentialDiff() { * * @param sk the sleuthkit case used for the traversal * @param path the location of the output file - * @param exFile the exFile to store exceptions, is only used for + * @param outputExceptionsPath the outputExceptionsPath to store exceptions, is only used for * compatability with basic test * @return the file writer to be closed by testStandard */ @@ -101,7 +101,7 @@ public OutputStreamWriter traverse(SleuthkitCase sk, String path) { while ((c = sk.getContentById(x)) != null) { reslt.append(((AbstractContent) c).toString(false).replaceAll("paths \\[([A-z]:)?.+?\\]", "")); if (c instanceof File) { - DataModelTestSuite.readContent(c, reslt, exFile); + DataModelTestSuite.hashContent(c, reslt, outputExceptionsPath); } reslt.append("\n"); x++; diff --git a/bindings/java/test/org/sleuthkit/datamodel/TopDownTraversal.java b/bindings/java/test/org/sleuthkit/datamodel/TopDownTraversal.java index 171e955db64193b7d95d58dad2b29390c80eb1a5..63fbae36378ab235bffcb5b39761d4cf1f83a4ea 100644 --- a/bindings/java/test/org/sleuthkit/datamodel/TopDownTraversal.java +++ b/bindings/java/test/org/sleuthkit/datamodel/TopDownTraversal.java @@ -38,6 +38,7 @@ * * Verifies that the current version of TSK produces the same output of previous * versions by doing a TopDown Depth first traversal of the given images. + * Also generates the leaf file that is used by the BottomUp Test */ @RunWith(Parameterized.class) public class TopDownTraversal extends ImgTraverser { @@ -74,8 +75,8 @@ public static Collection<Object[]> testImageData() { public void testTopDownDiff() { try { List<Boolean> test = basicTest(); - assertEquals("Generated results (" + exFile + ") differ with gold standard (" + oldExceptionsPath + ") .", test.get(0), true); - assertEquals("Generated results (" + testStandardPath + ") differ with gold standard (" + oldStandardPath + ") .", test.get(1), true); + assertEquals("Generated results (" + outputExceptionsPath + ") differ with gold standard (" + goldExceptionsPath + ") .", test.get(0), true); + assertEquals("Generated results (" + outputFilePath + ") differ with gold standard (" + goldFilePath + ") .", test.get(1), true); } catch (Exception ex) { fail("Couldn't open gold standard file."); } @@ -83,11 +84,11 @@ public void testTopDownDiff() { /** * Traverses through an image and generates a top down representation the - * image + * image and generates the leaf files for BU Testing * * @param sk the sleuthkit case used for the traversal * @param path the location of the output file - * @param exFile the exFile to store exceptions + * @param outputExceptionsPath the outputExceptionsPath to store exceptions * @return the file writer to be closed by testStandard */ @Override @@ -98,13 +99,17 @@ public OutputStreamWriter traverse(SleuthkitCase sk, String path) { } catch (TskCoreException ex) { List<Exception> inp = new ArrayList<Exception>(); inp.add(ex); - DataModelTestSuite.writeExceptions(testStandardPath, inp); + DataModelTestSuite.writeExceptions(outputFilePath, inp); } List<Long> lp = new ArrayList<Long>(); try { Charset chr = Charset.forName("UTF-8"); + // file to save the per-file info to. OutputStreamWriter reslt = new OutputStreamWriter(new BufferedOutputStream(new FileOutputStream(path),8192*4), chr); + + // file to save the leaf into, which will be used by the BottomUp Test OutputStreamWriter levs = new OutputStreamWriter(new BufferedOutputStream(new FileOutputStream(path.replace(this.testName + ".txt", DataModelTestSuite.BTTMUP + ".txt")), 8192*4),chr); + List<Exception> inp = topDownDF(lc, lp, reslt, levs); levs.flush(); DataModelTestSuite.writeExceptions(path, inp); @@ -121,39 +126,52 @@ public OutputStreamWriter traverse(SleuthkitCase sk, String path) { * * @param lc the list of content to be traversed * @param lp the list of a content's parents - * @param reslt the filewriter to append output to - * @param levs the filewriter to append leaves to + * @param resultOutput the filewriter to append output to + * @param leafListOutput the filewriter to append leaves to (trace of each leaf to root dir) + * @returns list of exceptions */ - private List<Exception> topDownDF(List<Content> lc, List<Long> lp, Appendable reslt, Appendable levs) { - List<Exception> inp = new ArrayList<Exception>(); + private List<Exception> topDownDF(List<Content> lc, List<Long> lp, Appendable resultOutput, Appendable leafListOutput) { + List<Exception> exceptionList = new ArrayList<Exception>(); for (Content c : lc) { + + // write data about this object to resultOutput + // string version of this object try { - reslt.append(((AbstractContent) c).toString(false).replaceAll("paths \\[([A-z]:)?.+?\\]", "")); + resultOutput.append(((AbstractContent) c).toString(false).replaceAll("paths \\[([A-z]:)?.+?\\]", "")); } catch (IOException ex) { logg.log(Level.SEVERE, "Failed to Traverse", ex); } + + // calculate the hash value for the output -- writes the output to resultOutput if (c instanceof File) { - DataModelTestSuite.readContent(c, reslt, testStandardPath); + DataModelTestSuite.hashContent(c, resultOutput, outputFilePath); } try { - reslt.append("\n"); + resultOutput.append("\n"); } catch (IOException ex) { logg.log(Level.SEVERE, "Failed to Traverse", ex); } + + // add this node to the bottom of the parent list lp.add(0, c.getId()); + try { + // if we are a leaf, write out the path to the node if (c.getChildren().isEmpty()) { - levs.append(lp.toString() + "\n"); - } else { - inp.addAll(topDownDF(c.getChildren(), new ArrayList<Long>(lp), reslt, levs)); + leafListOutput.append(lp.toString() + "\n"); + } + // recurse into the children + else { + exceptionList.addAll(topDownDF(c.getChildren(), new ArrayList<Long>(lp), resultOutput, leafListOutput)); } } catch (IOException ex) { logg.log(Level.SEVERE, "Failed to Traverse", ex); } catch (TskCoreException ex) { - inp.add(ex); + exceptionList.add(ex); } + // pop it off the list lp.remove(0); } - return inp; + return exceptionList; } } \ No newline at end of file diff --git a/bindings/java/test/output/gold/nps-2009-canon2-gen6_BU.txt b/bindings/java/test/output/gold/nps-2009-canon2-gen6_BU.txt deleted file mode 100644 index 632ae4b57e63a4f9173267134cc4ebdc0f0cb353..0000000000000000000000000000000000000000 --- a/bindings/java/test/output/gold/nps-2009-canon2-gen6_BU.txt +++ /dev/null @@ -1,50 +0,0 @@ -[60, 3, 2, 1] -[7, 6, 5, 4, 2, 1] -[9, 8, 6, 5, 4, 2, 1] -[10, 8, 6, 5, 4, 2, 1] -[12, 11, 8, 6, 5, 4, 2, 1] -[13, 11, 8, 6, 5, 4, 2, 1] -[14, 11, 8, 6, 5, 4, 2, 1] -[15, 11, 8, 6, 5, 4, 2, 1] -[16, 11, 8, 6, 5, 4, 2, 1] -[17, 11, 8, 6, 5, 4, 2, 1] -[18, 11, 8, 6, 5, 4, 2, 1] -[19, 11, 8, 6, 5, 4, 2, 1] -[20, 11, 8, 6, 5, 4, 2, 1] -[21, 11, 8, 6, 5, 4, 2, 1] -[22, 11, 8, 6, 5, 4, 2, 1] -[23, 11, 8, 6, 5, 4, 2, 1] -[24, 11, 8, 6, 5, 4, 2, 1] -[25, 11, 8, 6, 5, 4, 2, 1] -[26, 11, 8, 6, 5, 4, 2, 1] -[27, 11, 8, 6, 5, 4, 2, 1] -[28, 11, 8, 6, 5, 4, 2, 1] -[29, 11, 8, 6, 5, 4, 2, 1] -[30, 11, 8, 6, 5, 4, 2, 1] -[31, 11, 8, 6, 5, 4, 2, 1] -[32, 11, 8, 6, 5, 4, 2, 1] -[33, 11, 8, 6, 5, 4, 2, 1] -[34, 11, 8, 6, 5, 4, 2, 1] -[35, 11, 8, 6, 5, 4, 2, 1] -[36, 11, 8, 6, 5, 4, 2, 1] -[37, 11, 8, 6, 5, 4, 2, 1] -[38, 11, 8, 6, 5, 4, 2, 1] -[39, 11, 8, 6, 5, 4, 2, 1] -[40, 11, 8, 6, 5, 4, 2, 1] -[41, 11, 8, 6, 5, 4, 2, 1] -[42, 11, 8, 6, 5, 4, 2, 1] -[43, 11, 8, 6, 5, 4, 2, 1] -[44, 11, 8, 6, 5, 4, 2, 1] -[45, 11, 8, 6, 5, 4, 2, 1] -[46, 11, 8, 6, 5, 4, 2, 1] -[47, 11, 8, 6, 5, 4, 2, 1] -[48, 11, 8, 6, 5, 4, 2, 1] -[49, 11, 8, 6, 5, 4, 2, 1] -[51, 50, 8, 6, 5, 4, 2, 1] -[52, 50, 8, 6, 5, 4, 2, 1] -[53, 50, 8, 6, 5, 4, 2, 1] -[54, 6, 5, 4, 2, 1] -[55, 6, 5, 4, 2, 1] -[56, 6, 5, 4, 2, 1] -[57, 6, 5, 4, 2, 1] -[59, 58, 6, 5, 4, 2, 1] diff --git a/bindings/java/test/output/gold/nps-2009-canon2-gen6_CPP.txt b/bindings/java/test/output/gold/nps-2009-canon2-gen6_CPP.txt deleted file mode 100644 index 84a0a2df324b8dbe0ab7754ae69b10bf6b4fb2a3..0000000000000000000000000000000000000000 --- a/bindings/java/test/output/gold/nps-2009-canon2-gen6_CPP.txt +++ /dev/null @@ -1,45 +0,0 @@ -0|vol2/CANON_DC (Volume Label Entry)|3|r/rrwxrwxrwx|0|0|0|0|1230059544|0|0 -0|vol2/DCIM|4|d/drwxrwxrwx|0|0|16384|1230008400|1230059558|0|1230059558 -0|vol2/DCIM/100CANON|517|d/drwxrwxrwx|0|0|16384|1230008400|1230059558|0|1230059558 -0|vol2/DCIM/100CANON/IMG_0044.JPG|1029|r/rrwxrwxrwx|0|0|105195|1230094800|1230168104|0|1230168104 -0|vol2/DCIM/100CANON/IMG_0042.JPG|1030|r/rrwxrwxrwx|0|0|1361807|1230008400|1230060488|0|1230060488 -0|vol2/DCIM/100CANON/IMG_0003.JPG|1031|r/rrwxrwxrwx|0|0|840101|1230008400|1230059572|0|1230059572 -0|vol2/DCIM/100CANON/IMG_0043.JPG|1032|r/rrwxrwxrwx|0|0|2834018|1230008400|1230060638|0|1230060638 -0|vol2/DCIM/100CANON/IMG_0045.JPG|1033|r/rrwxrwxrwx|0|0|110686|1230094800|1230168116|0|1230168116 -0|vol2/DCIM/100CANON/IMG_0046.JPG|1034|r/rrwxrwxrwx|0|0|116135|1230094800|1230168130|0|1230168130 -0|vol2/DCIM/100CANON/IMG_0007.JPG|1035|r/rrwxrwxrwx|0|0|865313|1230008400|1230059592|0|1230059592 -0|vol2/DCIM/100CANON/IMG_0047.JPG|1036|r/rrwxrwxrwx|0|0|120441|1230094800|1230168136|0|1230168136 -0|vol2/DCIM/100CANON/IMG_0009.JPG|1037|r/rrwxrwxrwx|0|0|840692|1230008400|1230059602|0|1230059602 -0|vol2/DCIM/100CANON/IMG_0038.JPG|1038|r/rrwxrwxrwx|0|0|1296150|1230008400|1230060166|0|1230060166 -0|vol2/DCIM/100CANON/IMG_0011.JPG|1039|r/rrwxrwxrwx|0|0|771052|1230008400|1230059610|0|1230059610 -0|vol2/DCIM/100CANON/IMG_0048.JPG|1040|r/rrwxrwxrwx|0|0|124906|1230094800|1230168142|0|1230168142 -0|vol2/DCIM/100CANON/IMG_0013.JPG|1041|r/rrwxrwxrwx|0|0|842160|1230008400|1230059620|0|1230059620 -0|vol2/DCIM/100CANON/IMG_0049.JPG|1042|r/rrwxrwxrwx|0|0|114940|1230094800|1230168148|0|1230168148 -0|vol2/DCIM/100CANON/IMG_0050.JPG|1043|r/rrwxrwxrwx|0|0|127191|1230094800|1230168156|0|1230168156 -0|vol2/DCIM/100CANON/IMG_0016.JPG|1044|r/rrwxrwxrwx|0|0|853839|1230008400|1230059636|0|1230059636 -0|vol2/DCIM/100CANON/IMG_0017.JPG|1045|r/rrwxrwxrwx|0|0|795574|1230008400|1230059640|0|1230059640 -0|vol2/DCIM/100CANON/IMG_0018.JPG|1046|r/rrwxrwxrwx|0|0|784455|1230008400|1230059646|0|1230059646 -0|vol2/DCIM/100CANON/IMG_0019.JPG|1047|r/rrwxrwxrwx|0|0|864257|1230008400|1230059650|0|1230059650 -0|vol2/DCIM/100CANON/IMG_0051.JPG|1048|r/rrwxrwxrwx|0|0|130418|1230094800|1230168162|0|1230168162 -0|vol2/DCIM/100CANON/IMG_0021.JPG|1049|r/rrwxrwxrwx|0|0|819599|1230008400|1230059660|0|1230059660 -0|vol2/DCIM/100CANON/IMG_0022.JPG|1050|r/rrwxrwxrwx|0|0|728696|1230008400|1230059666|0|1230059666 -0|vol2/DCIM/100CANON/IMG_0023.JPG|1051|r/rrwxrwxrwx|0|0|858798|1230008400|1230059670|0|1230059670 -0|vol2/DCIM/100CANON/IMG_0024.JPG|1052|r/rrwxrwxrwx|0|0|838434|1230008400|1230059676|0|1230059676 -0|vol2/DCIM/100CANON/_MG_0025.JPG|1053|r/rrwxrwxrwx|0|0|791333|1230008400|1230059680|0|1230059680 -0|vol2/DCIM/100CANON/IMG_0026.JPG|1054|r/rrwxrwxrwx|0|0|768385|1230008400|1230059686|0|1230059686 -0|vol2/DCIM/100CANON/IMG_0027.JPG|1055|r/rrwxrwxrwx|0|0|840253|1230008400|1230059690|0|1230059690 -0|vol2/DCIM/100CANON/IMG_0028.JPG|1056|r/rrwxrwxrwx|0|0|815636|1230008400|1230059694|0|1230059694 -0|vol2/DCIM/100CANON/IMG_0029.JPG|1057|r/rrwxrwxrwx|0|0|861552|1230008400|1230059698|0|1230059698 -0|vol2/DCIM/100CANON/_MG_0030.JPG|1058|r/rrwxrwxrwx|0|0|867833|1230008400|1230059702|0|1230059702 -0|vol2/DCIM/100CANON/IMG_0031.JPG|1059|r/rrwxrwxrwx|0|0|749202|1230008400|1230059708|0|1230059708 -0|vol2/DCIM/100CANON/IMG_0032.JPG|1060|r/rrwxrwxrwx|0|0|879834|1230008400|1230059714|0|1230059714 -0|vol2/DCIM/100CANON/IMG_0033.JPG|1061|r/rrwxrwxrwx|0|0|845375|1230008400|1230059718|0|1230059718 -0|vol2/DCIM/100CANON/IMG_0034.JPG|1062|r/rrwxrwxrwx|0|0|812465|1230008400|1230059722|0|1230059722 -0|vol2/DCIM/100CANON/_MG_0035.JPG|1063|r/rrwxrwxrwx|0|0|820105|1230008400|1230059728|0|1230059728 -0|vol2/DCIM/100CANON/IMG_0036.JPG|1064|r/rrwxrwxrwx|0|0|882337|1230008400|1230059736|0|1230059736 -0|vol2/DCIM/CANONMSC|518|d/drwxrwxrwx|0|0|16384|1230008400|1230060098|0|1230060098 -0|vol2/DCIM/CANONMSC/M0100.CTG|943621|r/rrwxrwxrwx|0|0|164|1230094800|1230168064|0|1230168064 -0|vol2/$MBR|971779|v/v---------|0|0|512|0|0|0|0 -0|vol2/$FAT1|971780|v/v---------|0|0|3072|0|0|0|0 -0|vol2/$FAT2|971781|v/v---------|0|0|3072|0|0|0|0 -0|vol2/$OrphanFiles|971782|d/d---------|0|0|0|0|0|0|0 \ No newline at end of file diff --git a/bindings/java/test/output/gold/nps-2009-canon2-gen6_CPP_Exc.txt b/bindings/java/test/output/gold/nps-2009-canon2-gen6_CPP_Exc.txt old mode 100644 new mode 100755 diff --git a/bindings/java/test/output/gold/nps-2009-canon2-gen6_CPP_SRT.txt b/bindings/java/test/output/gold/nps-2009-canon2-gen6_CPP_SRT.txt deleted file mode 100644 index 24398d5c23549d39340dd932384e2fc22c9ec034..0000000000000000000000000000000000000000 --- a/bindings/java/test/output/gold/nps-2009-canon2-gen6_CPP_SRT.txt +++ /dev/null @@ -1,45 +0,0 @@ -0|vol2/$FAT1|971780|v/v---------|0|0|3072|0|0|0|0 -0|vol2/$FAT2|971781|v/v---------|0|0|3072|0|0|0|0 -0|vol2/$MBR|971779|v/v---------|0|0|512|0|0|0|0 -0|vol2/$OrphanFiles|971782|d/d---------|0|0|0|0|0|0|0 -0|vol2/CANON_DC (Volume Label Entry)|3|r/rrwxrwxrwx|0|0|0|0|1230059544|0|0 -0|vol2/DCIM/100CANON/IMG_0003.JPG|1031|r/rrwxrwxrwx|0|0|840101|1230008400|1230059572|0|1230059572 -0|vol2/DCIM/100CANON/IMG_0007.JPG|1035|r/rrwxrwxrwx|0|0|865313|1230008400|1230059592|0|1230059592 -0|vol2/DCIM/100CANON/IMG_0009.JPG|1037|r/rrwxrwxrwx|0|0|840692|1230008400|1230059602|0|1230059602 -0|vol2/DCIM/100CANON/IMG_0011.JPG|1039|r/rrwxrwxrwx|0|0|771052|1230008400|1230059610|0|1230059610 -0|vol2/DCIM/100CANON/IMG_0013.JPG|1041|r/rrwxrwxrwx|0|0|842160|1230008400|1230059620|0|1230059620 -0|vol2/DCIM/100CANON/IMG_0016.JPG|1044|r/rrwxrwxrwx|0|0|853839|1230008400|1230059636|0|1230059636 -0|vol2/DCIM/100CANON/IMG_0017.JPG|1045|r/rrwxrwxrwx|0|0|795574|1230008400|1230059640|0|1230059640 -0|vol2/DCIM/100CANON/IMG_0018.JPG|1046|r/rrwxrwxrwx|0|0|784455|1230008400|1230059646|0|1230059646 -0|vol2/DCIM/100CANON/IMG_0019.JPG|1047|r/rrwxrwxrwx|0|0|864257|1230008400|1230059650|0|1230059650 -0|vol2/DCIM/100CANON/IMG_0021.JPG|1049|r/rrwxrwxrwx|0|0|819599|1230008400|1230059660|0|1230059660 -0|vol2/DCIM/100CANON/IMG_0022.JPG|1050|r/rrwxrwxrwx|0|0|728696|1230008400|1230059666|0|1230059666 -0|vol2/DCIM/100CANON/IMG_0023.JPG|1051|r/rrwxrwxrwx|0|0|858798|1230008400|1230059670|0|1230059670 -0|vol2/DCIM/100CANON/IMG_0024.JPG|1052|r/rrwxrwxrwx|0|0|838434|1230008400|1230059676|0|1230059676 -0|vol2/DCIM/100CANON/IMG_0026.JPG|1054|r/rrwxrwxrwx|0|0|768385|1230008400|1230059686|0|1230059686 -0|vol2/DCIM/100CANON/IMG_0027.JPG|1055|r/rrwxrwxrwx|0|0|840253|1230008400|1230059690|0|1230059690 -0|vol2/DCIM/100CANON/IMG_0028.JPG|1056|r/rrwxrwxrwx|0|0|815636|1230008400|1230059694|0|1230059694 -0|vol2/DCIM/100CANON/IMG_0029.JPG|1057|r/rrwxrwxrwx|0|0|861552|1230008400|1230059698|0|1230059698 -0|vol2/DCIM/100CANON/IMG_0031.JPG|1059|r/rrwxrwxrwx|0|0|749202|1230008400|1230059708|0|1230059708 -0|vol2/DCIM/100CANON/IMG_0032.JPG|1060|r/rrwxrwxrwx|0|0|879834|1230008400|1230059714|0|1230059714 -0|vol2/DCIM/100CANON/IMG_0033.JPG|1061|r/rrwxrwxrwx|0|0|845375|1230008400|1230059718|0|1230059718 -0|vol2/DCIM/100CANON/IMG_0034.JPG|1062|r/rrwxrwxrwx|0|0|812465|1230008400|1230059722|0|1230059722 -0|vol2/DCIM/100CANON/IMG_0036.JPG|1064|r/rrwxrwxrwx|0|0|882337|1230008400|1230059736|0|1230059736 -0|vol2/DCIM/100CANON/IMG_0038.JPG|1038|r/rrwxrwxrwx|0|0|1296150|1230008400|1230060166|0|1230060166 -0|vol2/DCIM/100CANON/IMG_0042.JPG|1030|r/rrwxrwxrwx|0|0|1361807|1230008400|1230060488|0|1230060488 -0|vol2/DCIM/100CANON/IMG_0043.JPG|1032|r/rrwxrwxrwx|0|0|2834018|1230008400|1230060638|0|1230060638 -0|vol2/DCIM/100CANON/IMG_0044.JPG|1029|r/rrwxrwxrwx|0|0|105195|1230094800|1230168104|0|1230168104 -0|vol2/DCIM/100CANON/IMG_0045.JPG|1033|r/rrwxrwxrwx|0|0|110686|1230094800|1230168116|0|1230168116 -0|vol2/DCIM/100CANON/IMG_0046.JPG|1034|r/rrwxrwxrwx|0|0|116135|1230094800|1230168130|0|1230168130 -0|vol2/DCIM/100CANON/IMG_0047.JPG|1036|r/rrwxrwxrwx|0|0|120441|1230094800|1230168136|0|1230168136 -0|vol2/DCIM/100CANON/IMG_0048.JPG|1040|r/rrwxrwxrwx|0|0|124906|1230094800|1230168142|0|1230168142 -0|vol2/DCIM/100CANON/IMG_0049.JPG|1042|r/rrwxrwxrwx|0|0|114940|1230094800|1230168148|0|1230168148 -0|vol2/DCIM/100CANON/IMG_0050.JPG|1043|r/rrwxrwxrwx|0|0|127191|1230094800|1230168156|0|1230168156 -0|vol2/DCIM/100CANON/IMG_0051.JPG|1048|r/rrwxrwxrwx|0|0|130418|1230094800|1230168162|0|1230168162 -0|vol2/DCIM/100CANON/_MG_0025.JPG|1053|r/rrwxrwxrwx|0|0|791333|1230008400|1230059680|0|1230059680 -0|vol2/DCIM/100CANON/_MG_0030.JPG|1058|r/rrwxrwxrwx|0|0|867833|1230008400|1230059702|0|1230059702 -0|vol2/DCIM/100CANON/_MG_0035.JPG|1063|r/rrwxrwxrwx|0|0|820105|1230008400|1230059728|0|1230059728 -0|vol2/DCIM/100CANON|517|d/drwxrwxrwx|0|0|16384|1230008400|1230059558|0|1230059558 -0|vol2/DCIM/CANONMSC/M0100.CTG|943621|r/rrwxrwxrwx|0|0|164|1230094800|1230168064|0|1230168064 -0|vol2/DCIM/CANONMSC|518|d/drwxrwxrwx|0|0|16384|1230008400|1230060098|0|1230060098 -0|vol2/DCIM|4|d/drwxrwxrwx|0|0|16384|1230008400|1230059558|0|1230059558 diff --git a/bindings/java/test/output/gold/nps-2009-canon2-gen6_Seq_Exc.txt b/bindings/java/test/output/gold/nps-2009-canon2-gen6_Seq_Exc.txt old mode 100644 new mode 100755 diff --git a/bindings/java/test/output/gold/nps-2009-canon2-gen6_TD_Exc.txt b/bindings/java/test/output/gold/nps-2009-canon2-gen6_TD_Exc.txt old mode 100644 new mode 100755 diff --git a/bindings/java/test/output/gold/ntfs1-gen2_BU.txt b/bindings/java/test/output/gold/ntfs1-gen2_BU.txt deleted file mode 100644 index 68f6b8856c86bb9775d54170b3d7b848a6e6edf9..0000000000000000000000000000000000000000 --- a/bindings/java/test/output/gold/ntfs1-gen2_BU.txt +++ /dev/null @@ -1,43 +0,0 @@ -[4, 3, 2, 1] -[5, 3, 2, 1] -[6, 3, 2, 1] -[7, 3, 2, 1] -[8, 3, 2, 1] -[10, 9, 3, 2, 1] -[11, 9, 3, 2, 1] -[12, 3, 2, 1] -[13, 3, 2, 1] -[14, 3, 2, 1] -[15, 3, 2, 1] -[16, 3, 2, 1] -[17, 3, 2, 1] -[18, 3, 2, 1] -[20, 19, 3, 2, 1] -[21, 19, 3, 2, 1] -[22, 19, 3, 2, 1] -[23, 19, 3, 2, 1] -[24, 19, 3, 2, 1] -[25, 19, 3, 2, 1] -[26, 19, 3, 2, 1] -[27, 3, 2, 1] -[28, 3, 2, 1] -[29, 3, 2, 1] -[30, 3, 2, 1] -[32, 31, 3, 2, 1] -[33, 31, 3, 2, 1] -[34, 31, 3, 2, 1] -[35, 31, 3, 2, 1] -[36, 31, 3, 2, 1] -[37, 31, 3, 2, 1] -[38, 31, 3, 2, 1] -[40, 39, 3, 2, 1] -[41, 39, 3, 2, 1] -[42, 39, 3, 2, 1] -[43, 39, 3, 2, 1] -[44, 39, 3, 2, 1] -[45, 39, 3, 2, 1] -[46, 39, 3, 2, 1] -[48, 47, 3, 2, 1] -[49, 47, 3, 2, 1] -[50, 3, 2, 1] -[52, 51, 3, 2, 1] diff --git a/bindings/java/test/output/gold/ntfs1-gen2_CPP.txt b/bindings/java/test/output/gold/ntfs1-gen2_CPP.txt deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/bindings/java/test/output/gold/ntfs1-gen2_CPP_Exc.txt b/bindings/java/test/output/gold/ntfs1-gen2_CPP_Exc.txt old mode 100644 new mode 100755 diff --git a/bindings/java/test/output/gold/ntfs1-gen2_CPP_SRT.txt b/bindings/java/test/output/gold/ntfs1-gen2_CPP_SRT.txt deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/bindings/java/test/output/gold/ntfs1-gen2_Seq_Exc.txt b/bindings/java/test/output/gold/ntfs1-gen2_Seq_Exc.txt old mode 100644 new mode 100755 diff --git a/bindings/java/test/output/gold/ntfs1-gen2_TD_Exc.txt b/bindings/java/test/output/gold/ntfs1-gen2_TD_Exc.txt old mode 100644 new mode 100755 diff --git a/framework/TskModules/c_ZIPExtractionModule b/framework/TskModules/c_ZIPExtractionModule deleted file mode 160000 index 4622d3ddc229f81b32a430233e46aa90ce3335a5..0000000000000000000000000000000000000000 --- a/framework/TskModules/c_ZIPExtractionModule +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 4622d3ddc229f81b32a430233e46aa90ce3335a5