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
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
<artifactId>junit</artifactId>
</dependency>
</dependencies>
-</project>
\ No newline at end of file
+</project>
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
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
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
}\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
\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
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
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
\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
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
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
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
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
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
-<?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
<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
</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
</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
<?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
<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
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
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
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 {
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
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;
}
treeTestResultDao.addResultPart(msg.getResultUuid(), msg.getPath(), msg
.getResultPart(), msg.getRelatedElements());
+ treeTestResultDao.updateAttributes(msg.getResultUuid(), msg
+ .getAttributes());
return null;
}
<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" />
\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
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