diff --git a/Core/nbproject/project.properties b/Core/nbproject/project.properties index a155b333ca2a7872fd999665abe651a569eeb7cb..def49783e558d47a27bc16cad4f6fc11c5771892 100644 --- a/Core/nbproject/project.properties +++ b/Core/nbproject/project.properties @@ -17,7 +17,6 @@ file.reference.c3p0-0.9.5.jar=release\\modules\\ext\\c3p0-0.9.5.jar file.reference.checker-compat-qual-2.5.3.jar=release\\modules\\ext\\checker-compat-qual-2.5.3.jar file.reference.commons-beanutils-1.9.2.jar=release\\modules\\ext\\commons-beanutils-1.9.2.jar file.reference.commons-codec-1.11.jar=release\\modules\\ext\\commons-codec-1.11.jar -file.reference.commons-collections-3.2.2.jar=release\\modules\\ext\\commons-collections-3.2.2.jar file.reference.commons-dbcp2-2.1.1.jar=release\\modules\\ext\\commons-dbcp2-2.1.1.jar file.reference.commons-digester-1.8.1.jar=release\\modules\\ext\\commons-digester-1.8.1.jar file.reference.commons-logging-1.2.jar=release\\modules\\ext\\commons-logging-1.2.jar diff --git a/Core/test/qa-functional/src/org/sleuthkit/autopsy/integrationtesting/ConfigurationModuleManager.java b/Core/test/qa-functional/src/org/sleuthkit/autopsy/integrationtesting/ConfigurationModuleManager.java index 4d798bbf29a413781195c2ce9c7406681aa34331..241d13f4f36cde0c6f82bff43e9be3ca52a9118a 100644 --- a/Core/test/qa-functional/src/org/sleuthkit/autopsy/integrationtesting/ConfigurationModuleManager.java +++ b/Core/test/qa-functional/src/org/sleuthkit/autopsy/integrationtesting/ConfigurationModuleManager.java @@ -20,7 +20,6 @@ import org.apache.cxf.common.util.CollectionUtils; import org.openide.util.Pair; import org.sleuthkit.autopsy.ingest.IngestJobSettings; -import org.sleuthkit.autopsy.ingest.IngestModuleFactoryService; import org.sleuthkit.autopsy.ingest.IngestModuleTemplate; import org.sleuthkit.autopsy.integrationtesting.config.ConfigDeserializer; import org.sleuthkit.autopsy.integrationtesting.config.ParameterizedResourceConfig; @@ -100,7 +99,7 @@ private Pair<IngestJobSettings, ConfigurationModule<?>> runConfigurationModule(I } Type configurationModuleType = Stream.of(clazz.getGenericInterfaces()) - .filter(type -> type.getClass().equals(ConfigurationModule.class) && type instanceof ParameterizedType && type instanceof Class) + .filter(type -> type instanceof ParameterizedType && ((ParameterizedType) type).getRawType().equals(ConfigurationModule.class)) .map(type -> ((ParameterizedType) type).getActualTypeArguments()[0]) .findFirst() .orElse(null); @@ -121,7 +120,7 @@ private Pair<IngestJobSettings, ConfigurationModule<?>> runConfigurationModule(I } if (result instanceof IngestJobSettings) { - return Pair.of(curConfig, configModuleObj); + return Pair.of((IngestJobSettings) result, configModuleObj); } else { logger.log(Level.SEVERE, String.format("Could not retrieve IngestJobSettings from %s", configModule.getResource())); return null; diff --git a/Core/test/qa-functional/src/org/sleuthkit/autopsy/ingest/IngestModuleFactoryService.java b/Core/test/qa-functional/src/org/sleuthkit/autopsy/integrationtesting/IngestModuleFactoryService.java similarity index 57% rename from Core/test/qa-functional/src/org/sleuthkit/autopsy/ingest/IngestModuleFactoryService.java rename to Core/test/qa-functional/src/org/sleuthkit/autopsy/integrationtesting/IngestModuleFactoryService.java index 982b20908bc67892e4f6b0d5d1a0c237a4833be4..1e4b8aefec0240149a4b535768af623359b3445f 100644 --- a/Core/test/qa-functional/src/org/sleuthkit/autopsy/ingest/IngestModuleFactoryService.java +++ b/Core/test/qa-functional/src/org/sleuthkit/autopsy/integrationtesting/IngestModuleFactoryService.java @@ -3,9 +3,12 @@ * To change this template file, choose Tools | Templates * and open the template in the editor. */ -package org.sleuthkit.autopsy.ingest; +package org.sleuthkit.autopsy.integrationtesting; +import java.util.ArrayList; import java.util.List; +import org.openide.util.Lookup; +import org.sleuthkit.autopsy.ingest.IngestModuleFactory; /** * @@ -13,6 +16,6 @@ */ public class IngestModuleFactoryService { public List<IngestModuleFactory> getFactories() { - return IngestModuleFactoryLoader.getIngestModuleFactories(); + return new ArrayList<>(Lookup.getDefault().lookupAll(IngestModuleFactory.class)); } } diff --git a/Core/test/qa-functional/src/org/sleuthkit/autopsy/integrationtesting/IngestModuleSetupManager.java b/Core/test/qa-functional/src/org/sleuthkit/autopsy/integrationtesting/IngestModuleSetupManager.java index e3646ad5218a6a740c0c7dc5d746e3b5b977331e..47b9354bbc36083741d8d073207530f5a9bee781 100644 --- a/Core/test/qa-functional/src/org/sleuthkit/autopsy/integrationtesting/IngestModuleSetupManager.java +++ b/Core/test/qa-functional/src/org/sleuthkit/autopsy/integrationtesting/IngestModuleSetupManager.java @@ -26,7 +26,6 @@ import org.apache.commons.lang.StringUtils; import org.sleuthkit.autopsy.ingest.IngestJobSettings; import org.sleuthkit.autopsy.ingest.IngestModuleFactory; -import org.sleuthkit.autopsy.ingest.IngestModuleFactoryService; import org.sleuthkit.autopsy.ingest.IngestModuleTemplate; /** @@ -65,7 +64,7 @@ public IngestJobSettings configure(IngestJobSettings curSettings, IngestModuleSe List<IngestModuleTemplate> newTemplates = new ArrayList<>(curTemplates.values()); - if (parameters != null && CollectionUtils.isEmpty(parameters.getModules())) { + if (parameters != null && !CollectionUtils.isEmpty(parameters.getModules())) { List<IngestModuleTemplate> templatesToAdd = parameters.getModules().stream() .filter((className) -> !curTemplates.containsKey(className)) .map((className) -> allFactories.get(className)) diff --git a/Core/test/qa-functional/src/org/sleuthkit/autopsy/integrationtesting/MainTestRunner.java b/Core/test/qa-functional/src/org/sleuthkit/autopsy/integrationtesting/MainTestRunner.java index 175ae1b78727e53b799fe3f5ba3d1107ddd399d3..a78f211bf5b7d62c830ecd6226a40ccc2e31336e 100644 --- a/Core/test/qa-functional/src/org/sleuthkit/autopsy/integrationtesting/MainTestRunner.java +++ b/Core/test/qa-functional/src/org/sleuthkit/autopsy/integrationtesting/MainTestRunner.java @@ -18,6 +18,7 @@ */ package org.sleuthkit.autopsy.integrationtesting; +import java.io.File; import org.sleuthkit.autopsy.integrationtesting.config.TestSuiteConfig; import org.sleuthkit.autopsy.integrationtesting.config.IntegrationTestConfig; import org.sleuthkit.autopsy.integrationtesting.config.IntegrationCaseType; @@ -36,7 +37,6 @@ import junit.framework.TestCase; import org.apache.cxf.common.util.CollectionUtils; import org.netbeans.junit.NbModuleSuite; -import org.openide.util.Exceptions; import org.openide.util.Lookup; import org.openide.util.Pair; import org.sleuthkit.autopsy.casemodule.Case; @@ -54,6 +54,7 @@ import org.sleuthkit.autopsy.integrationtesting.config.TestingConfig; import org.sleuthkit.autopsy.testutils.IngestUtils; import org.sleuthkit.datamodel.TskCoreException; +import static ucar.unidata.util.Format.i; /** * Main entry point for running integration tests. Handles processing @@ -159,6 +160,10 @@ private Case createCaseWithDataSources(EnvConfig envConfig, String caseName, Cas String uniqueCaseName = String.format("%s_%s", caseName, TimeStampUtils.createTimeStamp()); String outputFolder = PathUtil.getAbsolutePath(envConfig.getWorkingDirectory(), envConfig.getRootCaseOutputPath()); String caseOutputFolder = Paths.get(outputFolder, uniqueCaseName).toString(); + File caseOutputFolderFile = new File(caseOutputFolder); + if (!caseOutputFolderFile.exists()) { + caseOutputFolderFile.mkdirs(); + } switch (caseType) { case SINGLE_USER_CASE: { diff --git a/Core/test/qa-functional/src/org/sleuthkit/autopsy/integrationtesting/OutputResults.java b/Core/test/qa-functional/src/org/sleuthkit/autopsy/integrationtesting/OutputResults.java index 449b0969c1ffb2fd2cfecaf0fb681fb3d024d215..fc65a1ef5a7c9e9aeed5591d0fc067103a8b8fc9 100644 --- a/Core/test/qa-functional/src/org/sleuthkit/autopsy/integrationtesting/OutputResults.java +++ b/Core/test/qa-functional/src/org/sleuthkit/autopsy/integrationtesting/OutputResults.java @@ -101,12 +101,12 @@ private static <K, V> V getOrCreate(Map<K, V> map, K key, Supplier<V> onNotPrese } return curValue; } - + /** * A mapping of package -> test suite -> test -> output data */ private final Map<String, Map<String, Map<String, Object>>> data = new HashMap<>(); - + /** * Adds a result for a particular test in a test suite. * @@ -193,20 +193,27 @@ protected MappingNode representJavaBean(Set<Property> properties, Object javaBea public void serializeToFile(String outputFolder, String caseName, Case.CaseType caseType) { serializeToFile(getSerializationPath(outputFolder, caseName, caseType)); } - + private String getSerializationPath(String outputFolder, String caseName, Case.CaseType caseType) { String outputExtension = ".yml"; Path outputPath = Paths.get(outputFolder, String.format("%s-%s%s", caseName, getCaseTypeId(caseType), outputExtension)); return outputPath.toString(); } - + /** * Serializes results of a test to a yaml file. + * * @param outputPath The output path. */ public void serializeToFile(String outputPath) { + File outputFile = new File(outputPath); + + if (!outputFile.getParentFile().exists()) { + outputFile.getParentFile().mkdirs(); + } + try { - FileWriter writer = new FileWriter(new File(outputPath)); + FileWriter writer = new FileWriter(outputFile); YAML_SERIALIZER.dump(getSerializableData(), writer); } catch (IOException ex) { logger.log(Level.WARNING, "There was an error writing results to outputPath: " + outputPath, ex); diff --git a/Core/test/qa-functional/src/org/sleuthkit/autopsy/integrationtesting/config/ParameterizedResourceConfig.java b/Core/test/qa-functional/src/org/sleuthkit/autopsy/integrationtesting/config/ParameterizedResourceConfig.java index 23150cbd0686eaecb27d56859ecc2c6961ffb279..520b0771dd63ed0dd4b31f0bcf01fe3913b28417 100644 --- a/Core/test/qa-functional/src/org/sleuthkit/autopsy/integrationtesting/config/ParameterizedResourceConfig.java +++ b/Core/test/qa-functional/src/org/sleuthkit/autopsy/integrationtesting/config/ParameterizedResourceConfig.java @@ -25,10 +25,17 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.databind.node.TextNode; +import com.fasterxml.jackson.databind.node.ValueNode; import java.io.IOException; +import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; import org.sleuthkit.autopsy.integrationtesting.config.ParameterizedResourceConfig.ParameterizedResourceConfigDeserializer; @@ -61,14 +68,68 @@ public ParameterizedResourceConfig deserialize(JsonParser jp, DeserializationCon } else if (node instanceof TextNode) { return new ParameterizedResourceConfig(((TextNode) node).textValue()); } else { - String resource = (node.get("resource") != null) ? node.get("resource").asText() : null; - Map<String, Object> parameters = (node.get("parameters") != null) ? - node.get("parameters").traverse().readValueAs(Map.class) : - null; + JsonNode resourceNode = node.get("resource"); + String resource = (resourceNode != null) ? resourceNode.asText() : null; + + Map<String, Object> parameters = null; + JsonNode parametersNode = node.get("parameters"); + if (parametersNode != null && parametersNode.isObject()) { + parameters = readMap((ObjectNode) parametersNode); + } return new ParameterizedResourceConfig(resource, parameters); } } + + Map<String, Object> readMap(ObjectNode node) { + Map<String, Object> jsonObject = new LinkedHashMap<>(); + Iterator<Map.Entry<String, JsonNode>> keyValIter = node.fields(); + while (keyValIter.hasNext()) { + Map.Entry<String, JsonNode> keyVal = keyValIter.next(); + jsonObject.put(keyVal.getKey(), readItem(keyVal.getValue())); + } + return jsonObject; + } + + List<Object> readList(ArrayNode node) { + List<Object> objArr = new ArrayList<>(); + for (JsonNode childNode : node) { + objArr.add(readItem(childNode)); + } + return objArr; + } + + Object readJsonPrimitive(ValueNode vNode) { + if (vNode.isTextual()) { + return vNode.asText(); + } else if (vNode.isBoolean()) { + return vNode.asBoolean(); + } else if (vNode.isLong()) { + return vNode.asLong(); + } else if (vNode.isInt()) { + return vNode.asInt(); + } else if (vNode.isDouble()) { + return vNode.asDouble(); + } + + return null; + } + + Object readItem(JsonNode node) { + if (node == null) { + return null; + } + + if (node.isObject()) { + return readMap((ObjectNode) node); + } else if (node.isArray()) { + return readList((ArrayNode) node); + } else if (node.isValueNode()) { + return readJsonPrimitive((ValueNode) node); + } + + return null; + } } private final String resource; diff --git a/KeywordSearch/nbproject/project.properties b/KeywordSearch/nbproject/project.properties index ffc82a095b3a5ad3e37a308a554ac5189cee263d..a12c865767816d51056f8b6a28920ea5484d612c 100644 --- a/KeywordSearch/nbproject/project.properties +++ b/KeywordSearch/nbproject/project.properties @@ -1,6 +1,5 @@ file.reference.annotations-12.0.jar=release\\modules\\ext\\annotations-12.0.jar file.reference.commons-beanutils-1.9.2.jar=release\\modules\\ext\\commons-beanutils-1.9.2.jar -file.reference.commons-collections-3.2.2.jar=release\\modules\\ext\\commons-collections-3.2.2.jar file.reference.commons-digester-1.8.1.jar=release\\modules\\ext\\commons-digester-1.8.1.jar file.reference.commons-logging-1.2.jar=release\\modules\\ext\\commons-logging-1.2.jar file.reference.commons-validator-1.5.1.jar=release\\modules\\ext\\commons-validator-1.5.1.jar diff --git a/KeywordSearch/nbproject/project.xml b/KeywordSearch/nbproject/project.xml index 5c2ba104617c359f8acf6898f575d76949f70ca8..930acbf4dbf897a4244c3343d6bf386dca35c93b 100644 --- a/KeywordSearch/nbproject/project.xml +++ b/KeywordSearch/nbproject/project.xml @@ -290,10 +290,6 @@ <runtime-relative-path>ext/annotations-12.0.jar</runtime-relative-path> <binary-origin>release\modules\ext\annotations-12.0.jar</binary-origin> </class-path-extension> - <class-path-extension> - <runtime-relative-path>ext/commons-collections-3.2.2.jar</runtime-relative-path> - <binary-origin>release\modules\ext\commons-collections-3.2.2.jar</binary-origin> - </class-path-extension> <class-path-extension> <runtime-relative-path>ext/noggit-0.5.jar</runtime-relative-path> <binary-origin>release\modules\ext\noggit-0.5.jar</binary-origin>