diff --git a/Core/build.xml b/Core/build.xml index fe7e4791b0551446094fb9f4da38e68355eb34a2..3dc012686986c845a3888dc2b8923d144470b4fa 100644 --- a/Core/build.xml +++ b/Core/build.xml @@ -199,109 +199,97 @@ </target> - <!-- This code should be nearly identical to common.xml barring two fundamental differences. - 1) The integration-test parameters are injected into 'test.qa-functional.properties' to be - used as system properties in common.xml's target "-do-junit" and 2) the paths specified in - 'module.run.classpath' are incorporated into the manifest of a jar and then the path to the - jar is used as part of the classpath for '-do-junit' instead of 'module.run.classpath'. - This was done to prevent classpath length issues on windows. More information on this - technique can be found here: https://stackoverflow.com/a/201969. - --> - <target name="test-init" depends="init,test-preinit,test-lib-init"> - <property name="test.timeout" value="600000"/> <!-- 10min per test --> - <property name="test.run.args" value="-ea"/> - <property name="test.filter.trace" value="true"/> - <condition property="test.bootclasspath.prepend.args" value="-Xbootclasspath/p:${run.bootclasspath.prepend}"> - <isset property="run.bootclasspath.prepend"/> - </condition> - <property name="test.bootclasspath.prepend.args" value="-Dno.netbeans.bootclasspath.prepend.needed=true"/> - <macrodef name="test-init"> - <attribute name="test.type"/> - <sequential> - <path id="test.@{test.type}.pathing-jar.module-cp.classpath" path="${module.run.classpath}"/> - <pathconvert pathsep=" " refid="test.@{test.type}.pathing-jar.module-cp.classpath" property="test.@{test.type}.pathing-jar.module-cp.classpathstr"/> - <property name="test.@{test.type}.pathing-jar.module-cp.loc" value="${cluster}/test.@{test.type}.pathing.module-cp.jar"/> - <jar destfile="${test.@{test.type}.pathing-jar.module-cp.loc}"> - <manifest> - <attribute name="Class-Path" value="${test.@{test.type}.pathing-jar.module-cp.classpathstr}"/> - </manifest> - </jar> - - <property name="test.@{test.type}.dir" location="test/@{test.type}"/> - <property name="test.@{test.type}.src.dir" location="${test.@{test.type}.dir}/src"/> - <property name="test.@{test.type}.data.dir" location="${test.@{test.type}.dir}/data"/> - <property name="build.test.@{test.type}.dir" location="${build.dir}/test/@{test.type}"/> - <property name="build.test.@{test.type}.classes.dir" location="${build.test.@{test.type}.dir}/classes"/> - <property name="build.test.@{test.type}.results.dir" location="${build.test.@{test.type}.dir}/results"/> - <property name="build.test.@{test.type}.work.dir" location="${build.test.@{test.type}.dir}/work"/> - <property name="test-@{test.type}-sys-prop.cluster.path.final" value="${cluster.path.final}:${cluster}"/> <!-- #153178, 176019 --> - <property name="test.@{test.type}.cp.extra" value=""/> - <path id="test.@{test.type}.cp"> - <!-- Cannot use <path refid="cp"/> since that uses ${module.classpath} and we want ${module.run.classpath}: --> - <pathelement path="${test.@{test.type}.compile.cp}"/> - <pathelement path="${cp.extra}"/> - <pathelement location="${cluster}/${module.jar}"/> - <path refid="test.unit.lib.cp"/> - <!-- for compatibility with property based classpath--> - <pathelement path="${module.run.classpath}"/> - <pathelement path="${test.@{test.type}.cp.extra}"/> - </path> - <path id="test.@{test.type}.run.cp"> - <pathelement path="${build.test.@{test.type}.classes.dir}"/> - <!-- Cannot use <path refid="cp"/> since that uses ${module.classpath} and we want ${module.run.classpath}: --> - <pathelement path="${test.@{test.type}.runtime.cp}"/> - <pathelement path="${cp.extra}"/> - <pathelement location="${cluster}/${module.jar}"/> - <path refid="test.unit.lib.cp"/> - <!-- for compatibility with property based classpath--> - <pathelement path="${test.@{test.type}.pathing-jar.module-cp.loc}"/> - <pathelement path="${test.@{test.type}.run.cp.extra}"/> - <pathelement path="${test.@{test.type}.cp.extra}"/> - <pathelement path="${test.extra.nb.javac.deps}"/> - </path> - <!-- path reference used in both compiler and executor --> - <propertyset id="test.@{test.type}.properties"> - <propertyset> - <propertyref prefix="integration-test."/> - <mapper type="glob" from="integration-test.*" to="*"/> - </propertyset> - <propertyset> - <propertyref prefix="test-@{test.type}-sys-prop."/> - <mapper type="glob" from="test-@{test.type}-sys-prop.*" to="*"/> - </propertyset> - <propertyset> - <propertyref name="build.test.@{test.type}.work.dir"/> - <mapper type="glob" from="build.test.@{test.type}.work.dir" to="nbjunit.workdir"/> - </propertyset> - <propertyset> - <propertyref name="test.timeout"/> - <mapper type="glob" from="test.timeout" to="nbjunit.hard.timeout"/> - </propertyset> - </propertyset> - <condition property="exists.test.@{test.type}.src.dir"> - <and> - <available file="${test.@{test.type}.src.dir}" type="dir"/> - <not> - <istrue value="${disable.@{test.type}.tests}"/> - </not> - </and> - </condition> - </sequential> - </macrodef> - <test-init test.type="unit"/> - <test-init test.type="qa-functional"/> - </target> - + + <!--sets up integration test system properties, calls underlying test-init and then sets up the pathing jar--> + <target name="test-init" depends="setup-integration-props,projectized-common.test-init,integration-pathing-jar" /> + <target name="test-qa-functional"> <!--We don't want integration testing to run from standard qa functional--> - <property name="test.excludes" value="**/org/sleuthkit/autopsy/integrationtesting/MainTestRunner.class"/> + <property name="test.excludes" value="**/org/sleuthkit/autopsy/integrationtesting/TestRunner.class"/> <antcall target="projectized-common.test-qa-functional" /> - </target> + </target> + + + <!--map from integration-test variables to test-qa-functional-sys-prop so they will be used as system properties--> + <target name="setup-integration-props" depends="init"> + <sequential> + <condition property="test-qa-functional-sys-prop.rootTestOutputPath" value="${integration-test.rootTestOutputPath}"> + <isset property="integration-test.rootTestOutputPath" /> + </condition> + + <condition property="test-qa-functional-sys-prop.diffOutputPath" value="${integration-test.diffOutputPath}"> + <isset property="integration-test.diffOutputPath" /> + </condition> + + <condition property="test-qa-functional-sys-prop.rootGoldPath" value="${integration-test.rootGoldPath}"> + <isset property="integration-test.rootGoldPath" /> + </condition> + + <condition property="test-qa-functional-sys-prop.workingDirectory" value="${integration-test.workingDirectory}"> + <isset property="integration-test.workingDirectory" /> + </condition> + + <condition property="test-qa-functional-sys-prop.rootTestSuitesPath" value="${integration-test.rootTestSuitesPath}"> + <isset property="integration-test.rootTestSuitesPath" /> + </condition> + + <condition property="test-qa-functional-sys-prop.rootCaseOutputPath" value="${integration-test.rootCaseOutputPath}"> + <isset property="integration-test.rootCaseOutputPath" /> + </condition> + + <condition property="test-qa-functional-sys-prop.configFile" value="${integration-test.configFile}"> + <isset property="integration-test.configFile" /> + </condition> + </sequential> + </target> + + <!-- + The paths specified in 'module.run.classpath' are incorporated into the manifest of a jar and then the path to the + jar is used as part of the classpath for '-do-junit' instead of 'module.run.classpath'. This was done to prevent + classpath length issues on windows. More information on this technique can be found here: + https://stackoverflow.com/a/201969. + --> + <target name="integration-pathing-jar" depends="projectized-common.test-init" if="testing-pathing-jar.should-create"> + <sequential> + <!--set up pathing jar based on module.run.classpath as classpath--> + <path id="test.qa-functional.pathing-jar.module-cp.classpath" path="${module.run.classpath}"/> + <pathconvert pathsep=" " refid="test.qa-functional.pathing-jar.module-cp.classpath" property="test.qa-functional.pathing-jar.module-cp.classpathstr"/> + <property name="test.qa-functional.pathing-jar.module-cp.loc" value="${cluster}/test.qa-functional.pathing.module-cp.jar"/> + <jar destfile="${test.qa-functional.pathing-jar.module-cp.loc}"> + <manifest> + <attribute name="Class-Path" value="${test.qa-functional.pathing-jar.module-cp.classpathstr}"/> + </manifest> + </jar> + + <!--grab properties from common.xml:test-init so that "test.qa-functional.run.cp" can be properly formed--> + <property name="build.test.qa-functional.dir" location="${build.dir}/test/qa-functional"/> + <property name="build.test.qa-functional.classes.dir" location="${build.test.qa-functional.dir}/classes"/> + <property name="test.qa-functional.cp.extra" value=""/> + + <!--set up "test.qa-functional.run.cp" to be used by common.xml:-do-junit--> + <path id="test.qa-functional.run.cp"> + <pathelement path="${build.test.qa-functional.classes.dir}"/> + <!-- Cannot use <path refid="cp"/> since that uses ${module.classpath} and we want ${module.run.classpath}: --> + <pathelement path="${test.qa-functional.runtime.cp}"/> + <pathelement path="${cp.extra}"/> + <pathelement location="${cluster}/${module.jar}"/> + <path refid="test.unit.lib.cp"/> + <!-- for compatibility with property based classpath--> + <pathelement path="${test.qa-functional.pathing-jar.module-cp.loc}"/> + <pathelement path="${test.qa-functional.run.cp.extra}"/> + <pathelement path="${test.qa-functional.cp.extra}"/> + <pathelement path="${test.extra.nb.javac.deps}"/> + </path> + </sequential> + </target> <target name="integration-test"> <!--We want only integration testing to run from this--> - <property name="test.includes" value="**/org/sleuthkit/autopsy/integrationtesting/MainTestRunner.class"/> - <antcall target="projectized-common.test-qa-functional" /> + <sequential> + <property name="testing-pathing-jar.should-create" value="true"/> + <property name="test.includes" value="**/org/sleuthkit/autopsy/integrationtesting/TestRunner.class"/> + <antcall target="projectized-common.test-qa-functional" /> + </sequential> </target> </project> \ No newline at end of file