}\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
package org.argeo.slc.core.build;\r
\r
public interface Distribution {\r
- public DistributionId getDistributionId();\r
+ public String getDistributionId();\r
\r
}\r
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
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
\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
* 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
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
* \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
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
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
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
\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
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
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
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
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
\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
}\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
}\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
}\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
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
package org.argeo.slc.core.test;\r
\r
+import java.util.List;\r
+\r
/**\r
* Part of a test result.\r
* \r
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
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
--- /dev/null
+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
--- /dev/null
+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
\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
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
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
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
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
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
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
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
} 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
* @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
\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
}\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
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
\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
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
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
--- /dev/null
+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
--- /dev/null
+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
+++ /dev/null
-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
+++ /dev/null
-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
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
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
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
}\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
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
\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
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
--- /dev/null
+<?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
--- /dev/null
+<?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
<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
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
--- /dev/null
+<?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
--- /dev/null
+<?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
+++ /dev/null
-<?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
</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
<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
<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
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
<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
</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
<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
\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
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
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
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
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
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
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 {
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 "