]> git.argeo.org Git - gpl/argeo-slc.git/commitdiff
Merge error management fixes from trunk -r:1685:1690
authorMathieu Baudier <mbaudier@argeo.org>
Fri, 3 Oct 2008 09:16:42 +0000 (09:16 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Fri, 3 Oct 2008 09:16:42 +0000 (09:16 +0000)
git-svn-id: https://svn.argeo.org/slc/branches/0.10@1694 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

17 files changed:
org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/test/SlcTestTask.java
org.argeo.slc.core/pom.xml
org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/BasicTestDefinition.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/dao/test/tree/TreeTestResultDao.java
org.argeo.slc.core/src/main/java/org/argeo/slc/msg/test/tree/CreateTreeTestResultRequest.java
org.argeo.slc.core/src/main/java/org/argeo/slc/msg/test/tree/ResultPartRequest.java
org.argeo.slc.core/src/main/resources/org/argeo/slc/castor/msg/mapping.xml
org.argeo.slc.core/src/main/resources/org/argeo/slc/castor/test/mapping.xml
org.argeo.slc.core/src/main/resources/org/argeo/slc/core/test/spring/applicationContext.xml
org.argeo.slc.core/src/main/resources/org/argeo/slc/xml/slc.xsd
org.argeo.slc.hibernate/src/main/java/org/argeo/slc/hibernate/test/tree/TreeTestResultDaoHibernate.java
org.argeo.slc.server/src/main/java/org/argeo/slc/ws/test/tree/CreateTreeTestResultRequestEp.java
org.argeo.slc.server/src/main/java/org/argeo/slc/ws/test/tree/ResultPartRequestEp.java
org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-ws-servlet.xml
org.argeo.slc.webapp/src/main/webapp/WEB-INF/slc-jsp/resultView.jsp
org.argeo.slc.webapp/src/main/webapp/style.css

index fa22269c222487a7c7c2de514a64531277aaa0b3..66444f17e755f8c692eec8e4b4b7392433196826 100644 (file)
@@ -11,11 +11,14 @@ import org.argeo.slc.core.process.SlcExecution;
 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.SimpleResultPart;\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.TestResultPart;\r
+import org.argeo.slc.core.test.TestStatus;\r
 import org.argeo.slc.core.test.WritableTestRun;\r
 import org.argeo.slc.spring.SpringUtils;\r
 import org.springframework.beans.BeansException;\r
@@ -108,7 +111,17 @@ public class SlcTestTask extends SAwareTask {
                                        getRegistry(), getTreeSPath());\r
                }\r
 \r
-               ((ExecutableTestRun) testRun).execute();\r
+               try {\r
+                       ((ExecutableTestRun) testRun).execute();\r
+               } catch (RuntimeException e) {\r
+                       if (result != null) {\r
+                               SimpleResultPart errorPart = new SimpleResultPart(\r
+                                               TestStatus.ERROR,\r
+                                               "Unexpected exception when running test", e);\r
+                               result.addResultPart(errorPart);\r
+                       }\r
+                       throw e;\r
+               }\r
        }\r
 \r
        /**\r
index 8263e01fc19ef20e27d04c3a188a15a0bc49d6fc..7eb32e0521a463498a89d76e7630ea0c292736cb 100644 (file)
@@ -71,4 +71,4 @@
                        <artifactId>junit</artifactId>
                </dependency>
        </dependencies>
-</project>
\ No newline at end of file
+</project>
index 1178b41ec55e962e249ed3b0805dc2a144921a21..4d62ba39db652c734c778ef46df07a75d0b01af9 100644 (file)
@@ -1,5 +1,6 @@
 package org.argeo.slc.core.test;\r
 \r
+import org.argeo.slc.core.SlcException;\r
 import org.argeo.slc.core.structure.tree.TreeSRelatedHelper;\r
 import org.argeo.slc.core.test.context.ContextAware;\r
 import org.argeo.slc.core.test.context.ContextUtils;\r
@@ -31,6 +32,8 @@ public class BasicTestDefinition extends TreeSRelatedHelper implements
                        TestData testData = testRun.getTestData();\r
                        ContextUtils.compareReachedExpected((ContextAware) testData,\r
                                        testRun.getTestResult(), this);\r
+               } else {\r
+                       throw new SlcException("No test data defined.");\r
                }\r
        }\r
 }\r
index 3e365afe0822c6f28b51f3f835d89189a6fd7328..0c3eea382986d962f9af0be9d36143be5599d590 100644 (file)
@@ -44,7 +44,7 @@ public class TreeTestResult implements TestResult, StructureAware<TreeSPath>,
        private SortedMap<TreeSPath, PartSubList> resultParts = new TreeMap<TreeSPath, PartSubList>();\r
        private SortedMap<TreeSPath, StructureElement> elements = new TreeMap<TreeSPath, StructureElement>();\r
 \r
-       private Map<String, String> attributes = new TreeMap<String, String>();\r
+       private SortedMap<String, String> attributes = new TreeMap<String, String>();\r
 \r
        /** Sets the list of listeners. */\r
        public void setListeners(List<TestResultListener<TreeTestResult>> listeners) {\r
@@ -204,11 +204,11 @@ public class TreeTestResult implements TestResult, StructureAware<TreeSPath>,
                }\r
        }\r
 \r
