diff --git a/Core/nbproject/project.properties b/Core/nbproject/project.properties
index 732315b01e..95115aeeeb 100644
--- a/Core/nbproject/project.properties
+++ b/Core/nbproject/project.properties
@@ -64,8 +64,8 @@ file.reference.postgresql-42.3.5.jar=release/modules/ext/postgresql-42.3.5.jar
file.reference.Rejistry-1.1-SNAPSHOT.jar=release/modules/ext/Rejistry-1.1-SNAPSHOT.jar
file.reference.sevenzipjbinding-AllPlatforms.jar=release/modules/ext/sevenzipjbinding-AllPlatforms.jar
file.reference.sevenzipjbinding.jar=release/modules/ext/sevenzipjbinding.jar
-file.reference.sleuthkit-4.11.1.jar=release/modules/ext/sleuthkit-4.11.1.jar
-file.reference.sleuthkit-caseuco-4.11.1.jar=release/modules/ext/sleuthkit-caseuco-4.11.1.jar
+file.reference.sleuthkit-4.12.0.jar=release/modules/ext/sleuthkit-4.12.0.jar
+file.reference.sleuthkit-caseuco-4.12.0.jar=release/modules/ext/sleuthkit-caseuco-4.12.0.jar
file.reference.snakeyaml-1.30.jar=release/modules/ext/snakeyaml-1.30.jar
file.reference.SparseBitSet-1.1.jar=release/modules/ext/SparseBitSet-1.1.jar
file.reference.spotbugs-annotations-4.6.0.jar=release/modules/ext/spotbugs-annotations-4.6.0.jar
diff --git a/Core/nbproject/project.xml b/Core/nbproject/project.xml
index b5caa9e980..c91926d3e8 100644
--- a/Core/nbproject/project.xml
+++ b/Core/nbproject/project.xml
@@ -613,12 +613,12 @@
release/modules/ext/sevenzipjbinding.jar
- ext/sleuthkit-4.11.1.jar
- release/modules/ext/sleuthkit-4.11.1.jar
+ ext/sleuthkit-4.12.0.jar
+ release/modules/ext/sleuthkit-4.12.0.jar
- ext/sleuthkit-caseuco-4.11.1.jar
- release/modules/ext/sleuthkit-caseuco-4.11.1.jar
+ ext/sleuthkit-caseuco-4.12.0.jar
+ release/modules/ext/sleuthkit-caseuco-4.12.0.jar
ext/snakeyaml-1.30.jar
diff --git a/TSKVersion.xml b/TSKVersion.xml
index b728d88ccd..087dac0912 100644
--- a/TSKVersion.xml
+++ b/TSKVersion.xml
@@ -1,3 +1,3 @@
-
+
diff --git a/Testing/nbproject/project.xml b/Testing/nbproject/project.xml
index 745bff10de..c8ab7c2072 100644
--- a/Testing/nbproject/project.xml
+++ b/Testing/nbproject/project.xml
@@ -50,6 +50,15 @@
10.24
+
+ org.sleuthkit.autopsy.corelibs
+
+
+
+ 3
+ 1.4
+
+
org.sleuthkit.autopsy.coretestlibs
diff --git a/Testing/src/org/sleuthkit/autopsy/testing/AutopsyTestCases.java b/Testing/src/org/sleuthkit/autopsy/testing/AutopsyTestCases.java
index c4d5c8dae8..dd7593eceb 100644
--- a/Testing/src/org/sleuthkit/autopsy/testing/AutopsyTestCases.java
+++ b/Testing/src/org/sleuthkit/autopsy/testing/AutopsyTestCases.java
@@ -25,18 +25,33 @@ import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
+import java.nio.charset.StandardCharsets;
import java.text.DateFormat;
+import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Comparator;
import java.util.Date;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Random;
+import java.util.Set;
+import java.util.function.Function;
import java.util.logging.Logger;
import java.util.logging.Level;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
import javax.imageio.ImageIO;
import javax.swing.JDialog;
import javax.swing.text.JTextComponent;
import javax.swing.tree.TreePath;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.Pair;
+import org.apache.commons.lang3.tuple.Triple;
import org.netbeans.jellytools.MainWindowOperator;
import org.netbeans.jellytools.NbDialogOperator;
import org.netbeans.jellytools.WizardOperator;
@@ -59,6 +74,7 @@ import org.netbeans.jemmy.operators.JTreeOperator;
import org.netbeans.jemmy.operators.JTreeOperator.NoSuchPathException;
import org.sleuthkit.autopsy.core.UserPreferences;
import org.sleuthkit.autopsy.core.UserPreferencesException;
+import org.sleuthkit.autopsy.coreutils.PlatformUtil;
import org.sleuthkit.autopsy.events.MessageServiceConnectionInfo;
import org.sleuthkit.autopsy.ingest.IngestManager;
import org.sleuthkit.datamodel.CaseDbConnectionInfo;
@@ -68,6 +84,13 @@ public class AutopsyTestCases {
private static final Logger logger = Logger.getLogger(AutopsyTestCases.class.getName()); // DO NOT USE AUTOPSY LOGGER
private long start;
+
+ // by default, how many minutes jemmy waits for a dialog to appear (default is 1 minute).
+ private static final long DIALOG_FIND_TIMEOUT_MINUTES = 5;
+
+ static {
+ Timeouts.setDefault("Waiter.WaitingTime", DIALOG_FIND_TIMEOUT_MINUTES * 60 * 1000);
+ }
/**
* Escapes the slashes in a file or directory path.
@@ -104,8 +127,9 @@ public class AutopsyTestCases {
JButtonOperator jbo = new JButtonOperator(nbdo, 0); // the "New Case" button
jbo.pushNoBlock();
} catch (TimeoutExpiredException ex) {
- screenshot("TimeoutScreenshot");
logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex);
+ logSystemDiagnostics();
+ screenshot("TimeoutScreenshot");
}
}
@@ -125,8 +149,9 @@ public class AutopsyTestCases {
start = System.currentTimeMillis();
wo.btFinish().clickMouse();
} catch (TimeoutExpiredException ex) {
- screenshot("TimeoutScreenshot");
logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex);
+ logSystemDiagnostics();
+ screenshot("TimeoutScreenshot");
}
}
@@ -159,8 +184,9 @@ public class AutopsyTestCases {
comboBoxOperator.setSelectedItem("(GMT-5:00) America/New_York");
wo.btNext().clickMouse();
} catch (TimeoutExpiredException ex) {
- screenshot("TimeoutScreenshot");
logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex);
+ logSystemDiagnostics();
+ screenshot("TimeoutScreenshot");
}
}
@@ -194,8 +220,9 @@ public class AutopsyTestCases {
fileChooserOperator.chooseFile(new File(getEscapedPath(System.getProperty("img_path"))).getName());
wo.btNext().clickMouse();
} catch (TimeoutExpiredException ex) {
- screenshot("TimeoutScreenshot");
logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex);
+ logSystemDiagnostics();
+ screenshot("TimeoutScreenshot");
}
}
@@ -208,8 +235,9 @@ public class AutopsyTestCases {
logger.log(Level.INFO, "Add image took {0}ms", (System.currentTimeMillis() - start));
wo.btFinish().clickMouse();
} catch (TimeoutExpiredException ex) {
- screenshot("TimeoutScreenshot");
logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex);
+ logSystemDiagnostics();
+ screenshot("TimeoutScreenshot");
}
}
@@ -234,8 +262,9 @@ public class AutopsyTestCases {
jbo1.pushNoBlock();
logger.info("Pushed Global Settings button for hash lookup module in ingest job settings panel");
} catch (TimeoutExpiredException ex) {
- screenshot("TimeoutScreenshot");
logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex);
+ logSystemDiagnostics();
+ screenshot("TimeoutScreenshot");
}
}
@@ -273,8 +302,9 @@ public class AutopsyTestCases {
JButtonOperator jbo4 = new JButtonOperator(hashMainDialogOperator, "OK", 0);
jbo4.pushNoBlock();
} catch (TimeoutExpiredException ex) {
- screenshot("TimeoutScreenshot");
logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex);
+ logSystemDiagnostics();
+ screenshot("TimeoutScreenshot");
}
}
@@ -293,8 +323,9 @@ public class AutopsyTestCases {
jbo1.pushNoBlock();
logger.info("Pushed Global Settings button for keyword search module in ingest job settings panel");
} catch (TimeoutExpiredException ex) {
- screenshot("TimeoutScreenshot");
logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex);
+ logSystemDiagnostics();
+ screenshot("TimeoutScreenshot");
}
}
@@ -326,8 +357,9 @@ public class AutopsyTestCases {
new Timeout("pausing", 10000).sleep(); // let things catch up
wo.btNext().clickMouse();
} catch (TimeoutExpiredException ex) {
- screenshot("TimeoutScreenshot");
logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex);
+ logSystemDiagnostics();
+ screenshot("TimeoutScreenshot");
}
}
@@ -347,8 +379,9 @@ public class AutopsyTestCases {
Random rand = new Random();
new Timeout("pausing", 10000 + (rand.nextInt(15000) + 5000)).sleep();
} catch (TimeoutExpiredException ex) {
- screenshot("TimeoutScreenshot");
logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex);
+ logSystemDiagnostics();
+ screenshot("TimeoutScreenshot");
}
}
@@ -362,8 +395,9 @@ public class AutopsyTestCases {
TreePath tp = jto.findPath(nodeNames);
expandNodes(jto, tp);
} catch (TimeoutExpiredException ex) {
- screenshot("TimeoutScreenshot");
logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex);
+ logSystemDiagnostics();
+ screenshot("TimeoutScreenshot");
}
}
@@ -374,8 +408,9 @@ public class AutopsyTestCases {
JButtonOperator jbo = new JButtonOperator(mwo, "Generate Report");
jbo.pushNoBlock();
} catch (TimeoutExpiredException ex) {
- screenshot("TimeoutScreenshot");
logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex);
+ logSystemDiagnostics();
+ screenshot("TimeoutScreenshot");
}
}
@@ -409,8 +444,9 @@ public class AutopsyTestCases {
new Timeout("pausing", 10000).sleep();
System.setProperty("ReportStr", datenotime);
} catch (TimeoutExpiredException ex) {
- screenshot("TimeoutScreenshot");
logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex);
+ logSystemDiagnostics();
+ screenshot("TimeoutScreenshot");
}
}
@@ -456,6 +492,7 @@ public class AutopsyTestCases {
UserPreferences.setDatabaseConnectionInfo(connectionInfo);
} catch (UserPreferencesException ex) {
logger.log(Level.SEVERE, "Error saving case database connection info", ex); //NON-NLS
+ logSystemDiagnostics();
}
//Solr Index settings
UserPreferences.setIndexingServerHost(System.getProperty("solrHost"));
@@ -470,6 +507,7 @@ public class AutopsyTestCases {
UserPreferences.setMessageServiceConnectionInfo(msgServiceInfo);
} catch (UserPreferencesException ex) {
logger.log(Level.SEVERE, "Error saving messaging service connection info", ex); //NON-NLS
+ logSystemDiagnostics();
}
UserPreferences.setZkServerHost(System.getProperty("zooKeeperHost"));
@@ -484,6 +522,253 @@ public class AutopsyTestCases {
}
} catch (NoSuchPathException ne) {
logger.log(Level.SEVERE, "Error expanding tree path", ne);
+ logSystemDiagnostics();
+ }
+ }
+
+
+ private void logSystemDiagnostics() {
+ logger.log(Level.INFO, getSystemDiagnostics());
+ }
+
+ private static final String NEWLINE = System.lineSeparator();
+
+ private static final int TOP_NUM = 10;
+
+ private static Set IGNORED_PROCESSES = Stream.of("_Total", "Idle", "Memory Compression").collect(Collectors.toSet());
+
+
+
+ /**
+ * @return A string of system diagnostic information.
+ *
+ * NOTE: currently only works for windows.
+ */
+ private static String getSystemDiagnostics() {
+ if (PlatformUtil.isWindowsOS()) {
+ try {
+ List