Various changes
authorMathieu Baudier <mbaudier@argeo.org>
Thu, 1 May 2008 19:53:42 +0000 (19:53 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Thu, 1 May 2008 19:53:42 +0000 (19:53 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@1089 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

39 files changed:
org.argeo.slc.core/src/main/java/org/argeo/slc/ant/test/SlcTestTask.java
org.argeo.slc.core/src/main/java/org/argeo/slc/core/build/Distribution.java
org.argeo.slc.core/src/main/java/org/argeo/slc/core/build/DistributionId.java
org.argeo.slc.core/src/main/java/org/argeo/slc/core/deploy/DeployedSystem.java
org.argeo.slc.core/src/main/java/org/argeo/slc/core/deploy/DeployedSystemId.java
org.argeo.slc.core/src/main/java/org/argeo/slc/core/structure/tree/TreeSPath.java
org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/SimpleResultPart.java
org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/SimpleTestResult.java
org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/SimpleTestRun.java
org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/TestResult.java
org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/TestResultPart.java
org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/TestRun.java
org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/TestRunAware.java [new file with mode: 0644]
org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/TestRunDescriptor.java [new file with mode: 0644]
org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/tree/PartSubList.java
org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/tree/TreeTestResult.java
org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/tree/TreeTestResultLogger.java
org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/tree/htmlreport/ResultPage.java
org.argeo.slc.core/src/main/java/org/argeo/slc/msg/test/tree/CreateTreeTestResultRequest.java [new file with mode: 0644]
org.argeo.slc.core/src/main/java/org/argeo/slc/msg/test/tree/ResultPartRequest.java [new file with mode: 0644]
org.argeo.slc.core/src/main/java/org/argeo/slc/msg/test/tree/ResultPartsRequest.java [deleted file]
org.argeo.slc.core/src/main/java/org/argeo/slc/msg/test/tree/TreeTestResultRequest.java [deleted file]
org.argeo.slc.core/src/main/java/org/argeo/slc/spring/SpringUtils.java
org.argeo.slc.core/src/main/java/org/argeo/slc/unit/AbstractSpringTestCase.java
org.argeo.slc.core/src/main/java/org/argeo/slc/unit/test/tree/UnitTestTreeUtil.java
org.argeo.slc.core/src/main/resources/org/argeo/slc/castor/mapping.xml [new file with mode: 0644]
org.argeo.slc.core/src/main/resources/org/argeo/slc/castor/msg/mapping.xml [new file with mode: 0644]
org.argeo.slc.core/src/main/resources/org/argeo/slc/castor/process/mapping.xml
org.argeo.slc.core/src/main/resources/org/argeo/slc/castor/spring/applicationContext.xml
org.argeo.slc.core/src/main/resources/org/argeo/slc/castor/structure/mapping.xml [new file with mode: 0644]
org.argeo.slc.core/src/main/resources/org/argeo/slc/castor/test/mapping.xml [new file with mode: 0644]
org.argeo.slc.core/src/main/resources/org/argeo/slc/castor/test/tree/mapping.xml [deleted file]
org.argeo.slc.core/src/main/resources/org/argeo/slc/hibernate/test/SimpleResultPart.hbm.xml
org.argeo.slc.core/src/main/resources/org/argeo/slc/hibernate/test/tree/PartSubList.hbm.xml
org.argeo.slc.core/src/main/resources/org/argeo/slc/hibernate/test/tree/TreeTestResult.hbm.xml
org.argeo.slc.core/src/main/resources/org/argeo/slc/xml/slc.xsd
org.argeo.slc.core/src/test/java/org/argeo/slc/core/test/tree/TreeTestResultCastorTest.java
org.argeo.slc.core/src/test/java/org/argeo/slc/core/test/tree/TreeTestResultTestUtils.java
org.argeo.slc.core/src/test/java/org/argeo/slc/core/test/tree/TreeTestResultWsIntegrationTest.java

index f0326175be126663a19d096684d53748696d4689..3acfc5e0fab00260e64b5782da7ddd803a78de6b 100644 (file)
@@ -99,10 +99,7 @@ public class SlcTestTask extends SAwareTask {
                }\r
 \r
                SlcExecution slcExecution = getSlcExecution();\r
-               if (result != null && slcExecution != null\r
-                               && result instanceof SlcExecutionAware) {\r
-                       ((SlcExecutionAware) result).notifySlcExecution(slcExecution);\r
-               }\r
+               testRun.notifySlcExecution(slcExecution);\r
 \r
                if (result != null && result instanceof StructureAware) {\r
                        ((StructureAware<TreeSPath>) result).notifyCurrentPath(\r
index fb9c09188b87020f045402eacbfc8a5c38ccf4e2..a9ada27f06b7b398736ee9e69c437b66bac2e697 100644 (file)
@@ -1,6 +1,6 @@
 package org.argeo.slc.core.build;\r
 \r
 public interface Distribution {\r
-       public DistributionId getDistributionId();\r
+       public String getDistributionId();\r
 \r
 }\r
index 926247925479c560e2ee791436df0c7acfc542ae..c253a679bce0c3b2c1b999015a56e80ba59f44bf 100644 (file)
@@ -1,6 +1,7 @@
 package org.argeo.slc.core.build;\r
 \r
-/** The id uniquely identifying the distribution of a software system. */\r
+/** The id uniquely identifying the distribution of a software system. \r
+ * @deprecated*/\r
 public interface DistributionId {\r
 \r
 }\r
index ccec874f90651f524962a3270fe7a4701444b6d9..2fabf5606d41545445dbfb9cbc130ea5008c9166 100644 (file)
@@ -1,6 +1,9 @@
 package org.argeo.slc.core.deploy;\r
 \r
+import org.argeo.slc.core.build.Distribution;\r
+\r
 /** An instance of a software system. */\r
 public interface DeployedSystem {\r
-       public DeployedSystemId getDeployedSystemId();\r
+       public String getDeployedSystemId();\r
+       public Distribution getDistribution();\r
 }\r
index 43f5f6ac540d7a255e03447686f60e54d4d076aa..ea4d192504b86f15cd36c51bb1dbcec37a8946b4 100644 (file)
@@ -2,7 +2,8 @@ package org.argeo.slc.core.deploy;
 \r
 import org.argeo.slc.core.build.DistributionId;\r
 \r
-/** The id uniquely identifying a deployed system. */\r
+/** The id uniquely identifying a deployed system. \r
+ * @deprecated*/\r
 public interface DeployedSystemId {\r
        public DistributionId getDistributionId();\r
 }\r
index 9c9eb54c8f0f37de8e5a69de5f09d9e693be229c..f02fbda5d8969ffcd757da72fd4c8bebbcdbac3d 100644 (file)
@@ -40,7 +40,7 @@ public class TreeSPath implements StructurePath, Comparable<StructurePath> {
         * ORM/OXM frameworks. Use constructor to create immutable tree structure\r
         * paths.\r
         */\r
-       void setAsUniqueString(String str) {\r
+       public void setAsUniqueString(String str) {\r
                this.asUniqueString = str;\r
        }\r
 \r
index da0ddcbebfcde8db0954104ba40bef26a40d8bba..543cc98bb89849cefbbe5b626205fdd169daefdf 100644 (file)
@@ -1,5 +1,14 @@
 package org.argeo.slc.core.test;\r
 \r
+import java.io.IOException;\r
+import java.io.PrintWriter;\r
+import java.io.StringReader;\r
+import java.io.StringWriter;\r
+import java.util.List;\r
+import java.util.Vector;\r
+\r
+import org.apache.commons.io.IOUtils;\r
+\r
 /**\r
  * <p>\r
  * Basic implementation of a result part, implementing the standard three status\r
@@ -8,15 +17,19 @@ package org.argeo.slc.core.test;
  * \r
  * @see TestStatus\r
  */\r
-public class SimpleResultPart implements TestResultPart, TestStatus {\r
+public class SimpleResultPart implements TestResultPart, TestStatus,\r
+               TestRunAware {\r
 \r
-       /** For ORM */\r
+       /** @deprecated */\r
        private Long tid;\r
 \r
+       private String testRunUuid;\r
+\r
        /** The status. Default to ERROR since it should always be explicitely set. */\r
        private Integer status = ERROR;\r
        private String message;\r
-       private Exception exception;\r
+       private String exceptionMessage;\r
+       private List<String> exceptionStackLines = new Vector<String>();\r
 \r
        public SimpleResultPart() {\r
        }\r
@@ -28,7 +41,7 @@ public class SimpleResultPart implements TestResultPart, TestStatus {
        public SimpleResultPart(Integer status, String message, Exception exception) {\r
                this.status = status;\r
                this.message = message;\r
-               this.exception = exception;\r
+               setException(exception);\r
        }\r
 \r
        public String getMessage() {\r
@@ -47,12 +60,29 @@ public class SimpleResultPart implements TestResultPart, TestStatus {
                return status;\r
        }\r
 \r
-       public Exception getException() {\r
-               return exception;\r
+       public String getExceptionMessage() {\r
+               return exceptionMessage;\r
        }\r
 \r
        public void setException(Exception exception) {\r
-               this.exception = exception;\r
+               if (exception == null)\r
+                       return;\r
+\r
+               this.exceptionMessage = exception.getMessage();\r
+\r
+               StringWriter writer = null;\r
+               StringReader reader = null;\r
+               try {\r
+                       writer = new StringWriter();\r
+                       exception.printStackTrace(new PrintWriter(writer));\r
+                       reader = new StringReader(writer.toString());\r
+                       exceptionStackLines = new Vector<String>(IOUtils.readLines(reader));\r
+               } catch (IOException e) {\r
+                       // silent\r
+               } finally {\r
+                       IOUtils.closeQuietly(writer);\r
+                       IOUtils.closeQuietly(reader);\r
+               }\r
        }\r
 \r
        @Override\r
@@ -65,18 +95,42 @@ public class SimpleResultPart implements TestResultPart, TestStatus {
                        buf.append("  ");\r
                }\r
                buf.append(message);\r
-               if (exception != null) {\r
-                       buf.append("(").append(exception.getMessage()).append(")");\r
-               }\r
                return buf.toString();\r
        }\r
 \r
+       /** @deprecated */\r
        Long getTid() {\r
                return tid;\r
        }\r
 \r
+       /** @deprecated */\r
        void setTid(Long tid) {\r
                this.tid = tid;\r
        }\r
 \r
+       public String getTestRunUuid() {\r
+               return testRunUuid;\r
+       }\r
+\r
+       /** For ORM */\r
+       public void setTestRunUuid(String testRunUuid) {\r
+               this.testRunUuid = testRunUuid;\r
+       }\r
+\r
+       public void notifyTestRun(TestRun testRun) {\r
+               testRunUuid = testRun.getUuid();\r
+       }\r
+\r
+       public List<String> getExceptionStackLines() {\r
+               return exceptionStackLines;\r
+       }\r
+\r
+       public void setExceptionStackLines(List<String> exceptionStackLines) {\r
+               this.exceptionStackLines = exceptionStackLines;\r
+       }\r
+\r
+       public void setExceptionMessage(String exceptionMessage) {\r
+               this.exceptionMessage = exceptionMessage;\r
+       }\r
+\r
 }\r
index a89ffe7370c718636bba02634db79ec8f55a0c22..c1d783a77618bfc7f9309d0dfc256393683a0a7f 100644 (file)
@@ -2,6 +2,7 @@ package org.argeo.slc.core.test;
 \r
 import java.util.Date;\r
 import java.util.List;\r
+import java.util.UUID;\r
 import java.util.Vector;\r
 \r
 import org.apache.commons.logging.Log;\r
@@ -15,16 +16,19 @@ import org.argeo.slc.core.SlcException;
 public class SimpleTestResult implements TestResult {\r
        private static Log log = LogFactory.getLog(SimpleTestResult.class);\r
 \r
+       private String uuid;\r
+       private String currentTestRunUuid;\r
+\r
        private Boolean throwError = true;\r
 \r
-       private TestResultId testResultId;\r
        private Date closeDate;\r
        private List<TestResultPart> parts = new Vector<TestResultPart>();\r
 \r
        public void addResultPart(TestResultPart part) {\r
                if (throwError && part.getStatus() == ERROR) {\r
-                       throw new SlcException("There was an error in the underlying test",\r
-                                       part.getException());\r
+                       throw new SlcException(\r
+                                       "There was an error in the underlying test: "\r
+                                                       + part.getExceptionMessage());\r
                }\r
                parts.add(part);\r
                if (log.isDebugEnabled())\r
@@ -36,15 +40,6 @@ public class SimpleTestResult implements TestResult {
                closeDate = new Date();\r
        }\r
 \r
-       public TestResultId getTestResultId() {\r
-               return testResultId;\r
-       }\r
-\r
-       /** Sets the test result id. */\r
-       public void setTestResultId(TestResultId testResultId) {\r
-               this.testResultId = testResultId;\r
-       }\r
-\r
        public List<TestResultPart> getParts() {\r
                return parts;\r
        }\r
@@ -57,4 +52,23 @@ public class SimpleTestResult implements TestResult {
                this.throwError = throwError;\r
        }\r
 \r
+       public void notifyTestRun(TestRun testRun) {\r
+               currentTestRunUuid = testRun.getUuid();\r
+       }\r
+\r
+       public String getUuid() {\r
+               if (uuid == null) {\r
+                       uuid = UUID.randomUUID().toString();\r
+               }\r
+               return uuid;\r
+       }\r
+\r
+       public void setUuid(String uuid) {\r
+               this.uuid = uuid;\r
+       }\r
+\r
+       public String getCurrentTestRunUuid() {\r
+               return currentTestRunUuid;\r
+       }\r
+\r
 }\r
index 684142e96e2c1368112d384e2e0700d5d16f2bcd..388e1f2dc69c25b227389dde6783a44b1e773fe6 100644 (file)
@@ -1,12 +1,19 @@
 package org.argeo.slc.core.test;\r
 \r
 import org.argeo.slc.core.deploy.DeployedSystem;\r
+import org.argeo.slc.core.process.SlcExecution;\r
+import org.argeo.slc.core.process.SlcExecutionStep;\r
 \r
 /**\r
  * A basic bean implementation of a <code>WritableTestRun</code>, holding\r
  * references to the various parts of a test run.\r
  */\r
 public class SimpleTestRun implements WritableTestRun, ExecutableTestRun {\r
+       private String uuid;\r
+\r
+       private String slcExecutionUuid;\r
+       private String slcExecutionStepUuid;\r
+\r
        private DeployedSystem deployedSystem;\r
        private TestData testData;\r
        private TestDefinition testDefinition;\r
@@ -14,11 +21,13 @@ public class SimpleTestRun implements WritableTestRun, ExecutableTestRun {
 \r
        /** Executes the underlying test definition. */\r
        public void execute() {\r
+               if (testResult != null)\r
+                       testResult.notifyTestRun(this);\r
                testDefinition.execute(this);\r
        }\r
 \r
        public <T extends DeployedSystem> T getDeployedSystem() {\r
-               return (T)deployedSystem;\r
+               return (T) deployedSystem;\r
        }\r
 \r
        public void setDeployedSystem(DeployedSystem deployedSystem) {\r
@@ -26,7 +35,7 @@ public class SimpleTestRun implements WritableTestRun, ExecutableTestRun {
        }\r
 \r
        public <T extends TestData> T getTestData() {\r
-               return (T)testData;\r
+               return (T) testData;\r
        }\r
 \r
        public void setTestData(TestData testData) {\r
@@ -34,7 +43,7 @@ public class SimpleTestRun implements WritableTestRun, ExecutableTestRun {
        }\r
 \r
        public <T extends TestDefinition> T getTestDefinition() {\r
-               return (T)testDefinition;\r
+               return (T) testDefinition;\r
        }\r
 \r
        public void setTestDefinition(TestDefinition testDefinition) {\r
@@ -42,11 +51,43 @@ public class SimpleTestRun implements WritableTestRun, ExecutableTestRun {
        }\r
 \r
        public <T extends TestResult> T getTestResult() {\r
-               return (T)testResult;\r
+               return (T) testResult;\r
        }\r
 \r
        public void setTestResult(TestResult testResult) {\r
                this.testResult = testResult;\r
        }\r
 \r
+       public String getUuid() {\r
+               return uuid;\r
+       }\r
+\r
+       public void setUuid(String uuid) {\r
+               this.uuid = uuid;\r
+       }\r
+\r
+       public String getSlcExecutionUuid() {\r
+               return slcExecutionUuid;\r
+       }\r
+\r
+       public void setSlcExecutionUuid(String slcExecutionUuid) {\r
+               this.slcExecutionUuid = slcExecutionUuid;\r
+       }\r
+\r
+       public String getSlcExecutionStepUuid() {\r
+               return slcExecutionStepUuid;\r
+       }\r
+\r
+       public void setSlcExecutionStepUuid(String slcExecutionStepUuid) {\r
+               this.slcExecutionStepUuid = slcExecutionStepUuid;\r
+       }\r
+\r
+       public void notifySlcExecution(SlcExecution slcExecution) {\r
+               slcExecutionUuid = slcExecution.getUuid();\r
+               SlcExecutionStep step = slcExecution.currentStep();\r
+               if (step != null) {\r
+                       slcExecutionStepUuid = step.getUuid();\r
+               }\r
+       }\r
+\r
 }\r
index f4dde542abb587c01ae7508ac151abd5546e5315..5aa1c619358adc5c252d70a11ef387028d9b8ac8 100644 (file)
@@ -3,7 +3,9 @@ package org.argeo.slc.core.test;
 import java.util.Date;\r
 \r
 /** The result of a test */\r
-public interface TestResult extends TestStatus {\r
+public interface TestResult extends TestStatus, TestRunAware {\r
+       public String getUuid();\r
+\r
        /** Adds a part of the result. */\r
        public void addResultPart(TestResultPart part);\r
 \r
index 8886413873ed9e7239610b4328e9e81054878673..c299da334c3bc9cd3ea3c97ddbcc1cd7248d0c08 100644 (file)
@@ -1,5 +1,7 @@
 package org.argeo.slc.core.test;\r
 \r
+import java.util.List;\r
+\r
 /**\r
  * Part of a test result.\r
  * \r
@@ -13,5 +15,7 @@ public interface TestResultPart {
        public String getMessage();\r
 \r
        /** The underlying <code>Exception</code>. Can be null. */\r
-       public Exception getException();\r
+       public String getExceptionMessage();\r
+\r
+       public List<String> getExceptionStackLines();\r
 }\r
index 9991e20c3bf65289a197ee9f67bf45de95a99bf8..5a4ac50b67f482c38148b27fea5f1466011eaaa4 100644 (file)
@@ -1,9 +1,13 @@
 package org.argeo.slc.core.test;\r
 \r
 import org.argeo.slc.core.deploy.DeployedSystem;\r
+import org.argeo.slc.core.process.SlcExecutionAware;\r
 \r
 /** The actual run of a test */\r
-public interface TestRun {\r
+public interface TestRun extends SlcExecutionAware{\r
+       /** Gets UUID */\r
+       public String getUuid();\r
+\r
        /** Gets the related test definition. */\r
        public <T extends TestDefinition> T getTestDefinition();\r
 \r
diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/TestRunAware.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/TestRunAware.java
new file mode 100644 (file)
index 0000000..6cca144
--- /dev/null
@@ -0,0 +1,7 @@
+package org.argeo.slc.core.test;\r
+\r
+public interface TestRunAware {\r
+       /** Notifies the current test run. */\r
+       public void notifyTestRun(TestRun testRun);\r
+\r
+}\r
diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/TestRunDescriptor.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/TestRunDescriptor.java
new file mode 100644 (file)
index 0000000..3e3d2be
--- /dev/null
@@ -0,0 +1,72 @@
+package org.argeo.slc.core.test;\r
+\r
+import org.argeo.slc.core.deploy.DeployedSystem;\r
+\r
+public class TestRunDescriptor {\r
+       private String testRunUuid;\r
+       private String slcExecutionUuid;\r
+       private String slcExecutionStepUuid;\r
+       private String testResultUuid;\r
+       private String deployedSytemId;\r
+\r
+       public TestRunDescriptor() {\r
+\r
+       }\r
+\r
+       public TestRunDescriptor(TestRun testRun) {\r
+               testRunUuid = testRun.getUuid();\r
+\r
+               if (testRun.getTestResult() != null)\r
+                       testResultUuid = testRun.<TestResult>getTestResult().getUuid();\r
+\r
+               if (testRun.getDeployedSystem() != null)\r
+                       deployedSytemId = testRun.<DeployedSystem>getDeployedSystem().getDeployedSystemId();\r
+\r
+               if (testRun instanceof SimpleTestRun) {\r
+                       slcExecutionUuid = ((SimpleTestRun) testRun).getSlcExecutionUuid();\r
+                       slcExecutionStepUuid = ((SimpleTestRun) testRun)\r
+                                       .getSlcExecutionStepUuid();\r
+               }\r
+       }\r
+\r
+       public String getTestRunUuid() {\r
+               return testRunUuid;\r
+       }\r
+\r
+       public void setTestRunUuid(String testRunUuid) {\r
+               this.testRunUuid = testRunUuid;\r
+       }\r
+\r
+       public String getSlcExecutionUuid() {\r
+               return slcExecutionUuid;\r
+       }\r
+\r
+       public void setSlcExecutionUuid(String slcExecutionUuid) {\r
+               this.slcExecutionUuid = slcExecutionUuid;\r
+       }\r
+\r
+       public String getSlcExecutionStepUuid() {\r
+               return slcExecutionStepUuid;\r
+       }\r
+\r
+       public void setSlcExecutionStepUuid(String slcExecutionStepUuid) {\r
+               this.slcExecutionStepUuid = slcExecutionStepUuid;\r
+       }\r
+\r
+       public String getTestResultUuid() {\r
+               return testResultUuid;\r
+       }\r
+\r
+       public void setTestResultUuid(String testResultUuid) {\r
+               this.testResultUuid = testResultUuid;\r
+       }\r
+\r
+       public String getDeployedSytemId() {\r
+               return deployedSytemId;\r
+       }\r
+\r
+       public void setDeployedSytemId(String deploymentId) {\r
+               this.deployedSytemId = deploymentId;\r
+       }\r
+\r
+}\r
index 138392bddd366fd91b45ec00ed219346cb2ba641..128da6abb7d4ddfcece7c89ce5ce821389fde875 100644 (file)
@@ -21,9 +21,6 @@ public class PartSubList {
 \r
        private List<TestResultPart> parts = new Vector<TestResultPart>();\r
 \r
-       private String slcExecutionUuid;\r
-       private String slcExecutionStepUuid;\r
-\r
        /** Gets the result parts. */\r
        public List<TestResultPart> getParts() {\r
                return parts;\r
@@ -42,22 +39,6 @@ public class PartSubList {
                this.tid = tid;\r
        }\r
 \r
-       public String getSlcExecutionUuid() {\r
-               return slcExecutionUuid;\r
-       }\r
-\r
-       public void setSlcExecutionUuid(String slcExecutionUuid) {\r
-               this.slcExecutionUuid = slcExecutionUuid;\r
-       }\r
-\r
-       public String getSlcExecutionStepUuid() {\r
-               return slcExecutionStepUuid;\r
-       }\r
-\r
-       public void setSlcExecutionStepUuid(String slcExecutionStepUuid) {\r
-               this.slcExecutionStepUuid = slcExecutionStepUuid;\r
-       }\r
-\r
        public Boolean getIsPassed() {\r
                for (TestResultPart part : parts) {\r
                        if (part.getStatus() != TestStatus.PASSED) {\r
index 8da3e7d5a2dde3bd932a5175b592cbac6d3c77a8..9b807c904be55023d0ab614273c3a442c51e629d 100644 (file)
@@ -10,9 +10,6 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;\r
 \r
 import org.argeo.slc.core.SlcException;\r
-import org.argeo.slc.core.process.SlcExecution;\r
-import org.argeo.slc.core.process.SlcExecutionAware;\r
-import org.argeo.slc.core.process.SlcExecutionStep;\r
 import org.argeo.slc.core.structure.StructureAware;\r
 import org.argeo.slc.core.structure.StructureElement;\r
 import org.argeo.slc.core.structure.StructureRegistry;\r
@@ -20,20 +17,20 @@ import org.argeo.slc.core.structure.tree.TreeSPath;
 import org.argeo.slc.core.test.TestResult;\r
 import org.argeo.slc.core.test.TestResultListener;\r
 import org.argeo.slc.core.test.TestResultPart;\r
+import org.argeo.slc.core.test.TestRun;\r
+import org.argeo.slc.core.test.TestRunAware;\r
 \r
 /**\r
  * Complex implementation of a test result compatible with a tree based\r
  * structure.\r
  */\r
-public class TreeTestResult implements TestResult, StructureAware<TreeSPath>,\r
-               SlcExecutionAware {\r
+public class TreeTestResult implements TestResult, StructureAware<TreeSPath> {\r
        private Log log = LogFactory.getLog(TreeTestResult.class);\r
 \r
        private List<TestResultListener> listeners = new Vector<TestResultListener>();\r
 \r
        private TreeSPath currentPath;\r
-       private String currentSlcExecutionUuid;\r
-       private String currentSlcExecutionStepUuid;\r
+       private TestRun currentTestRun;\r
 \r
        private Date closeDate;\r
 \r
@@ -56,10 +53,11 @@ public class TreeTestResult implements TestResult, StructureAware<TreeSPath>,
                PartSubList subList = resultParts.get(currentPath);\r
                if (subList == null) {\r
                        subList = new PartSubList();\r
-                       subList.setSlcExecutionUuid(currentSlcExecutionUuid);\r
-                       subList.setSlcExecutionStepUuid(currentSlcExecutionStepUuid);\r
                        resultParts.put(currentPath, subList);\r
                }\r
+               if (part instanceof TestRunAware && currentTestRun != null) {\r
+                       ((TestRunAware) part).notifyTestRun(currentTestRun);\r
+               }\r
                subList.getParts().add(part);\r
 \r
                // notify listeners\r
@@ -133,12 +131,8 @@ public class TreeTestResult implements TestResult, StructureAware<TreeSPath>,
                this.closeDate = closeDate;\r
        }\r
 \r
-       public void notifySlcExecution(SlcExecution slcExecution) {\r
-               currentSlcExecutionUuid = slcExecution.getUuid();\r
-               SlcExecutionStep step = slcExecution.currentStep();\r
-               if (step != null) {\r
-                       currentSlcExecutionStepUuid = step.getUuid();\r
-               }\r
+       public void notifyTestRun(TestRun testRun) {\r
+               currentTestRun = testRun;\r
        }\r
 \r
        public SortedMap<TreeSPath, StructureElement> getElements() {\r
@@ -157,4 +151,21 @@ public class TreeTestResult implements TestResult, StructureAware<TreeSPath>,
                this.uuid = uuid;\r
        }\r
 \r
+       public SortedMap<TreeSPath, StructureElement> getRelatedElements(\r
+                       TreeSPath path) {\r
+               SortedMap<TreeSPath, StructureElement> relatedElements = new TreeMap<TreeSPath, StructureElement>();\r
+               List<TreeSPath> hierarchy = path.getHierarchyAsList();\r
+               for (TreeSPath currPath : elements.keySet()) {\r
+                       if (hierarchy.contains(currPath)) {\r
+                               relatedElements.put(currPath, elements.get(currPath));\r
+                       }\r
+               }\r
+               return relatedElements;\r
+       }\r
+\r
+       public TestRun getCurrentTestRun() {\r
+               return currentTestRun;\r
+       }\r
+       \r
+       \r
 }\r
index 832d8655457ec55929bc4b469d2dc947cff3686a..a0736fdbac0e45ace6c45a8d6f3401e9d20a057e 100644 (file)
@@ -16,7 +16,7 @@ import org.argeo.slc.core.test.TestStatus;
 public class TreeTestResultLogger extends AsynchronousTreeTestResultListener {\r
 \r
        private static Log log = LogFactory.getLog(TreeTestResultLogger.class);\r
-       \r
+\r
        public TreeTestResultLogger() {\r
                super(true);\r
        }\r
@@ -31,7 +31,7 @@ public class TreeTestResultLogger extends AsynchronousTreeTestResultListener {
                } else if (part.getStatus().equals(TestStatus.FAILED)) {\r
                        log.warn(msg);\r
                } else if (part.getStatus().equals(TestStatus.ERROR)) {\r
-                       log.error(msg, ((SimpleResultPart) part).getException());\r
+                       log.error(msg + ((SimpleResultPart) part).getExceptionMessage());\r
                } else {\r
                        log.error("Unknow test status: " + msg);\r
                }\r
index 31560541dc9fd3e365c6de319581062c58f1bdbd..69bba492e40caa7a7d488e41d5321daaee0b58cd 100644 (file)
@@ -40,7 +40,7 @@ class ResultPage {
         * @param result\r
         *            the result to dump\r
         */\r
-       protected void generate(StructureRegistry registry) {\r
+       protected void generate(StructureRegistry<TreeSPath> registry) {\r
                StringBuffer buf = new StringBuffer("");\r
                buf.append("<html>\n");\r
                buf.append("<header>");\r
@@ -53,8 +53,7 @@ class ResultPage {
 \r
                // Header\r
                buf.append("<a name=\"top\"/>\n");\r
-               buf.append("<h1>Result #").append(result.getUuid()).append(\r
-                               "</h1>\n");\r
+               buf.append("<h1>Result #").append(result.getUuid()).append("</h1>\n");\r
                Date closeDate = result.getCloseDate();\r
                if (closeDate == null) {\r
                        buf.append("[Not closed]");\r
@@ -78,7 +77,8 @@ class ResultPage {
                }\r
        }\r
 \r
-       private void generateToc(StringBuffer buf, StructureRegistry registry) {\r
+       private void generateToc(StringBuffer buf,\r
+                       StructureRegistry<TreeSPath> registry) {\r
                buf.append("<h2>Overview</h2>\n");\r
                SortedMap<TreeSPath, Integer> toc = new TreeMap<TreeSPath, Integer>();\r
                for (TreeSPath path : result.getResultParts().keySet()) {\r
@@ -128,7 +128,8 @@ class ResultPage {
                buf.append("<hr/>\n");\r
        }\r
 \r
-       private void generatePartsList(StringBuffer buf, StructureRegistry registry) {\r
+       private void generatePartsList(StringBuffer buf,\r
+                       StructureRegistry<TreeSPath> registry) {\r
                for (TreeSPath path : result.getResultParts().keySet()) {\r
                        buf.append("<p>\n");\r
                        buf.append("<a name=\"").append(anchor(path)).append("\"></a>");\r
@@ -138,14 +139,12 @@ class ResultPage {
 \r
                        PartSubList subList = (PartSubList) result.getResultParts().get(\r
                                        path);\r
-                       buf.append("Related SLC execution:").append(\r
-                                       subList.getSlcExecutionUuid()).append("<br/>\n");\r
-                       buf.append("Related SLC execution step:").append(\r
-                                       subList.getSlcExecutionUuid()).append("<br/>\n");\r
                        buf.append("<table border=0>\n");\r
                        int displayedIndex = 1;// for display only\r
                        for (TestResultPart part : subList.getParts()) {\r
                                SimpleResultPart sPart = (SimpleResultPart) part;\r
+                               buf.append("Related Test Run Id:").append(\r
+                                               sPart.getTestRunUuid()).append("<br/>\n");\r
                                String clss = "";\r
                                if (sPart.getStatus().equals(TestStatus.PASSED)) {\r
                                        clss = "passed";\r
@@ -161,15 +160,7 @@ class ResultPage {
                                if (sPart.getStatus().equals(TestStatus.ERROR)) {\r
                                        buf\r
                                                        .append("<p><b>An unexpected error prevented the test to run properly.</b>");\r
-                                       Throwable exception = sPart.getException();\r
-                                       if (exception != null) {\r
-                                               StringWriter writer = new StringWriter();\r
-                                               exception.printStackTrace(new PrintWriter(writer));\r
-                                               buf.append("<br/><pre>");\r
-                                               buf.append(writer.toString());\r
-                                               buf.append("</pre>");\r
-                                               IOUtils.closeQuietly(writer);\r
-                                       }\r
+                                       buf.append(sPart.getExceptionMessage());\r
                                        buf.append("</p>");\r
                                }\r
                                buf.append("</td>");\r
@@ -202,8 +193,8 @@ class ResultPage {
                return path.getAsUniqueString().replace(path.getSeparator(), '_');\r
        }\r
 \r
-       private void describedPath(TreeSPath path, StructureRegistry registry,\r
-                       StringBuffer buf) {\r
+       private void describedPath(TreeSPath path,\r
+                       StructureRegistry<TreeSPath> registry, StringBuffer buf) {\r
                // StringBuffer buf = new StringBuffer("");\r
                if (path.getParent() != null) {\r
                        describedPath(path.getParent(), registry, buf);\r
diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/msg/test/tree/CreateTreeTestResultRequest.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/msg/test/tree/CreateTreeTestResultRequest.java
new file mode 100644 (file)
index 0000000..156f3b3
--- /dev/null
@@ -0,0 +1,15 @@
+package org.argeo.slc.msg.test.tree;\r
+\r
+import org.argeo.slc.core.test.tree.TreeTestResult;\r
+\r
+public class CreateTreeTestResultRequest {\r
+       private TreeTestResult treeTestResult;\r
+\r
+       public TreeTestResult getTreeTestResult() {\r
+               return treeTestResult;\r
+       }\r
+\r
+       public void setTreeTestResult(TreeTestResult treeTestResult) {\r
+               this.treeTestResult = treeTestResult;\r
+       }\r
+}\r
diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/msg/test/tree/ResultPartRequest.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/msg/test/tree/ResultPartRequest.java
new file mode 100644 (file)
index 0000000..88f4f9f
--- /dev/null
@@ -0,0 +1,74 @@
+package org.argeo.slc.msg.test.tree;\r
+\r
+import java.util.Map;\r
+\r
+import org.argeo.slc.core.structure.StructureElement;\r
+import org.argeo.slc.core.structure.tree.TreeSPath;\r
+import org.argeo.slc.core.test.SimpleResultPart;\r
+import org.argeo.slc.core.test.TestResultPart;\r
+import org.argeo.slc.core.test.TestRunDescriptor;\r
+import org.argeo.slc.core.test.tree.TreeTestResult;\r
+\r
+public class ResultPartRequest {\r
+       private String resultUuid;\r
+       private TestResultPart resultPart;\r
+       private TreeSPath path;\r
+       private Map<TreeSPath, StructureElement> relatedElements;\r
+       private TestRunDescriptor testRunDescriptor;\r
+\r
+       public ResultPartRequest() {\r
+\r
+       }\r
+\r
+       public ResultPartRequest(TreeTestResult ttr, TreeSPath path,\r
+                       TestResultPart resultPart) {\r
+               resultUuid = ttr.getUuid();\r
+               this.resultPart = resultPart;\r
+               this.path = path;\r
+               relatedElements = ttr.getRelatedElements(path);\r
+               if (ttr.getCurrentTestRun() != null)\r
+                       testRunDescriptor = new TestRunDescriptor(ttr.getCurrentTestRun());\r
+       }\r
+\r
+       public String getResultUuid() {\r
+               return resultUuid;\r
+       }\r
+\r
+       public void setResultUuid(String resultUuid) {\r
+               this.resultUuid = resultUuid;\r
+       }\r
+\r
+       public TestResultPart getResultPart() {\r
+               return resultPart;\r
+       }\r
+\r
+       public void setResultPart(TestResultPart resultPart) {\r
+               this.resultPart = resultPart;\r
+       }\r
+\r
+       public TreeSPath getPath() {\r
+               return path;\r
+       }\r
+\r
+       public void setPath(TreeSPath path) {\r
+               this.path = path;\r
+       }\r
+\r
+       public TestRunDescriptor getTestRunDescriptor() {\r
+               return testRunDescriptor;\r
+       }\r
+\r
+       public void setTestRunDescriptor(TestRunDescriptor testRunDescriptor) {\r
+               this.testRunDescriptor = testRunDescriptor;\r
+       }\r
+\r
+       public Map<TreeSPath, StructureElement> getRelatedElements() {\r
+               return relatedElements;\r
+       }\r
+\r
+       public void setRelatedElements(\r
+                       Map<TreeSPath, StructureElement> relatedElements) {\r
+               this.relatedElements = relatedElements;\r
+       }\r
+\r
+}\r
diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/msg/test/tree/ResultPartsRequest.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/msg/test/tree/ResultPartsRequest.java
deleted file mode 100644 (file)
index 542620d..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.argeo.slc.msg.test.tree;\r
-\r
-import java.util.Map;\r
-import java.util.TreeMap;\r
-\r
-import org.argeo.slc.core.structure.StructureElement;\r
-import org.argeo.slc.core.structure.tree.TreeSPath;\r
-import org.argeo.slc.core.test.tree.PartSubList;\r
-\r
-public class ResultPartsRequest {\r
-       private String resultUuid;\r
-       private Map<TreeSPath, PartSubList> resultParts = new TreeMap<TreeSPath, PartSubList>();\r
-       private Map<TreeSPath, StructureElement> elements = new TreeMap<TreeSPath, StructureElement>();\r
-\r
-       public String getResultUuid() {\r
-               return resultUuid;\r
-       }\r
-\r
-       public void setResultUuid(String resultUuid) {\r
-               this.resultUuid = resultUuid;\r
-       }\r
-\r
-       public Map<TreeSPath, PartSubList> getResultParts() {\r
-               return resultParts;\r
-       }\r
-\r
-       public void setResultParts(Map<TreeSPath, PartSubList> resultParts) {\r
-               this.resultParts = resultParts;\r
-       }\r
-\r
-       public Map<TreeSPath, StructureElement> getElements() {\r
-               return elements;\r
-       }\r
-\r
-       public void setElements(Map<TreeSPath, StructureElement> elements) {\r
-               this.elements = elements;\r
-       }\r
-}\r
diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/msg/test/tree/TreeTestResultRequest.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/msg/test/tree/TreeTestResultRequest.java
deleted file mode 100644 (file)
index c550541..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-package org.argeo.slc.msg.test.tree;\r
-\r
-import org.argeo.slc.core.test.tree.TreeTestResult;\r
-\r
-public class TreeTestResultRequest {\r
-       private TreeTestResult treeTestResult;\r
-\r
-       public TreeTestResult getTreeTestResult() {\r
-               return treeTestResult;\r
-       }\r
-\r
-       public void setTreeTestResult(TreeTestResult treeTestResult) {\r
-               this.treeTestResult = treeTestResult;\r
-       }\r
-}\r
index 953d2ecaf67b1895ac0883c02314bb9c5f53eab3..fc9b656867246ee5610ab7205c7e12d61864f040 100644 (file)
@@ -7,9 +7,9 @@ import org.springframework.beans.factory.ListableBeanFactory;
 public class SpringUtils {\r
        public static <T> T loadSingleFromContext(ListableBeanFactory context,\r
                        Class<T> clss) {\r
-               Map<String, T> listeners = context.getBeansOfType(clss);\r
-               if (listeners.size() == 1) {\r
-                       return listeners.values().iterator().next();\r
+               Map<String, T> beans = context.getBeansOfType(clss);\r
+               if (beans.size() == 1) {\r
+                       return beans.values().iterator().next();\r
                } else {\r
                        return null;\r
                }\r
index f0af1086ea977209e9c9def97e2a8c59d3439031..4ad916d57018f671f5554a3aaab9ea9243118134 100644 (file)
@@ -1,7 +1,5 @@
 package org.argeo.slc.unit;\r
 \r
-import java.util.Map;\r
-\r
 import junit.framework.TestCase;\r
 \r
 import org.springframework.context.ApplicationContext;\r
@@ -11,7 +9,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;\r
 \r
 import org.argeo.slc.core.SlcException;\r
-import org.argeo.slc.core.process.SlcExecution;\r
+import org.argeo.slc.spring.SpringUtils;\r
 \r
 /** Helper for tests using a Spring application co,text. */\r
 public abstract class AbstractSpringTestCase extends TestCase {\r
@@ -37,12 +35,12 @@ public abstract class AbstractSpringTestCase extends TestCase {
        }\r
 \r
        protected <T> T getBean(Class<? extends T> clss) {\r
-               Map<String, T> map = getContext().getBeansOfType(clss);\r
-               if (map.size() == 1) {\r
-                       return map.values().iterator().next();\r
-               } else {\r
+               T bean = SpringUtils.loadSingleFromContext(getContext(), clss);\r
+               if (bean == null) {\r
                        throw new SlcException("Cannot retrieve a unique bean of type "\r
                                        + clss);\r
+               } else {\r
+                       return bean;\r
                }\r
        }\r
 \r
index 237811ebee583ba94331d3df018e2d81c170aeb7..cecb57cbeb91db190fc75b8e11abdb3dab5b62d6 100644 (file)
@@ -1,5 +1,7 @@
 package org.argeo.slc.unit.test.tree;\r
 \r
+import java.util.List;\r
+\r
 import static junit.framework.Assert.assertEquals;\r
 import static junit.framework.Assert.assertNotNull;\r
 import static junit.framework.Assert.assertNull;\r
@@ -61,20 +63,6 @@ public class UnitTestTreeUtil {
 \r
        public static void assertPartSubList(PartSubList lstExpected,\r
                        PartSubList lstReached) {\r
-               if (lstExpected.getSlcExecutionUuid() == null) {\r
-                       assertNull(lstReached.getSlcExecutionUuid());\r
-               } else {\r
-                       assertEquals(lstExpected.getSlcExecutionUuid(), lstReached\r
-                                       .getSlcExecutionUuid());\r
-               }\r
-\r
-               if (lstExpected.getSlcExecutionStepUuid() == null) {\r
-                       assertNull(lstReached.getSlcExecutionStepUuid());\r
-               } else {\r
-                       assertEquals(lstExpected.getSlcExecutionStepUuid(), lstReached\r
-                                       .getSlcExecutionStepUuid());\r
-               }\r
-\r
                assertEquals(lstExpected.getParts().size(), lstReached.getParts()\r
                                .size());\r
                for (int i = 0; i < lstExpected.getParts().size(); i++) {\r
@@ -101,25 +89,47 @@ public class UnitTestTreeUtil {
                        fail("Not enough parts.");\r
                }\r
                SimpleResultPart part = (SimpleResultPart) list.getParts().get(index);\r
-               assertPart(part, status, message, null);\r
+               assertPart(part, status, message, null, null, part.getTestRunUuid());\r
        }\r
 \r
        public static void assertPart(TestResultPart expected,\r
                        TestResultPart reached) {\r
+               String expectedTestRunUuid = null;\r
+               if (expected instanceof SimpleResultPart) {\r
+                       expectedTestRunUuid = ((SimpleResultPart) expected)\r
+                                       .getTestRunUuid();\r
+               }\r
+\r
                assertPart(reached, expected.getStatus(), expected.getMessage(),\r
-                               expected.getException());\r
+                               expected.getExceptionMessage(), expected\r
+                                               .getExceptionStackLines(), expectedTestRunUuid);\r
        }\r
 \r
        /** Assert one part of a tree test result. */\r
        private static void assertPart(TestResultPart part, Integer status,\r
-                       String message, Exception exception) {\r
+                       String message, String exceptionDescription,\r
+                       List<String> stackLines, String expectedTestRunUuid) {\r
                assertEquals(status, part.getStatus());\r
                assertEquals(message, part.getMessage());\r
-               if (exception == null) {\r
-                       assertNull(part.getException());\r
+               if (exceptionDescription == null) {\r
+                       assertNull(part.getExceptionMessage());\r
                } else {\r
-                       assertEquals(exception, part.getException());\r
+                       assertEquals(exceptionDescription, part.getExceptionMessage());\r
+                       assertEquals(stackLines.size(), part.getExceptionStackLines()\r
+                                       .size());\r
                }\r
+\r
+               if (expectedTestRunUuid != null) {\r
+                       SimpleResultPart reachedPart = (SimpleResultPart) part;\r
+                       assertNotNull(reachedPart.getTestRunUuid());\r
+                       assertEquals(expectedTestRunUuid, reachedPart.getTestRunUuid());\r
+               } else {\r
+                       if (part instanceof SimpleResultPart) {\r
+                               assertNull(((SimpleResultPart) part).getTestRunUuid());\r
+                       }\r
+\r
+               }\r
+\r
        }\r
 \r
        /** Makes sure this is a singleton */\r
diff --git a/org.argeo.slc.core/src/main/resources/org/argeo/slc/castor/mapping.xml b/org.argeo.slc.core/src/main/resources/org/argeo/slc/castor/mapping.xml
new file mode 100644 (file)
index 0000000..92c2c71
--- /dev/null
@@ -0,0 +1,41 @@
+<?xml version="1.0"?>\r
+\r
+<mapping>\r
+       <description>Mapping of generic types</description>\r
+\r
+       <class name="java.lang.Exception" auto-complete="false">\r
+               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+                       ns-prefix="slc" />\r
+               <field name="message" type="string" set-method="%1"\r
+                       get-method="getMessage">\r
+                       <bind-xml node="attribute" />\r
+               </field>\r
+               <field name="stackTrace" collection="array"\r
+                       type="java.lang.StackTraceElement">\r
+                       <bind-xml auto-naming="deriveByClass"\r
+                               location="stack-trace" />\r
+               </field>\r
+       </class>\r
+\r
+       <class name="java.lang.StackTraceElement" auto-complete="false"\r
+               verify-constructable="false">\r
+               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+                       ns-prefix="slc" />\r
+               <field name="declaringClass" type="string" set-method="%1"\r
+                       get-method="getClassName">\r
+                       <bind-xml node="attribute" />\r
+               </field>\r
+               <field name="methodName" type="string" set-method="%2"\r
+                       get-method="getMethodName">\r
+                       <bind-xml node="attribute" />\r
+               </field>\r
+               <field name="fileName" type="string" set-method="%3"\r
+                       get-method="getFileName">\r
+                       <bind-xml node="attribute" />\r
+               </field>\r
+               <field name="lineNumber" type="integer" set-method="%4"\r
+                       get-method="getLineNumber">\r
+                       <bind-xml node="attribute" />\r
+               </field>\r
+       </class>\r
+</mapping>
\ No newline at end of file
diff --git a/org.argeo.slc.core/src/main/resources/org/argeo/slc/castor/msg/mapping.xml b/org.argeo.slc.core/src/main/resources/org/argeo/slc/castor/msg/mapping.xml
new file mode 100644 (file)
index 0000000..b439e06
--- /dev/null
@@ -0,0 +1,64 @@
+<?xml version="1.0"?>\r
+\r
+<mapping>\r
+       <description>Message objects XML mapping</description>\r
+\r
+       <!-- TESTS -->\r
+       <class\r
+               name="org.argeo.slc.msg.test.tree.CreateTreeTestResultRequest">\r
+               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+                       ns-prefix="slc" />\r
+               <field name="treeTestResult"\r
+                       type="org.argeo.slc.core.test.tree.TreeTestResult" />\r
+       </class>\r
+\r
+       <class name="org.argeo.slc.msg.test.tree.ResultPartRequest">\r
+               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+                       ns-prefix="slc" />\r
+               <field name="resultUuid" />\r
+               <field name="resultPart">\r
+                       <bind-xml auto-naming="deriveByClass" />\r
+               </field>\r
+               <field name="relatedElements" collection="map">\r
+                       <bind-xml name="element" location="related-elements">\r
+                               <class name="org.exolab.castor.mapping.MapItem">\r
+                                       <map-to\r
+                                               ns-uri="http://argeo.org/projects/slc/schemas" ns-prefix="slc" />\r
+                                       <field name="key"\r
+                                               type="org.argeo.slc.core.structure.tree.TreeSPath"\r
+                                               handler="org.argeo.slc.castor.structure.tree.TreeSPathFieldHandler">\r
+                                               <bind-xml name="path" node="attribute" />\r
+                                       </field>\r
+                                       <field name="value"\r
+                                               type="org.argeo.slc.core.structure.SimpleSElement">\r
+                                               <bind-xml auto-naming="deriveByClass" />\r
+                                       </field>\r
+                               </class>\r
+                       </bind-xml>\r
+               </field>\r
+               <field name="path">\r
+                       <bind-xml auto-naming="deriveByClass" />\r
+               </field>\r
+               <field name="testRunDescriptor" />\r
+       </class>\r
+\r
+       <!-- PROCESS -->\r
+       <class name="org.argeo.slc.msg.process.SlcExecutionStepsRequest">\r
+               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+                       ns-prefix="slc" />\r
+               <field name="slcExecutionUuid" />\r
+               <field name="steps" collection="vector"\r
+                       type="org.argeo.slc.core.process.SlcExecutionStep">\r
+                       <bind-xml auto-naming="deriveByClass" location="steps" />\r
+               </field>\r
+       </class>\r
+\r
+       <class name="org.argeo.slc.msg.process.SlcExecutionRequest">\r
+               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+                       ns-prefix="slc" />\r
+               <field name="slcExecution"\r
+                       type="org.argeo.slc.core.process.SlcExecution" />\r
+       </class>\r
+\r
+\r
+</mapping>
\ No newline at end of file
index b02c16fddb6a97be382c0411f5ea6c19483e854a..4e04c5c4933c7192f198b0270695a50a1b6ce600 100644 (file)
@@ -5,23 +5,6 @@
 <mapping>\r
        <description>Process objects XML mapping</description>\r
 \r
-       <class name="org.argeo.slc.msg.process.SlcExecutionStepsRequest">\r
-               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
-                       ns-prefix="slc" />\r
-               <field name="slcExecutionUuid" />\r
-               <field name="steps" collection="vector"\r
-                       type="org.argeo.slc.core.process.SlcExecutionStep">\r
-                       <bind-xml auto-naming="deriveByClass" location="steps" />\r
-               </field>\r
-       </class>\r
-\r
-       <class name="org.argeo.slc.msg.process.SlcExecutionRequest">\r
-               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
-                       ns-prefix="slc" />\r
-               <field name="slcExecution"\r
-                       type="org.argeo.slc.core.process.SlcExecution" />\r
-       </class>\r
-\r
        <class name="org.argeo.slc.core.process.SlcExecution">\r
                <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
                        ns-prefix="slc" />\r
                        <bind-xml name="log-line" location="log-lines" />\r
                </field>\r
        </class>\r
+       \r
+               <!-- PROCESS -->\r
+       <class name="org.argeo.slc.msg.process.SlcExecutionStepsRequest">\r
+               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+                       ns-prefix="slc" />\r
+               <field name="slcExecutionUuid" />\r
+               <field name="steps" collection="vector"\r
+                       type="org.argeo.slc.core.process.SlcExecutionStep">\r
+                       <bind-xml auto-naming="deriveByClass" location="steps" />\r
+               </field>\r
+       </class>\r
+\r
+       <class name="org.argeo.slc.msg.process.SlcExecutionRequest">\r
+               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+                       ns-prefix="slc" />\r
+               <field name="slcExecution"\r
+                       type="org.argeo.slc.core.process.SlcExecution" />\r
+       </class>\r
+\r
+\r
+       \r
 </mapping>
\ No newline at end of file
index d7c089f8feaae47833f9cb8dd43896961581e1a5..30e1cc12753a5ec1f72e3c0ba0ed3ad2fbd2e6e8 100644 (file)
@@ -11,7 +11,7 @@
                                        classpath:org/argeo/slc/castor/process/mapping.xml\r
                                </value>\r
                                <value>\r
-                                       classpath:org/argeo/slc/castor/test/tree/mapping.xml\r
+                                       classpath:org/argeo/slc/castor/test/mapping.xml\r
                                </value>\r
                        </list>\r
                </property>\r
diff --git a/org.argeo.slc.core/src/main/resources/org/argeo/slc/castor/structure/mapping.xml b/org.argeo.slc.core/src/main/resources/org/argeo/slc/castor/structure/mapping.xml
new file mode 100644 (file)
index 0000000..3e20025
--- /dev/null
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>\r
+\r
+<mapping>\r
+       <description>Structure related objects XML mapping</description>\r
+\r
+       <class name="org.argeo.slc.core.structure.tree.TreeSPath"\r
+               auto-complete="false">\r
+               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+                       ns-prefix="slc" />\r
+               <field name="asUniqueString" type="string">\r
+                       <bind-xml node="attribute" />\r
+               </field>\r
+       </class>\r
+\r
+       <class name="org.argeo.slc.core.structure.SimpleSElement"\r
+               auto-complete="false">\r
+               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+                       ns-prefix="slc" />\r
+               <field name="label" type="string" />\r
+               <field name="tags" collection="map">\r
+                       <bind-xml name="tag" location="tags">\r
+                               <class name="org.exolab.castor.mapping.MapItem">\r
+                                       <map-to\r
+                                               ns-uri="http://argeo.org/projects/slc/schemas" ns-prefix="slc" />\r
+                                       <field name="key" type="string">\r
+                                               <bind-xml name="name" node="attribute" />\r
+                                       </field>\r
+                                       <field name="value" type="string">\r
+                                               <bind-xml name="tag-value" />\r
+                                       </field>\r
+                               </class>\r
+                       </bind-xml>\r
+               </field>\r
+       </class>\r
+</mapping>
\ No newline at end of file
diff --git a/org.argeo.slc.core/src/main/resources/org/argeo/slc/castor/test/mapping.xml b/org.argeo.slc.core/src/main/resources/org/argeo/slc/castor/test/mapping.xml
new file mode 100644 (file)
index 0000000..0e52293
--- /dev/null
@@ -0,0 +1,155 @@
+<?xml version="1.0"?>\r
+\r
+<mapping>\r
+       <description>Test objects XML mapping</description>\r
+\r
+       <class name="org.argeo.slc.core.test.TestRunDescriptor"\r
+               auto-complete="false">\r
+               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+                       ns-prefix="slc" />\r
+               <field name="testRunUuid"/>\r
+               <field name="slcExecutionUuid"/>\r
+               <field name="slcExecutionStepUuid"/>\r
+               <field name="testResultUuid"/>\r
+               <field name="deployedSytemId"/>\r
+       </class>\r
+\r
+       <class name="org.argeo.slc.core.test.tree.TreeTestResult"\r
+               auto-complete="false">\r
+               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+                       ns-prefix="slc" />\r
+               <field name="uuid" type="string">\r
+                       <bind-xml name="uuid" node="attribute" />\r
+               </field>\r
+               <field name="closeDate" />\r
+               <field name="resultParts" collection="map">\r
+                       <bind-xml name="result-part" location="result-parts">\r
+                               <class name="org.exolab.castor.mapping.MapItem">\r
+                                       <map-to\r
+                                               ns-uri="http://argeo.org/projects/slc/schemas" ns-prefix="slc" />\r
+                                       <field name="key"\r
+                                               type="org.argeo.slc.core.structure.tree.TreeSPath"\r
+                                               handler="org.argeo.slc.castor.structure.tree.TreeSPathFieldHandler">\r
+                                               <bind-xml name="path" node="attribute" />\r
+                                       </field>\r
+                                       <field name="value"\r
+                                               type="org.argeo.slc.core.test.tree.PartSubList">\r
+                                               <bind-xml name="part-sub-list" />\r
+                                       </field>\r
+                               </class>\r
+                       </bind-xml>\r
+               </field>\r
+               <field name="elements" collection="map">\r
+                       <bind-xml name="element" location="elements">\r
+                               <class name="org.exolab.castor.mapping.MapItem">\r
+                                       <map-to\r
+                                               ns-uri="http://argeo.org/projects/slc/schemas" ns-prefix="slc" />\r
+                                       <field name="key"\r
+                                               type="org.argeo.slc.core.structure.tree.TreeSPath"\r
+                                               handler="org.argeo.slc.castor.structure.tree.TreeSPathFieldHandler">\r
+                                               <bind-xml name="path" node="attribute" />\r
+                                       </field>\r
+                                       <field name="value"\r
+                                               type="org.argeo.slc.core.structure.SimpleSElement">\r
+                                               <bind-xml auto-naming="deriveByClass" />\r
+                                       </field>\r
+                               </class>\r
+                       </bind-xml>\r
+               </field>\r
+       </class>\r
+\r
+       <class name="org.argeo.slc.core.test.tree.PartSubList"\r
+               auto-complete="false">\r
+               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+                       ns-prefix="slc" />\r
+               <field name="parts" collection="vector"\r
+                       type="org.argeo.slc.core.test.SimpleResultPart">\r
+                       <bind-xml auto-naming="deriveByClass" location="parts" />\r
+               </field>\r
+       </class>\r
+\r
+       <class name="org.argeo.slc.core.test.SimpleResultPart"\r
+               auto-complete="false">\r
+               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+                       ns-prefix="slc" />\r
+               <field name="testRunUuid" type="string" />\r
+               <field name="message" type="string" />\r
+               <field name="status" type="string"\r
+                       handler="org.argeo.slc.castor.test.tree.StatusFieldHandler" />\r
+               <field name="exceptionMessage" type="string" />\r
+               <field name="exceptionStackLines" collection="vector"\r
+                       type="string">\r
+                       <bind-xml name="stack-line" location="stack-lines" />\r
+               </field>\r
+       </class>\r
+       \r
+               <!-- TESTS -->\r
+       <class\r
+               name="org.argeo.slc.msg.test.tree.CreateTreeTestResultRequest">\r
+               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+                       ns-prefix="slc" />\r
+               <field name="treeTestResult"\r
+                       type="org.argeo.slc.core.test.tree.TreeTestResult" />\r
+       </class>\r
+\r
+       <class name="org.argeo.slc.msg.test.tree.ResultPartRequest">\r
+               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+                       ns-prefix="slc" />\r
+               <field name="resultUuid" />\r
+               <field name="resultPart">\r
+                       <bind-xml auto-naming="deriveByClass" />\r
+               </field>\r
+               <field name="relatedElements" collection="map">\r
+                       <bind-xml name="element" location="related-elements">\r
+                               <class name="org.exolab.castor.mapping.MapItem">\r
+                                       <map-to\r
+                                               ns-uri="http://argeo.org/projects/slc/schemas" ns-prefix="slc" />\r
+                                       <field name="key"\r
+                                               type="org.argeo.slc.core.structure.tree.TreeSPath"\r
+                                               handler="org.argeo.slc.castor.structure.tree.TreeSPathFieldHandler">\r
+                                               <bind-xml name="path" node="attribute" />\r
+                                       </field>\r
+                                       <field name="value"\r
+                                               type="org.argeo.slc.core.structure.SimpleSElement">\r
+                                               <bind-xml auto-naming="deriveByClass" />\r
+                                       </field>\r
+                               </class>\r
+                       </bind-xml>\r
+               </field>\r
+               <field name="path">\r
+                       <bind-xml auto-naming="deriveByClass" />\r
+               </field>\r
+               <field name="testRunDescriptor" />\r
+       </class>\r
+\r
+               <class name="org.argeo.slc.core.structure.tree.TreeSPath"\r
+               auto-complete="false">\r
+               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+                       ns-prefix="slc" />\r
+               <field name="asUniqueString" type="string">\r
+                       <bind-xml node="attribute" />\r
+               </field>\r
+       </class>\r
+\r
+       <class name="org.argeo.slc.core.structure.SimpleSElement"\r
+               auto-complete="false">\r
+               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+                       ns-prefix="slc" />\r
+               <field name="label" type="string" />\r
+               <field name="tags" collection="map">\r
+                       <bind-xml name="tag" location="tags">\r
+                               <class name="org.exolab.castor.mapping.MapItem">\r
+                                       <map-to\r
+                                               ns-uri="http://argeo.org/projects/slc/schemas" ns-prefix="slc" />\r
+                                       <field name="key" type="string">\r
+                                               <bind-xml name="name" node="attribute" />\r
+                                       </field>\r
+                                       <field name="value" type="string">\r
+                                               <bind-xml name="tag-value" />\r
+                                       </field>\r
+                               </class>\r
+                       </bind-xml>\r
+               </field>\r
+       </class>\r
+       \r
+</mapping>
\ No newline at end of file
diff --git a/org.argeo.slc.core/src/main/resources/org/argeo/slc/castor/test/tree/mapping.xml b/org.argeo.slc.core/src/main/resources/org/argeo/slc/castor/test/tree/mapping.xml
deleted file mode 100644 (file)
index 4cafdaf..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-<?xml version="1.0"?>\r
-\r
-<mapping>\r
-       <description>TreeTestResult objects XML mapping</description>\r
-\r
-       <class name="org.argeo.slc.core.test.tree.TreeTestResult"\r
-               auto-complete="false">\r
-               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
-                       ns-prefix="slc" />\r
-               <field name="uuid" type="string">\r
-                       <bind-xml name="uuid" node="attribute" />\r
-               </field>\r
-               <field name="closeDate" />\r
-               <field name="resultParts" collection="map">\r
-                       <bind-xml name="result-part" location="result-parts">\r
-                               <class name="org.exolab.castor.mapping.MapItem">\r
-                                       <map-to\r
-                                               ns-uri="http://argeo.org/projects/slc/schemas" ns-prefix="slc" />\r
-                                       <field name="key"\r
-                                               type="org.argeo.slc.core.structure.tree.TreeSPath"\r
-                                               handler="org.argeo.slc.castor.structure.tree.TreeSPathFieldHandler">\r
-                                               <bind-xml name="path" node="attribute" />\r
-                                       </field>\r
-                                       <field name="value"\r
-                                               type="org.argeo.slc.core.test.tree.PartSubList">\r
-                                               <bind-xml name="part-sub-list" />\r
-                                       </field>\r
-                               </class>\r
-                       </bind-xml>\r
-               </field>\r
-               <field name="elements" collection="map">\r
-                       <bind-xml name="element" location="elements">\r
-                               <class name="org.exolab.castor.mapping.MapItem">\r
-                                       <map-to\r
-                                               ns-uri="http://argeo.org/projects/slc/schemas" ns-prefix="slc" />\r
-                                       <field name="key"\r
-                                               type="org.argeo.slc.core.structure.tree.TreeSPath"\r
-                                               handler="org.argeo.slc.castor.structure.tree.TreeSPathFieldHandler">\r
-                                               <bind-xml name="path" node="attribute" />\r
-                                       </field>\r
-                                       <field name="value"\r
-                                               type="org.argeo.slc.core.structure.SimpleSElement">\r
-                                               <bind-xml auto-naming="deriveByClass" />\r
-                                       </field>\r
-                               </class>\r
-                       </bind-xml>\r
-               </field>\r
-       </class>\r
-\r
-       <class name="org.argeo.slc.core.test.tree.PartSubList"\r
-               auto-complete="false">\r
-               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
-                       ns-prefix="slc" />\r
-               <field name="slcExecutionUuid" type="string" />\r
-               <field name="slcExecutionStepUuid" type="string" />\r
-               <field name="parts" collection="vector"\r
-                       type="org.argeo.slc.core.test.SimpleResultPart">\r
-                       <bind-xml auto-naming="deriveByClass" location="parts" />\r
-               </field>\r
-       </class>\r
-\r
-       <class name="org.argeo.slc.core.test.SimpleResultPart"\r
-               auto-complete="false">\r
-               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
-                       ns-prefix="slc" />\r
-               <field name="message" type="string" />\r
-               <field name="status" type="string"\r
-                       handler="org.argeo.slc.castor.test.tree.StatusFieldHandler" />\r
-               <field name="exception" type="java.lang.Exception" />\r
-       </class>\r
-\r
-       <class name="org.argeo.slc.core.structure.tree.TreeSPath"\r
-               auto-complete="false">\r
-               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
-                       ns-prefix="slc" />\r
-               <field name="asUniqueString" type="string" />\r
-       </class>\r
-\r
-       <class name="org.argeo.slc.core.structure.SimpleSElement"\r
-               auto-complete="false">\r
-               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
-                       ns-prefix="slc" />\r
-               <field name="label" type="string" />\r
-               <field name="tags" collection="map">\r
-                       <bind-xml name="tag" location="tags">\r
-                               <class name="org.exolab.castor.mapping.MapItem">\r
-                                       <map-to\r
-                                               ns-uri="http://argeo.org/projects/slc/schemas" ns-prefix="slc" />\r
-                                       <field name="key" type="string">\r
-                                               <bind-xml name="name" node="attribute" />\r
-                                       </field>\r
-                                       <field name="value" type="string">\r
-                                               <bind-xml name="tag-value" />\r
-                                       </field>\r
-                               </class>\r
-                       </bind-xml>\r
-               </field>\r
-       </class>\r
-\r
-       <class name="java.lang.Exception" auto-complete="false">\r
-               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
-                       ns-prefix="slc" />\r
-               <field name="message"></field>\r
-               <field name="stackTrace" collection="array"\r
-                       type="java.lang.StackTraceElement">\r
-                       <bind-xml auto-naming="deriveByClass"\r
-                               location="stack-trace" />\r
-               </field>\r
-       </class>\r
-\r
-       <class name="java.lang.StackTraceElement" auto-complete="false"\r
-               verify-constructable="false">\r
-               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
-                       ns-prefix="slc" />\r
-               <field name="declaringClass" type="string" set-method="%1"\r
-                       get-method="getClassName">\r
-                       <bind-xml node="attribute" />\r
-               </field>\r
-               <field name="methodName" type="string" set-method="%2"\r
-                       get-method="getMethodName">\r
-                       <bind-xml node="attribute" />\r
-               </field>\r
-               <field name="fileName" type="string" set-method="%3"\r
-                       get-method="getFileName">\r
-                       <bind-xml node="attribute" />\r
-               </field>\r
-               <field name="lineNumber" type="integer" set-method="%4"\r
-                       get-method="getLineNumber">\r
-                       <bind-xml node="attribute" />\r
-               </field>\r
-       </class>\r
-\r
-       <class name="org.argeo.slc.msg.test.tree.TreeTestResultRequest">\r
-               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
-                       ns-prefix="slc" />\r
-               <field name="treeTestResult"\r
-                       type="org.argeo.slc.core.test.tree.TreeTestResult" />\r
-       </class>\r
-</mapping>
\ No newline at end of file
index 7b9fd7952386a46642d33189a1e3b60f5377608b..2e4587c3c6c6d3d39c7a0537052142709745acec 100644 (file)
@@ -9,6 +9,12 @@
                </id>\r
                <property name="status" column="STATUS" not-null="true" />\r
                <property name="message" column="MESSAGE" not-null="true" />\r
-               <property name="exception" column="EXCEPTION" not-null="false" />\r
+               <property name="exceptionMessage" column="EXCEPTION_MESSAGE"\r
+                       not-null="false" />\r
+               <list name="exceptionStackLines" cascade="all" lazy="false">\r
+                       <key column="RESULT_PART_ID" />\r
+                       <list-index column="INDX" />\r
+                       <element type="string" column="STACK_LINE" />\r
+               </list>\r
        </class>\r
 </hibernate-mapping>
\ No newline at end of file
index 6a9759c5492ca59126fcb664effb1daa542acea1..22bd34040539c0108aa5a1a4f31668bb492e8125 100644 (file)
@@ -7,13 +7,9 @@
                <id name="tid" column="T_ID">\r
                        <generator class="native" />\r
                </id>\r
-               <property name="slcExecutionUuid" column="SLC_EXEC_UUID" />\r
-               <property name="slcExecutionStepUuid"\r
-                       column="SLC_EXEC_STEP_UUID" />\r
                <list name="parts" cascade="all" lazy="false">\r
                        <key column="PART_SUBLIST_ID" />\r
                        <list-index column="INDX" />\r
-\r
                        <one-to-many\r
                                class="org.argeo.slc.core.test.SimpleResultPart" />\r
                </list>\r
index f1eecccba747e2ca2ad9d49b70851a45f3f889ad..37db79a6d93852d70c4923fcbcd20eb978c1bbe0 100644 (file)
                <map name="resultParts" table="RESULT_PARTS_MAP" cascade="all"\r
                        lazy="false" sort="natural">\r
                        <key column="PARENT_ID" />\r
-                       <!-- \r
-                               <map-key-many-to-many\r
-                               class="org.argeo.slc.core.structure.tree.TreeSPath" column="PATH" />\r
-                       -->\r
                        <composite-map-key\r
                                class="org.argeo.slc.core.structure.tree.TreeSPath">\r
                                <key-property name="asUniqueString" column="PATH" />\r
@@ -31,7 +27,6 @@
                                class="org.argeo.slc.core.structure.tree.TreeSPath">\r
                                <key-property name="asUniqueString" column="PATH" />\r
                        </composite-map-key>\r
-                       <!-- element column="NAME" type="string" /-->\r
                        <many-to-many class="org.argeo.slc.core.structure.SimpleSElement" column="ELEMENT_ID"\r
                                unique="true" lazy="false" />\r
                </map>\r
index d7e09650cfcaaec858e57306c16c683ab26f9ff7..55bb55afd71bcb5ee2f3eeb067f0bc94e1211b38 100644 (file)
@@ -12,7 +12,7 @@
                        <xs:element name="elements" minOccurs="0"\r
                                type="slc:ElementsType" />\r
                </xs:all>\r
-               <xs:attribute name="uuid" use="required"/>\r
+               <xs:attribute name="uuid" use="required" />\r
        </xs:complexType>\r
        <xs:complexType name="ResultPartsType">\r
                <xs:sequence>\r
@@ -29,8 +29,6 @@
        </xs:complexType>\r
        <xs:complexType name="PartSubListType">\r
                <xs:all>\r
-                       <xs:element name="slc-execution-uuid" type="xs:string" />\r
-                       <xs:element name="slc-execution-step-uuid" type="xs:string" />\r
                        <xs:element name="parts" minOccurs="0" type="slc:PartsType" />\r
                </xs:all>\r
        </xs:complexType>\r
                                </xs:simpleType>\r
                        </xs:element>\r
                        <xs:element name="message" type="xs:string" />\r
-                       <xs:element name="exception" minOccurs="0"\r
-                               type="slc:ExceptionType" />\r
+                       <xs:element name="exception-message" minOccurs="0"\r
+                               type="xs:string" />\r
+                       <xs:element name="stack-lines" minOccurs="0"\r
+                               type="slc:StackLinesType" />\r
+                       <xs:element name="test-run-uuid" type="xs:string"\r
+                               minOccurs="0" />\r
                </xs:all>\r
        </xs:complexType>\r
+       <xs:complexType name="StackLinesType">\r
+               <xs:sequence>\r
+                       <xs:element name="stack-line" maxOccurs="unbounded"\r
+                               type="xs:string" />\r
+               </xs:sequence>\r
+               <xs:attribute name="message" type="xs:string" />\r
+       </xs:complexType>\r
+       <!-- \r
        <xs:complexType name="ExceptionType">\r
                <xs:all>\r
-                       <xs:element name="message" type="xs:string" />\r
                        <xs:element name="stack-trace" minOccurs="0"\r
                                type="slc:StackTraceType" />\r
                </xs:all>\r
+               <xs:attribute name="message" type="xs:string" />\r
        </xs:complexType>\r
        <xs:complexType name="StackTraceType">\r
                <xs:sequence>\r
@@ -80,6 +90,7 @@
                <xs:attribute name="line-number" type="xs:integer"\r
                        use="required" />\r
        </xs:complexType>\r
+       -->\r
        <xs:complexType name="ElementsType">\r
                <xs:sequence>\r
                        <xs:element name="element" type="slc:ElementType"\r
                </xs:all>\r
                <xs:attribute name="name" type="xs:string" use="required" />\r
        </xs:complexType>\r
+       <xs:complexType name="TreeSPathType">\r
+               <xs:attribute name="as-unique-string" type="xs:string"\r
+                       use="required" />\r
+       </xs:complexType>\r
+       <xs:complexType name="TestRunDescriptorType">\r
+               <xs:all>\r
+                       <xs:element name="slc-execution-uuid" type="xs:string" />\r
+                       <xs:element name="slc-execution-step-uuid" type="xs:string" />\r
+                       <xs:element name="test-run-uuid" type="xs:string" />\r
+                       <xs:element name="deployed-sytem-id" type="xs:string" />\r
+                       <xs:element name="test-result-uuid" type="xs:string" />\r
+               </xs:all>\r
+       </xs:complexType>\r
 \r
-       <!-- TREE TEST RESULT -->\r
-       <xs:element name="tree-test-result-request">\r
+       <!-- TREE TEST RESULT REQUESTS -->\r
+       <xs:element name="create-tree-test-result-request">\r
                <xs:complexType>\r
                        <xs:all>\r
                                <xs:element name="tree-test-result"\r
                </xs:complexType>\r
        </xs:element>\r
 \r
+       <xs:element name="result-part-request">\r
+               <xs:complexType>\r
+                       <xs:all>\r
+                               <xs:element name="result-uuid" type="xs:string" />\r
+                               <xs:element name="simple-result-part"\r
+                                       type="slc:SimpleResultPartType" />\r
+                               <xs:element name="related-elements"\r
+                                       type="slc:ElementsType" />\r
+                               <xs:element name="tree-sPath" type="slc:TreeSPathType" />\r
+                               <xs:element name="test-run-descriptor"\r
+                                       type="slc:TestRunDescriptorType" />\r
+                       </xs:all>\r
+               </xs:complexType>\r
+       </xs:element>\r
+\r
        <!-- SLC EXECUTION -->\r
        <xs:element name="slc-execution" type="slc:SlcExecutionType" />\r
        <xs:complexType name="SlcExecutionType">\r
index ee09d0391d134114ee63e29782cf00d9f2f9c33e..f9a42a16ed8e4f37ad520ec5dbf57732a4110b51 100644 (file)
@@ -12,7 +12,10 @@ import org.apache.commons.logging.LogFactory;
 \r
 import static org.argeo.slc.core.test.tree.TreeTestResultTestUtils.createCompleteTreeTestResult;\r
 \r
-import org.argeo.slc.msg.test.tree.TreeTestResultRequest;\r
+import org.argeo.slc.core.structure.tree.TreeSPath;\r
+import org.argeo.slc.core.test.TestResultPart;\r
+import org.argeo.slc.msg.test.tree.CreateTreeTestResultRequest;\r
+import org.argeo.slc.msg.test.tree.ResultPartRequest;\r
 import org.argeo.slc.unit.AbstractSpringTestCase;\r
 import org.argeo.slc.unit.UnitXmlUtils;\r
 import org.argeo.slc.unit.test.tree.UnitTestTreeUtil;\r
@@ -46,22 +49,49 @@ public class TreeTestResultCastorTest extends AbstractSpringTestCase {
                UnitTestTreeUtil.assertTreeTestResult(ttr, ttrUnm);\r
        }\r
 \r
-       public void testTreeTestResultRequest() throws Exception {\r
-               TreeTestResultRequest req = new TreeTestResultRequest();\r
+       public void testCreateTreeTestResultRequest() throws Exception {\r
+               CreateTreeTestResultRequest req = new CreateTreeTestResultRequest();\r
                req.setTreeTestResult(createCompleteTreeTestResult());\r
 \r
                StringResult xml = new StringResult();\r
                marshaller.marshal(req, xml);\r
 \r
-               log.info("Marshalled TreeTestResult Request: " + xml);\r
+               log.info("Marshalled CreateTreeTestResult Request: " + xml);\r
 \r
                UnitXmlUtils.assertXmlValidation(getBean(XmlValidator.class),\r
                                new StringSource(xml.toString()));\r
 \r
-               TreeTestResultRequest reqUnm = (TreeTestResultRequest) unmarshaller\r
+               CreateTreeTestResultRequest reqUnm = (CreateTreeTestResultRequest) unmarshaller\r
                                .unmarshal(new StringSource(xml.toString()));\r
 \r
                UnitTestTreeUtil.assertTreeTestResult(req.getTreeTestResult(), reqUnm\r
                                .getTreeTestResult());\r
        }\r
+\r
+       public void testResultPartRequest() throws Exception {\r
+               TreeTestResult ttr = createCompleteTreeTestResult();\r
+\r
+               TreeSPath path = ttr.getCurrentPath();\r
+               PartSubList lst = ttr.getResultParts().get(path);\r
+               //TestResultPart part = lst.getParts().get(lst.getParts().size() - 1);\r
+               TestResultPart part = lst.getParts().get(2);\r
+\r
+               ResultPartRequest req = new ResultPartRequest(ttr, path, part);\r
+               req.setPath(ttr.getCurrentPath());\r
+\r
+               StringResult xml = new StringResult();\r
+               marshaller.marshal(req, xml);\r
+\r
+               log.info("Marshalled ResultPart Request: " + xml);\r
+\r
+               UnitXmlUtils.assertXmlValidation(getBean(XmlValidator.class),\r
+                               new StringSource(xml.toString()));\r
+\r
+               ResultPartRequest reqUnm = (ResultPartRequest) unmarshaller\r
+                               .unmarshal(new StringSource(xml.toString()));\r
+\r
+               UnitTestTreeUtil\r
+                               .assertPart(req.getResultPart(), reqUnm.getResultPart());\r
+       }\r
+\r
 }\r
index 9b26ac8fae94fd9f0fe953b7dd10ec62e4908ff7..c770d78ae670a81dcddb339fdb6e17edfe99bf27 100644 (file)
@@ -3,6 +3,8 @@ package org.argeo.slc.core.test.tree;
 import java.util.Date;\r
 import java.util.UUID;\r
 \r
+import org.argeo.slc.core.build.Distribution;\r
+import org.argeo.slc.core.deploy.DeployedSystem;\r
 import org.argeo.slc.core.process.SlcExecution;\r
 import org.argeo.slc.core.process.SlcExecutionStep;\r
 import org.argeo.slc.core.process.SlcExecutionTestUtils;\r
@@ -10,6 +12,7 @@ import org.argeo.slc.core.structure.SimpleSElement;
 import org.argeo.slc.core.structure.tree.TreeSPath;\r
 import org.argeo.slc.core.structure.tree.TreeSRegistry;\r
 import org.argeo.slc.core.test.SimpleResultPart;\r
+import org.argeo.slc.core.test.SimpleTestRun;\r
 import org.argeo.slc.core.test.TestStatus;\r
 \r
 public abstract class TreeTestResultTestUtils {\r
@@ -27,8 +30,11 @@ public abstract class TreeTestResultTestUtils {
                SlcExecutionStep step = new SlcExecutionStep("LOG", "JUnit step");\r
                slcExecution.getSteps().add(step);\r
 \r
+               SimpleTestRun testRun = new SimpleTestRun();\r
+               testRun.setUuid(UUID.randomUUID().toString());\r
+\r
                String pathStr = "/test";\r
-               TreeSPath path = TreeSPath.parseToCreatePath(pathStr);\r
+               TreeSPath path = new TreeSPath(pathStr);\r
 \r
                TreeSRegistry registry = new TreeSRegistry();\r
                SimpleSElement elem = new SimpleSElement("Unit Test");\r
@@ -36,8 +42,21 @@ public abstract class TreeTestResultTestUtils {
                registry.register(path, elem);\r
 \r
                TreeTestResult ttr = createSimpleTreeTestResult();\r
-               ttr.notifySlcExecution(slcExecution);\r
                ttr.notifyCurrentPath(registry, path);\r
+               ttr.notifyTestRun(testRun);\r
+               testRun.setTestResult(ttr);\r
+               testRun.setDeployedSystem(new DeployedSystem() {\r
+                       private String uuid = UUID.randomUUID().toString();\r
+\r
+                       public String getDeployedSystemId() {\r
+                               return uuid;\r
+                       }\r
+\r
+                       public Distribution getDistribution() {\r
+                               return null;\r
+                       }\r
+               });\r
+               testRun.notifySlcExecution(slcExecution);\r
 \r
                ttr.addResultPart(createSimpleResultPartPassed());\r
                ttr.addResultPart(createSimpleResultPartFailed());\r
index cf485952554ec66f4a215928b8b8692173a63061..211a7f4f5b7d10838f426c23ebdca4ccf28aef65 100644 (file)
@@ -7,7 +7,7 @@ import org.apache.commons.logging.LogFactory;
 
 import static org.argeo.slc.core.test.tree.TreeTestResultTestUtils.createCompleteTreeTestResult;
 
-import org.argeo.slc.msg.test.tree.TreeTestResultRequest;
+import org.argeo.slc.msg.test.tree.CreateTreeTestResultRequest;
 import org.argeo.slc.unit.AbstractSpringTestCase;
 
 public class TreeTestResultWsIntegrationTest extends AbstractSpringTestCase {
@@ -15,7 +15,7 @@ public class TreeTestResultWsIntegrationTest extends AbstractSpringTestCase {
 
        public void testSendSlcExecutionrequest() {
                WebServiceTemplate template = getBean(WebServiceTemplate.class);
-               TreeTestResultRequest req = new TreeTestResultRequest();
+               CreateTreeTestResultRequest req = new CreateTreeTestResultRequest();
                req.setTreeTestResult(createCompleteTreeTestResult());
 
                log.info("Send SlcExecutionRequest for SlcExecution "