diff --git a/Core/nbproject/project.properties b/Core/nbproject/project.properties index a155b333ca..def49783e5 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 4d798bbf29..241d13f4f3 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 java.util.stream.Stream; 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 @@ public class ConfigurationModuleManager { } 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 @@ public class ConfigurationModuleManager { } 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 982b20908b..1e4b8aefec 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 @@ import java.util.List; */ public class IngestModuleFactoryService { public List 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 e3646ad521..47b9354bbc 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.collections.CollectionUtils; 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 class IngestModuleSetupManager implements ConfigurationModule newTemplates = new ArrayList<>(curTemplates.values()); - if (parameters != null && CollectionUtils.isEmpty(parameters.getModules())) { + if (parameters != null && !CollectionUtils.isEmpty(parameters.getModules())) { List 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 175ae1b787..a78f211bf5 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.Test; 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.EnvConfig; 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 @@ public class MainTestRunner extends TestCase { 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 449b0969c1..fc65a1ef5a 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 @@ class OutputResults { } return curValue; } - + /** * A mapping of package -> test suite -> test -> output data */ private final Map>> data = new HashMap<>(); - + /** * Adds a result for a particular test in a test suite. * @@ -193,20 +193,27 @@ class OutputResults { 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 23150cbd06..520b0771dd 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.DeserializationContext; 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 class ParameterizedResourceConfig { } else if (node instanceof TextNode) { return new ParameterizedResourceConfig(((TextNode) node).textValue()); } else { - String resource = (node.get("resource") != null) ? node.get("resource").asText() : null; - Map 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 parameters = null; + JsonNode parametersNode = node.get("parameters"); + if (parametersNode != null && parametersNode.isObject()) { + parameters = readMap((ObjectNode) parametersNode); + } return new ParameterizedResourceConfig(resource, parameters); } } + + Map readMap(ObjectNode node) { + Map jsonObject = new LinkedHashMap<>(); + Iterator> keyValIter = node.fields(); + while (keyValIter.hasNext()) { + Map.Entry keyVal = keyValIter.next(); + jsonObject.put(keyVal.getKey(), readItem(keyVal.getValue())); + } + return jsonObject; + } + + List readList(ArrayNode node) { + List 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 ffc82a095b..a12c865767 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 5c2ba10461..930acbf4db 100644 --- a/KeywordSearch/nbproject/project.xml +++ b/KeywordSearch/nbproject/project.xml @@ -290,10 +290,6 @@ ext/annotations-12.0.jar release\modules\ext\annotations-12.0.jar - - ext/commons-collections-3.2.2.jar - release\modules\ext\commons-collections-3.2.2.jar - ext/noggit-0.5.jar release\modules\ext\noggit-0.5.jar