]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/test/SlcTestTask.java
Introduce agent project
[gpl/argeo-slc.git] / org.argeo.slc.agent / src / main / java / org / argeo / slc / ant / test / SlcTestTask.java
diff --git a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/test/SlcTestTask.java b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/test/SlcTestTask.java
new file mode 100644 (file)
index 0000000..6f2411c
--- /dev/null
@@ -0,0 +1,176 @@
+package org.argeo.slc.ant.test;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+import org.apache.tools.ant.BuildException;\r
+\r
+import org.argeo.slc.ant.SlcAntConfig;\r
+import org.argeo.slc.ant.spring.AbstractSpringArg;\r
+import org.argeo.slc.ant.structure.SAwareTask;\r
+import org.argeo.slc.core.SlcException;\r
+import org.argeo.slc.core.deploy.DeployedSystem;\r
+import org.argeo.slc.core.process.SlcExecution;\r
+import org.argeo.slc.core.process.SlcExecutionAware;\r
+import org.argeo.slc.core.structure.StructureAware;\r
+import org.argeo.slc.core.structure.tree.TreeSPath;\r
+import org.argeo.slc.core.test.ExecutableTestRun;\r
+import org.argeo.slc.core.test.SimpleTestResult;\r
+import org.argeo.slc.core.test.SimpleTestRun;\r
+import org.argeo.slc.core.test.TestData;\r
+import org.argeo.slc.core.test.TestDefinition;\r
+import org.argeo.slc.core.test.TestResult;\r
+import org.argeo.slc.core.test.WritableTestRun;\r
+import org.argeo.slc.spring.SpringUtils;\r
+\r
+/** Ant task wrapping a test run. */\r
+public class SlcTestTask extends SAwareTask {\r
+       private Log log = LogFactory.getLog(SlcTestTask.class);\r
+\r
+       private String testRunBean = null;\r
+\r
+       private TestDefinitionArg testDefinitionArg;\r
+       private TestDataArg testDataArg;\r
+       private DeployedSystemArg deployedSystemArg;\r
+       private TestResultArg testResultArg;\r
+\r
+       @Override\r
+       public void executeActions(String mode) throws BuildException {\r
+               // find test run\r
+               final String testRunBeanT;\r
+               if (testRunBean != null) {\r
+                       testRunBeanT = testRunBean;\r
+               } else {\r
+                       testRunBeanT = getProject().getUserProperty(\r
+                                       SlcAntConfig.DEFAULT_TEST_RUN_PROPERTY);\r
+               }\r
+               WritableTestRun testRun = null;\r
+\r
+               if (testRunBeanT != null) {\r
+                       testRun = (WritableTestRun) getContext().getBean(testRunBeanT);\r
+                       if (log.isTraceEnabled())\r
+                               log.trace("Load test run bean from bean name " + testRunBeanT);\r
+               }\r
+\r
+               if (testRun == null) {\r
+                       testRun = loadSingleFromContext(WritableTestRun.class);\r
+                       if (testRun == null) {\r
+                               testRun = new SimpleTestRun();\r
+                               log.warn("Created default simple test run");\r
+                       } else {\r
+                               if (log.isTraceEnabled())\r
+                                       log.trace("Load test run from scanning Spring context");\r
+                       }\r
+               }\r
+\r
+               // set overridden references\r
+               if (testDataArg != null) {\r
+                       testRun.setTestData(testDataArg.getTestData());\r
+                       log.trace("Overrides test data");\r
+               }\r
+\r
+               if (testDefinitionArg != null) {\r
+                       testRun.setTestDefinition(testDefinitionArg.getTestDefinition());\r
+                       log.trace("Overrides test definition");\r
+               }\r
+\r
+               if (deployedSystemArg != null) {\r
+                       testRun.setDeployedSystem(deployedSystemArg.getDeployedSystem());\r
+                       log.trace("Overrides deployed system");\r
+               }\r
+\r
+               if (testResultArg != null) {\r
+                       testRun.setTestResult(testResultArg.getTestResult());\r
+                       log.trace("Overrides test result");\r
+               }\r
+\r
+               // notify path to test result\r
+               TestResult result = testRun.getTestResult();\r
+               if (result == null) {\r
+                       result = loadSingleFromContext(TestResult.class);\r
+                       if (result == null) {\r
+                               result = new SimpleTestResult();\r
+                               log.warn("Created default simple test result");\r
+                       } else {\r
+                               if (log.isTraceEnabled())\r
+                                       log.trace("Load test result from scanning Spring context");\r
+                       }\r
+                       testRun.setTestResult(result);\r
+               }\r
+\r
+               SlcExecution slcExecution = getSlcExecution();\r
+               testRun.notifySlcExecution(slcExecution);\r
+\r
+               if (result != null && result instanceof StructureAware) {\r
+                       ((StructureAware<TreeSPath>) result).notifyCurrentPath(\r
+                                       getRegistry(), getTreeSPath());\r
+               }\r
+\r
+               ((ExecutableTestRun) testRun).execute();\r
+       }\r
+\r
+       /**\r
+        * The bean name of the test run to use. If not set the default is used.\r
+        * \r
+        * @see SlcAntConfig\r
+        */\r
+       public void setTestRun(String testRunBean) {\r
+               this.testRunBean = testRunBean;\r
+       }\r
+\r
+       /** Creates sub tag. */\r
+       public TestDefinitionArg createTestDefinition() {\r
+               testDefinitionArg = new TestDefinitionArg();\r
+               // only test definitions can add to path\r
+               addSAwareArg(testDefinitionArg);\r
+               return testDefinitionArg;\r
+       }\r
+\r
+       /** Creates sub tag. */\r
+       public TestDataArg createTestData() {\r
+               testDataArg = new TestDataArg();\r
+               return testDataArg;\r
+       }\r
+\r
+       /** Creates sub tag. */\r
+       public DeployedSystemArg createDeployedSystem() {\r
+               deployedSystemArg = new DeployedSystemArg();\r
+               return deployedSystemArg;\r
+       }\r
+\r
+       /** Creates sub tag. */\r
+       public TestResultArg createTestResult() {\r
+               testResultArg = new TestResultArg();\r
+               return testResultArg;\r
+       }\r
+\r
+       protected <T> T loadSingleFromContext(Class<T> clss) {\r
+               return SpringUtils.loadSingleFromContext(getContext(), clss);\r
+       }\r
+}\r
+\r
+class TestDefinitionArg extends AbstractSpringArg {\r
+       TestDefinition getTestDefinition() {\r
+               return (TestDefinition) getBeanInstance();\r
+       }\r
+}\r
+\r
+class TestDataArg extends AbstractSpringArg {\r
+       TestData getTestData() {\r
+               return (TestData) getBeanInstance();\r
+       }\r
+\r
+}\r
+\r
+class DeployedSystemArg extends AbstractSpringArg {\r
+       DeployedSystem getDeployedSystem() {\r
+               return (DeployedSystem) getBeanInstance();\r
+       }\r
+\r
+}\r
+\r
+class TestResultArg extends AbstractSpringArg {\r
+       TestResult getTestResult() {\r
+               return (TestResult) getBeanInstance();\r
+       }\r
+\r
+}\r