-       public Map<String, String> getAttributes() {\r
+       public SortedMap<String, String> getAttributes() {\r
                return attributes;\r
        }\r
 \r
-       public void setAttributes(Map<String, String> attributes) {\r
+       public void setAttributes(SortedMap<String, String> attributes) {\r
                this.attributes = attributes;\r
        }\r
 \r
index 49984e114f15897c418e0639fe519598e2001df8..e7582a869b6606ddc8e00c5699445983d97d6434 100644 (file)
@@ -2,6 +2,7 @@ package org.argeo.slc.dao.test.tree;
 \r
 import java.util.List;\r
 import java.util.Map;\r
+import java.util.SortedMap;\r
 \r
 import org.argeo.slc.core.structure.StructureElement;\r
 import org.argeo.slc.core.structure.tree.TreeSPath;\r
@@ -16,4 +17,7 @@ public interface TreeTestResultDao extends TestResultDao<TreeTestResult> {
        public void addResultPart(String testResultId, TreeSPath path,\r
                        SimpleResultPart resultPart,\r
                        Map<TreeSPath, StructureElement> relatedElements);\r
+\r
+       public void updateAttributes(String testResultId,\r
+                       SortedMap<String, String> attributes);\r
 }\r
index e11ef0407f9772b7b4779c8d5413e340643da8c1..0bac8a821b744b7ffca7afce953a476bb4da9dbb 100644 (file)
@@ -1,9 +1,11 @@
 package org.argeo.slc.msg.test.tree;\r
 \r
+import org.argeo.slc.core.test.TestRunDescriptor;\r
 import org.argeo.slc.core.test.tree.TreeTestResult;\r
 \r
 public class CreateTreeTestResultRequest {\r
        private TreeTestResult treeTestResult;\r
+       private TestRunDescriptor testRunDescriptor;\r
 \r
        public CreateTreeTestResultRequest() {\r
 \r
@@ -11,6 +13,9 @@ public class CreateTreeTestResultRequest {
 \r
        public CreateTreeTestResultRequest(TreeTestResult treeTestResult) {\r
                this.treeTestResult = treeTestResult;\r
+               if (treeTestResult.getCurrentTestRun() != null)\r
+                       testRunDescriptor = new TestRunDescriptor(treeTestResult\r
+                                       .getCurrentTestRun());\r
        }\r
 \r
        public TreeTestResult getTreeTestResult() {\r
@@ -21,6 +26,14 @@ public class CreateTreeTestResultRequest {
                this.treeTestResult = treeTestResult;\r
        }\r
 \r
+       public TestRunDescriptor getTestRunDescriptor() {\r
+               return testRunDescriptor;\r
+       }\r
+\r
+       public void setTestRunDescriptor(TestRunDescriptor testRunDescriptor) {\r
+               this.testRunDescriptor = testRunDescriptor;\r
+       }\r
+\r
        @Override\r
        public String toString() {\r
                return getClass().getSimpleName() + "#" + treeTestResult.getUuid();\r
index 7e3750ea913b75c68db197cf15d9c7a7329fab32..09acea56a3da2721e2412c61c05d240a173b3c7a 100644 (file)
@@ -1,6 +1,7 @@
 package org.argeo.slc.msg.test.tree;\r
 \r
 import java.util.Map;\r
+import java.util.SortedMap;\r
 \r
 import org.argeo.slc.core.SlcException;\r
 import org.argeo.slc.core.structure.StructureElement;\r
@@ -16,6 +17,7 @@ public class ResultPartRequest {
        private TreeSPath path;\r
        private Map<TreeSPath, StructureElement> relatedElements;\r
        private TestRunDescriptor testRunDescriptor;\r
+       private SortedMap<String, String> attributes;\r
 \r
        public ResultPartRequest() {\r
 \r
@@ -29,6 +31,7 @@ public class ResultPartRequest {
                relatedElements = ttr.getRelatedElements(this.path);\r
                if (ttr.getCurrentTestRun() != null)\r
                        testRunDescriptor = new TestRunDescriptor(ttr.getCurrentTestRun());\r
+               attributes = ttr.getAttributes();\r
        }\r
 \r
        public ResultPartRequest(TreeTestResult ttr) {\r
@@ -89,6 +92,14 @@ public class ResultPartRequest {
                this.relatedElements = relatedElements;\r
        }\r
 \r
+       public SortedMap<String, String> getAttributes() {\r
+               return attributes;\r
+       }\r
+\r
+       public void setAttributes(SortedMap<String, String> attributes) {\r
+               this.attributes = attributes;\r
+       }\r
+\r
        @Override\r
        public String toString() {\r
                return getClass().getSimpleName() + "#" + resultUuid + " " + path;\r
index f695f9573d2fe98cbe0ade40a407878e3e5b8e04..98517081c43073c6f236606b842993ece60362b1 100644 (file)
@@ -1,82 +1,99 @@
-<?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\r
-               name="org.argeo.slc.msg.test.tree.CloseTreeTestResultRequest">\r
-               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
-                       ns-prefix="slc" />\r
-               <field name="resultUuid" />\r
-               <field name="closeDate" />\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
-                       type="org.argeo.slc.core.test.SimpleResultPart">\r
-                       <bind-xml auto-naming="deriveByClass" />\r
-               </field>\r
-\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
-\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.SlcExecutionStatusRequest">\r
-               <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
-                       ns-prefix="slc" />\r
-               <field name="slcExecutionUuid" />\r
-               <field name="newStatus"/>\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
+<?xml version="1.0"?>
+
+<mapping>
+    <description>Message objects XML mapping</description>
+
+    <!-- TESTS -->
+    <class
+        name="org.argeo.slc.msg.test.tree.CreateTreeTestResultRequest">
+        <map-to ns-uri="http://argeo.org/projects/slc/schemas"
+            ns-prefix="slc" />
+        <field name="treeTestResult"
+            type="org.argeo.slc.core.test.tree.TreeTestResult" />
+        <field name="testRunDescriptor" />
+    </class>
+
+    <class
+        name="org.argeo.slc.msg.test.tree.CloseTreeTestResultRequest">
+        <map-to ns-uri="http://argeo.org/projects/slc/schemas"
+            ns-prefix="slc" />
+        <field name="resultUuid" />
+        <field name="closeDate" />
+    </class>
+
+    <class name="org.argeo.slc.msg.test.tree.ResultPartRequest">
+        <map-to ns-uri="http://argeo.org/projects/slc/schemas"
+            ns-prefix="slc" />
+        <field name="resultUuid" />
+        <field name="resultPart"
+            type="org.argeo.slc.core.test.SimpleResultPart">
+            <bind-xml auto-naming="deriveByClass" />
+        </field>
+
+        <field name="relatedElements" collection="map">
+            <bind-xml name="element" location="related-elements">
+                <class name="org.exolab.castor.mapping.MapItem">
+                    <map-to
+                        ns-uri="http://argeo.org/projects/slc/schemas"
+                        ns-prefix="slc" />
+                    <field name="key"
+                        type="org.argeo.slc.core.structure.tree.TreeSPath"
+                        handler="org.argeo.slc.castor.structure.tree.TreeSPathFieldHandler">
+                        <bind-xml name="path" node="attribute" />
+                    </field>
+                    <field name="value"
+                        type="org.argeo.slc.core.structure.SimpleSElement">
+                        <bind-xml auto-naming="deriveByClass" />
+                    </field>
+                </class>
+            </bind-xml>
+        </field>
+        <field name="path">
+            <bind-xml auto-naming="deriveByClass" />
+        </field>
+        <field name="testRunDescriptor" />
+        <field name="attributes" collection="sortedmap">
+            <bind-xml name="attribute" location="attributes">
+                <class name="org.exolab.castor.mapping.MapItem">
+                    <map-to
+                        ns-uri="http://argeo.org/projects/slc/schemas"
+                        ns-prefix="slc" />
+                    <field name="key" type="string">
+                        <bind-xml name="name" node="attribute" />
+                    </field>
+                    <field name="value" type="string">
+                        <bind-xml node="text" />
+                    </field>
+                </class>
+            </bind-xml>
+        </field>
+    </class>
+
+
+    <!-- PROCESS -->
+    <class name="org.argeo.slc.msg.process.SlcExecutionStepsRequest">
+        <map-to ns-uri="http://argeo.org/projects/slc/schemas"
+            ns-prefix="slc" />
+        <field name="slcExecutionUuid" />
+        <field name="steps" collection="vector"
+            type="org.argeo.slc.core.process.SlcExecutionStep">
+            <bind-xml auto-naming="deriveByClass" location="steps" />
+        </field>
+    </class>
+
+    <class name="org.argeo.slc.msg.process.SlcExecutionStatusRequest">
+        <map-to ns-uri="http://argeo.org/projects/slc/schemas"
+            ns-prefix="slc" />
+        <field name="slcExecutionUuid" />
+        <field name="newStatus" />
+    </class>
+
+    <class name="org.argeo.slc.msg.process.SlcExecutionRequest">
+        <map-to ns-uri="http://argeo.org/projects/slc/schemas"
+            ns-prefix="slc" />
+        <field name="slcExecution"
+            type="org.argeo.slc.core.process.SlcExecution" />
+    </class>
+
+
 </mapping>
\ No newline at end of file
index e35450e16e662a54b5f3858364ecdc427390c38f..f6dfbf984db5f5a889773601ec0dfddf7119cd32 100644 (file)
@@ -22,7 +22,7 @@
                        <bind-xml name="uuid" node="attribute" />
                </field>
                <field name="closeDate" />
-               <field name="attributes" collection="map">
+               <field name="attributes" collection="sortedmap">
                        <bind-xml name="attribute" location="attributes">
                                <class name="org.exolab.castor.mapping.MapItem">
                                        <map-to
@@ -36,7 +36,7 @@
                                </class>
                        </bind-xml>
                </field>
-               <field name="resultParts" collection="map">
+               <field name="resultParts" collection="sortedmap">
                        <bind-xml name="result-part" location="result-parts">
                                <class name="org.exolab.castor.mapping.MapItem">
                                        <map-to
@@ -53,7 +53,7 @@
                                </class>
                        </bind-xml>
                </field>
-               <field name="elements" collection="map">
+               <field name="elements" collection="sortedmap">
                        <bind-xml name="element" location="elements">
                                <class name="org.exolab.castor.mapping.MapItem">
                                        <map-to
index 91ce574828cf17fa3c8be47d5587280aa6827dbf..20c821401fc56ef375b24afc97fc2ac40158839c 100644 (file)
@@ -1,43 +1,45 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
-       default-lazy-init="true">
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
+    default-lazy-init="true">
 
-       <bean id="slcDefault.test.resultLogger"
-               class="org.argeo.slc.core.test.tree.TreeTestResultLogger">
-       </bean>
+    <bean id="slcDefault.test.resultLogger"
+        class="org.argeo.slc.core.test.tree.TreeTestResultLogger">
+    </bean>
 
-       <bean name="slcDefault.test.testRun"
-               class="org.argeo.slc.core.test.SimpleTestRun">
-       </bean>
+    <bean name="slcDefault.test.testRun"
+        class="org.argeo.slc.core.test.SimpleTestRun"
+        scope="prototype">
+    </bean>
 
-       <bean name="slcDefault.test.uuid" class="java.util.UUID"
-               factory-method="randomUUID" scope="prototype">
-       </bean>
+    <bean name="slcDefault.test.uuid" class="java.util.UUID"
+        factory-method="randomUUID" scope="prototype">
+    </bean>
 
-       <bean id="slcDefault.test.basicTreeTestResult"
-               class="org.argeo.slc.core.test.tree.TreeTestResult" abstract="true"
-               destroy-method="close">
-               <property name="uuid">
-                       <bean factory-bean="slcDefault.test.uuid"
-                               factory-method="toString">
-                       </bean>
-               </property>
-               <property name="listeners">
-                       <list>
-                               <ref bean="slcDefault.test.resultLogger" />
-                       </list>
-               </property>
-       </bean>
+    <bean id="slcDefault.test.basicTreeTestResult"
+        class="org.argeo.slc.core.test.tree.TreeTestResult"
+        abstract="true" destroy-method="close">
+        <property name="uuid">
+            <bean factory-bean="slcDefault.test.uuid"
+                factory-method="toString">
+            </bean>
+        </property>
+        <property name="listeners">
+            <list>
+                <ref bean="slcDefault.test.resultLogger" />
+            </list>
+        </property>
+    </bean>
 
-       <bean id="slcDefault.test.basicSimpleTestResult"
-               class="org.argeo.slc.core.test.SimpleTestResult" abstract="true">
-               <property name="uuid">
-                       <bean factory-bean="slcDefault.test.uuid"
-                               factory-method="toString">
-                       </bean>
-               </property>
-       </bean>
+    <bean id="slcDefault.test.basicSimpleTestResult"
+        class="org.argeo.slc.core.test.SimpleTestResult"
+        abstract="true">
+        <property name="uuid">
+            <bean factory-bean="slcDefault.test.uuid"
+                factory-method="toString">
+            </bean>
+        </property>
+    </bean>
 
 </beans>
\ No newline at end of file
index 4be18ff74a22090ae37eaa72e7b977d3de4c74eb..5b7b43e151c99fdd8cb2fe4c53fa666d4b82dd13 100644 (file)
 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
-       xmlns:slc="http://argeo.org/projects/slc/schemas"
-       elementFormDefault="qualified"
-       targetNamespace="http://argeo.org/projects/slc/schemas">
-       <!-- TREE TEST RESULT -->
-       <xs:element name="tree-test-result" type="slc:TreeTestResultType" />
-       <xs:element name="tree-test-result-collection"
-               type="slc:TreeTestResultCollectionType" />
+    xmlns:slc="http://argeo.org/projects/slc/schemas"
+    elementFormDefault="qualified"
+    targetNamespace="http://argeo.org/projects/slc/schemas">
+    <!-- TREE TEST RESULT -->
+    <xs:element name="tree-test-result" type="slc:TreeTestResultType" />
+    <xs:element name="tree-test-result-collection"
+        type="slc:TreeTestResultCollectionType" />
 
-       <xs:complexType name="TreeTestResultCollectionType">
-               <xs:all>
-                       <xs:element name="results" minOccurs="0"
-                               type="slc:ResultsType" />
-               </xs:all>
-               <xs:attribute name="id" use="required" />
-       </xs:complexType>
-       <xs:complexType name="ResultsType">
-               <xs:sequence>
-                       <xs:element name="tree-test-result"
-                               type="slc:TreeTestResultType" minOccurs="0" maxOccurs="unbounded">
-                       </xs:element>
-               </xs:sequence>
-       </xs:complexType>
-       <xs:complexType name="TreeTestResultType">
-               <xs:all>
-                       <xs:element name="close-date" type="xs:dateTime"
-                               minOccurs="0" />
-                       <xs:element name="attributes" minOccurs="0"
-                               type="slc:AttributesType" />
-                       <xs:element name="result-parts" minOccurs="0"
-                               type="slc:ResultPartsType" />
-                       <xs:element name="elements" minOccurs="0"
-                               type="slc:ElementsType" />
-               </xs:all>
-               <xs:attribute name="uuid" use="required" />
-       </xs:complexType>
-       <xs:complexType name="ResultPartsType">
-               <xs:sequence>
-                       <xs:element name="result-part" type="slc:ResultPartType"
-                               minOccurs="0" maxOccurs="unbounded">
-                       </xs:element>
-               </xs:sequence>
-       </xs:complexType>
-       <xs:complexType name="ResultPartType">
-               <xs:all>
-                       <xs:element name="part-sub-list" type="slc:PartSubListType" />
-               </xs:all>
-               <xs:attribute name="path" type="xs:string" use="required" />
-       </xs:complexType>
-       <xs:complexType name="PartSubListType">
-               <xs:all>
-                       <xs:element name="parts" minOccurs="0" type="slc:PartsType" />
-               </xs:all>
-       </xs:complexType>
-       <xs:complexType name="PartsType">
-               <xs:sequence>
-                       <xs:element name="simple-result-part"
-                               type="slc:SimpleResultPartType" maxOccurs="unbounded">
-                       </xs:element>
-               </xs:sequence>
-       </xs:complexType>
-       <xs:complexType name="SimpleResultPartType">
-               <xs:all>
-                       <xs:element name="status">
-                               <xs:simpleType>
-                                       <xs:restriction base="xs:string">
-                                               <xs:enumeration value="PASSED" />
-                                               <xs:enumeration value="FAILED" />
-                                               <xs:enumeration value="ERROR" />
-                                       </xs:restriction>
-                               </xs:simpleType>
-                       </xs:element>
-                       <xs:element name="message" type="xs:string" />
-                       <xs:element name="exception-message" minOccurs="0"
-                               type="xs:string" />
-                       <xs:element name="stack-lines" minOccurs="0"
-                               type="slc:StackLinesType" />
-                       <xs:element name="test-run-uuid" type="xs:string"
-                               minOccurs="0" />
-               </xs:all>
-       </xs:complexType>
-       <xs:complexType name="StackLinesType">
-               <xs:sequence>
-                       <xs:element name="stack-line" maxOccurs="unbounded"
-                               type="xs:string" />
-               </xs:sequence>
-               <xs:attribute name="message" type="xs:string" />
-       </xs:complexType>
-       <xs:complexType name="ElementsType">
-               <xs:sequence>
-                       <xs:element name="element" type="slc:ElementType"
-                               minOccurs="0" maxOccurs="unbounded">
-                       </xs:element>
-               </xs:sequence>
-       </xs:complexType>
-       <xs:complexType name="ElementType">
-               <xs:all>
-                       <xs:element name="simple-sElement"
-                               type="slc:SimpleSElementType" />
-               </xs:all>
-               <xs:attribute name="path" type="xs:string" use="required" />
-       </xs:complexType>
-       <xs:complexType name="SimpleSElementType">
-               <xs:all>
-                       <xs:element name="label" type="xs:string" />
-                       <xs:element name="tags" type="slc:TagsType" minOccurs="0" />
-               </xs:all>
-       </xs:complexType>
-       <xs:complexType name="TagsType">
-               <xs:sequence>
-                       <xs:element name="tag" type="slc:TagType" minOccurs="0"
-                               maxOccurs="unbounded">
-                       </xs:element>
-               </xs:sequence>
-       </xs:complexType>
-       <xs:complexType name="TagType">
-               <xs:all>
-                       <xs:element name="tag-value" type="xs:string" />
-               </xs:all>
-               <xs:attribute name="name" type="xs:string" use="required" />
-       </xs:complexType>
-       <xs:complexType name="TreeSPathType">
-               <xs:attribute name="as-unique-string" type="xs:string"
-                       use="required" />
-       </xs:complexType>
-       <xs:complexType name="TestRunDescriptorType">
-               <xs:all>
-                       <xs:element name="test-run-uuid" type="xs:string" />
-                       <xs:element name="slc-execution-uuid" type="xs:string"
-                               minOccurs="0" />
-                       <xs:element name="slc-execution-step-uuid" type="xs:string"
-                               minOccurs="0" />
-                       <xs:element name="deployed-sytem-id" type="xs:string"
-                               minOccurs="0" />
-                       <xs:element name="test-result-uuid" type="xs:string"
-                               minOccurs="0" />
-               </xs:all>
-       </xs:complexType>
+    <xs:complexType name="TreeTestResultCollectionType">
+        <xs:all>
+            <xs:element name="results" minOccurs="0"
+                type="slc:ResultsType" />
+        </xs:all>
+        <xs:attribute name="id" use="required" />
+    </xs:complexType>
+    <xs:complexType name="ResultsType">
+        <xs:sequence>
+            <xs:element name="tree-test-result"
+                type="slc:TreeTestResultType" minOccurs="0"
+                maxOccurs="unbounded">
+            </xs:element>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:complexType name="TreeTestResultType">
+        <xs:all>
+            <xs:element name="close-date" type="xs:dateTime"
+                minOccurs="0" />
+            <xs:element name="attributes" minOccurs="0"
+                type="slc:AttributesType" />
+            <xs:element name="result-parts" minOccurs="0"
+                type="slc:ResultPartsType" />
+            <xs:element name="elements" minOccurs="0"
+                type="slc:ElementsType" />
+        </xs:all>
+        <xs:attribute name="uuid" use="required" />
+    </xs:complexType>
+    <xs:complexType name="ResultPartsType">
+        <xs:sequence>
+            <xs:element name="result-part" type="slc:ResultPartType"
+                minOccurs="0" maxOccurs="unbounded">
+            </xs:element>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:complexType name="ResultPartType">
+        <xs:all>
+            <xs:element name="part-sub-list" type="slc:PartSubListType" />
+        </xs:all>
+        <xs:attribute name="path" type="xs:string" use="required" />
+    </xs:complexType>
+    <xs:complexType name="PartSubListType">
+        <xs:all>
+            <xs:element name="parts" minOccurs="0" type="slc:PartsType" />
+        </xs:all>
+    </xs:complexType>
+    <xs:complexType name="PartsType">
+        <xs:sequence>
+            <xs:element name="simple-result-part"
+                type="slc:SimpleResultPartType" maxOccurs="unbounded">
+            </xs:element>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:complexType name="SimpleResultPartType">
+        <xs:all>
+            <xs:element name="status">
+                <xs:simpleType>
+                    <xs:restriction base="xs:string">
+                        <xs:enumeration value="PASSED" />
+                        <xs:enumeration value="FAILED" />
+                        <xs:enumeration value="ERROR" />
+                    </xs:restriction>
+                </xs:simpleType>
+            </xs:element>
+            <xs:element name="message" type="xs:string" />
+            <xs:element name="exception-message" minOccurs="0"
+                type="xs:string" />
+            <xs:element name="stack-lines" minOccurs="0"
+                type="slc:StackLinesType" />
+            <xs:element name="test-run-uuid" type="xs:string"
+                minOccurs="0" />
+        </xs:all>
+    </xs:complexType>
+    <xs:complexType name="StackLinesType">
+        <xs:sequence>
+            <xs:element name="stack-line" maxOccurs="unbounded"
+                type="xs:string" />
+        </xs:sequence>
+        <xs:attribute name="message" type="xs:string" />
+    </xs:complexType>
+    <xs:complexType name="ElementsType">
+        <xs:sequence>
+            <xs:element name="element" type="slc:ElementType"
+                minOccurs="0" maxOccurs="unbounded">
+            </xs:element>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:complexType name="ElementType">
+        <xs:all>
+            <xs:element name="simple-sElement"
+                type="slc:SimpleSElementType" />
+        </xs:all>
+        <xs:attribute name="path" type="xs:string" use="required" />
+    </xs:complexType>
+    <xs:complexType name="SimpleSElementType">
+        <xs:all>
+            <xs:element name="label" type="xs:string" />
+            <xs:element name="tags" type="slc:TagsType" minOccurs="0" />
+        </xs:all>
+    </xs:complexType>
+    <xs:complexType name="TagsType">
+        <xs:sequence>
+            <xs:element name="tag" type="slc:TagType" minOccurs="0"
+                maxOccurs="unbounded">
+            </xs:element>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:complexType name="TagType">
+        <xs:all>
+            <xs:element name="tag-value" type="xs:string" />
+        </xs:all>
+        <xs:attribute name="name" type="xs:string" use="required" />
+    </xs:complexType>
+    <xs:complexType name="TreeSPathType">
+        <xs:attribute name="as-unique-string" type="xs:string"
+            use="required" />
+    </xs:complexType>
+    <xs:complexType name="TestRunDescriptorType">
+        <xs:all>
+            <xs:element name="test-run-uuid" type="xs:string" />
+            <xs:element name="slc-execution-uuid" type="xs:string"
+                minOccurs="0" />
+            <xs:element name="slc-execution-step-uuid" type="xs:string"
+                minOccurs="0" />
+            <xs:element name="deployed-sytem-id" type="xs:string"
+                minOccurs="0" />
+            <xs:element name="test-result-uuid" type="xs:string"
+                minOccurs="0" />
+        </xs:all>
+    </xs:complexType>
 
-       <!-- TREE TEST RESULT REQUESTS -->
-       <xs:element name="create-tree-test-result-request">
-               <xs:complexType>
-                       <xs:all>
-                               <xs:element name="tree-test-result"
-                                       type="slc:TreeTestResultType" />
-                       </xs:all>
-               </xs:complexType>
-       </xs:element>
+    <!-- TREE TEST RESULT REQUESTS -->
+    <xs:element name="create-tree-test-result-request">
+        <xs:complexType>
+            <xs:all>
+                <xs:element name="tree-test-result"
+                    type="slc:TreeTestResultType" />
+                <xs:element name="test-run-descriptor"
+                    type="slc:TestRunDescriptorType" maxOccurs="1" minOccurs="0"/>
+            </xs:all>
+        </xs:complexType>
+    </xs:element>
 
-       <xs:element name="close-tree-test-result-request">
-               <xs:complexType>
-                       <xs:all>
-                               <xs:element name="result-uuid" type="xs:string" />
-                               <xs:element name="close-date" type="xs:dateTime" />
-                       </xs:all>
-               </xs:complexType>
-       </xs:element>
+    <xs:element name="close-tree-test-result-request">
+        <xs:complexType>
+            <xs:all>
+                <xs:element name="result-uuid" type="xs:string" />
+                <xs:element name="close-date" type="xs:dateTime" />
+            </xs:all>
+        </xs:complexType>
+    </xs:element>
 
-       <xs:element name="result-part-request">
-               <xs:complexType>
-                       <xs:all>
-                               <xs:element name="result-uuid" type="xs:string" />
-                               <xs:element name="simple-result-part"
-                                       type="slc:SimpleResultPartType" />
-                               <xs:element name="related-elements"
-                                       type="slc:ElementsType" />
-                               <xs:element name="tree-sPath" type="slc:TreeSPathType" />
-                               <xs:element name="test-run-descriptor"
-                                       type="slc:TestRunDescriptorType" />
-                       </xs:all>
-               </xs:complexType>
-       </xs:element>
+    <xs:element name="result-part-request">
+        <xs:complexType>
+            <xs:all>
+                <xs:element name="result-uuid" type="xs:string" />
+                <xs:element name="simple-result-part"
+                    type="slc:SimpleResultPartType" />
+                <xs:element name="related-elements"
+                    type="slc:ElementsType" />
+                <xs:element name="tree-sPath" type="slc:TreeSPathType" />
+                <xs:element name="test-run-descriptor"
+                    type="slc:TestRunDescriptorType" />
+                <xs:element name="attributes" minOccurs="0"
+                    type="slc:AttributesType" />
+            </xs:all>
+        </xs:complexType>
+    </xs:element>
 
-       <!-- SLC EXECUTION -->
-       <xs:element name="slc-execution" type="slc:SlcExecutionType" />
-       <xs:complexType name="SlcExecutionType">
-               <xs:all>
-                       <xs:element name="status" type="xs:string" />
-                       <xs:element name="type" type="xs:string" />
-                       <xs:element name="host" type="xs:string" />
-                       <xs:element name="user" type="xs:string" />
-                       <xs:element name="steps" minOccurs="0"
-                               type="slc:SlcExecutionStepsType" />
-                       <xs:element name="attributes" minOccurs="0"
-                               type="slc:AttributesType" />
-               </xs:all>
-               <xs:attribute name="uuid" type="xs:string" use="required" />
-       </xs:complexType>
-       <xs:complexType name="SlcExecutionStepsType">
-               <xs:sequence>
-                       <xs:element name="slc-execution-step"
-                               type="slc:SlcExecutionStepType" maxOccurs="unbounded">
-                       </xs:element>
-               </xs:sequence>
-       </xs:complexType>
-       <xs:complexType name="SlcExecutionStepType">
-               <xs:all>
-                       <xs:element name="type" type="xs:string" />
-                       <xs:element name="begin" type="xs:dateTime" />
-                       <xs:element name="log-lines" minOccurs="0">
-                               <xs:complexType>
-                                       <xs:sequence>
-                                               <xs:element name="log-line" type="xs:string"
-                                                       maxOccurs="unbounded" />
-                                       </xs:sequence>
-                               </xs:complexType>
-                       </xs:element>
-               </xs:all>
-               <xs:attribute name="uuid" type="xs:string" use="required" />
-       </xs:complexType>
-       <xs:complexType name="AttributesType">
-               <xs:sequence>
-                       <xs:element name="attribute" type="slc:AttributeType"
-                               minOccurs="0" maxOccurs="unbounded">
-                       </xs:element>
-               </xs:sequence>
-       </xs:complexType>
-       <xs:complexType name="AttributeType">
-               <xs:simpleContent>
-                       <xs:extension base="xs:string">
-                               <xs:attribute name="name" type="xs:string"
-                                       use="required" />
-                       </xs:extension>
-               </xs:simpleContent>
-       </xs:complexType>
+    <!-- SLC EXECUTION -->
+    <xs:element name="slc-execution" type="slc:SlcExecutionType" />
+    <xs:complexType name="SlcExecutionType">
+        <xs:all>
+            <xs:element name="status" type="xs:string" />
+            <xs:element name="type" type="xs:string" />
+            <xs:element name="host" type="xs:string" />
+            <xs:element name="user" type="xs:string" />
+            <xs:element name="steps" minOccurs="0"
+                type="slc:SlcExecutionStepsType" />
+            <xs:element name="attributes" minOccurs="0"
+                type="slc:AttributesType" />
+        </xs:all>
+        <xs:attribute name="uuid" type="xs:string" use="required" />
+    </xs:complexType>
+    <xs:complexType name="SlcExecutionStepsType">
+        <xs:sequence>
+            <xs:element name="slc-execution-step"
+                type="slc:SlcExecutionStepType" maxOccurs="unbounded">
+            </xs:element>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:complexType name="SlcExecutionStepType">
+        <xs:all>
+            <xs:element name="type" type="xs:string" />
+            <xs:element name="begin" type="xs:dateTime" />
+            <xs:element name="log-lines" minOccurs="0">
+                <xs:complexType>
+                    <xs:sequence>
+                        <xs:element name="log-line" type="xs:string"
+                            maxOccurs="unbounded" />
+                    </xs:sequence>
+                </xs:complexType>
+            </xs:element>
+        </xs:all>
+        <xs:attribute name="uuid" type="xs:string" use="required" />
+    </xs:complexType>
+    <xs:complexType name="AttributesType">
+        <xs:sequence>
+            <xs:element name="attribute" type="slc:AttributeType"
+                minOccurs="0" maxOccurs="unbounded">
+            </xs:element>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:complexType name="AttributeType">
+        <xs:simpleContent>
+            <xs:extension base="xs:string">
+                <xs:attribute name="name" type="xs:string"
+                    use="required" />
+            </xs:extension>
+        </xs:simpleContent>
+    </xs:complexType>
 
-       <!-- SLC EXECUTION REQUESTS-->
-       <xs:element name="slc-execution-request">
-               <xs:complexType>
-                       <xs:all>
-                               <xs:element name="slc-execution"
-                                       type="slc:SlcExecutionType" />
-                       </xs:all>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="slc-execution-steps-request">
-               <xs:complexType>
-                       <xs:all>
-                               <xs:element name="slc-execution-uuid" type="xs:string" />
-                               <xs:element name="steps"
-                                       type="slc:SlcExecutionStepsType" />
-                       </xs:all>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="slc-execution-status-request">
-               <xs:complexType>
-                       <xs:all>
-                               <xs:element name="slc-execution-uuid" type="xs:string" />
-                               <xs:element name="new-status" type="xs:string" />
-                       </xs:all>
-               </xs:complexType>
-       </xs:element>
+    <!-- SLC EXECUTION REQUESTS-->
+    <xs:element name="slc-execution-request">
+        <xs:complexType>
+            <xs:all>
+                <xs:element name="slc-execution"
+                    type="slc:SlcExecutionType" />
+            </xs:all>
+        </xs:complexType>
+    </xs:element>
+    <xs:element name="slc-execution-steps-request">
+        <xs:complexType>
+            <xs:all>
+                <xs:element name="slc-execution-uuid" type="xs:string" />
+                <xs:element name="steps"
+                    type="slc:SlcExecutionStepsType" />
+            </xs:all>
+        </xs:complexType>
+    </xs:element>
+    <xs:element name="slc-execution-status-request">
+        <xs:complexType>
+            <xs:all>
+                <xs:element name="slc-execution-uuid" type="xs:string" />
+                <xs:element name="new-status" type="xs:string" />
+            </xs:all>
+        </xs:complexType>
+    </xs:element>
 
 </xs:schema>
\ No newline at end of file
index 04ff23738c344a671a36219068cd96bf55e10686..9cb98d1ee78ed51f76281ca78c4a27ec6573411c 100644 (file)
@@ -4,6 +4,7 @@ import java.sql.SQLException;
 import java.util.Date;\r
 import java.util.List;\r
 import java.util.Map;\r
+import java.util.SortedMap;\r
 \r
 import org.argeo.slc.core.SlcException;\r
 import org.argeo.slc.core.structure.StructureElement;\r
@@ -104,4 +105,21 @@ public class TreeTestResultDaoHibernate extends HibernateDaoSupport implements
                        throw new SlcException("No result with id " + testResultId);\r
                return treeTestResult;\r
        }\r
+\r
+       public void updateAttributes(final String testResultId,\r
+                       final SortedMap<String, String> attributes) {\r
+               getHibernateTemplate().execute(new HibernateCallback() {\r
+\r
+                       public Object doInHibernate(Session session)\r
+                                       throws HibernateException, SQLException {\r
+                               TreeTestResult treeTestResult = getTreeTestResult(session,\r
+                                               testResultId);\r
+                               treeTestResult.setAttributes(attributes);\r
+\r
+                               session.update(treeTestResult);\r
+                               return treeTestResult;\r
+                       }\r
+               });\r
+       }\r
+\r
 }\r
index 7ffa5c081a8d080a1abb87d196a43903c113b280..f61d86666de25ceb123b51d98aac267fa7da56d2 100644 (file)
@@ -8,6 +8,7 @@ import org.apache.commons.logging.LogFactory;
 import org.argeo.slc.core.test.tree.TreeTestResult;
 import org.argeo.slc.dao.test.tree.TreeTestResultDao;
 import org.argeo.slc.msg.test.tree.CreateTreeTestResultRequest;
+import org.argeo.slc.services.test.TestManagerService;
 
 public class CreateTreeTestResultRequestEp extends
                AbstractMarshallingPayloadEndpoint {
@@ -15,9 +16,12 @@ public class CreateTreeTestResultRequestEp extends
        private Log log = LogFactory.getLog(getClass());
 
        private final TreeTestResultDao treeTestResultDao;
+       private final TestManagerService testManagerService;
 
-       public CreateTreeTestResultRequestEp(TreeTestResultDao treeTestResultDao) {
+       public CreateTreeTestResultRequestEp(TreeTestResultDao treeTestResultDao,
+                       TestManagerService testManagerService) {
                this.treeTestResultDao = treeTestResultDao;
+               this.testManagerService = testManagerService;
        }
 
        @Override
@@ -27,9 +31,14 @@ public class CreateTreeTestResultRequestEp extends
 
                if (log.isTraceEnabled())
                        log.trace("Creating result #" + treeTestResult.getUuid());
-
                treeTestResultDao.create(treeTestResult);
 
+               if (log.isTraceEnabled())
+                       log.trace("Registering test run descriptor #"
+                                       + msg.getTestRunDescriptor().getTestRunUuid());
+               testManagerService
+                               .registerTestRunDescriptor(msg.getTestRunDescriptor());
+
                return null;
        }
 
index 3dcff1949177b40a679c27a7919de131969ee265..c7d930897c1b8693c6ebf4a919789a6bf49db27b 100644 (file)
@@ -37,6 +37,8 @@ public class ResultPartRequestEp extends AbstractMarshallingPayloadEndpoint {
 
                treeTestResultDao.addResultPart(msg.getResultUuid(), msg.getPath(), msg
                                .getResultPart(), msg.getRelatedElements());
+               treeTestResultDao.updateAttributes(msg.getResultUuid(), msg
+                               .getAttributes());
 
                return null;
        }
index b6125df19faa479ac13a3cada339c910af1eec19..e5300af7af64ee25886884be68cc6508cdbdce23 100644 (file)
@@ -32,6 +32,7 @@
        <bean name="createTreeTestResultRequestEp"
                class="org.argeo.slc.ws.test.tree.CreateTreeTestResultRequestEp">
                <constructor-arg ref="testResultDao" />
+        <constructor-arg ref="testManagerService" />
                <property name="marshaller" ref="slcDefault.castor.marshaller" />
                <property name="unmarshaller"
                        ref="slcDefault.castor.marshaller" />
index b3141a7884b1a203f53340bc1c5006367d7b4f5b..08c87a72facab1926a754df5d6ab974c6e848f53 100644 (file)
        \r
                <c:forEach items="${resultPartEntry.value.parts}" var="part">\r
                        <tr>\r
-                               <td class="${part.status == 0 ? 'passed' : 'failed'}">\r
-                               ${part.message}</td>\r
+                               <td class="${part.status == 0 ? 'passed' : (part.status == 1 ? 'failed': 'error')}" style="vertical-align:top">\r
+                               ${part.message}
+                               <c:if test="${part.status == 2}">
+                                       <pre>${part.exceptionMessage}</pre>
+                               </c:if>
+                               </td>\r
                                <c:if test="${part.testRunUuid!=null}">\r
-                                       <td>\r
+                                       <td style="vertical-align:top">\r
                                        <a href="testRunView.web?uuid=${part.testRunUuid}">test run</a>\r
                                        </td>\r
                                </c:if>\r
index a5631934a56c4dd4e742a279c959276e8d06dedf..102b4eea1ecea42e315314b4f557efde1ba6d2bd 100644 (file)
@@ -80,10 +80,14 @@ td {
        color: green;\r
 }\r
 \r
-.failed {\r
-       color: red;\r
-}\r
-\r
+.failed {
+       color: red;
+}
+
+.error {
+       color: purple;
+}
+
 /**************** Navigation ****************/\r
 td.nav1 {\r
        padding: 5px 0px 0px 0px;\r