Various fixes so that SLC example works again
authorMathieu Baudier <mbaudier@argeo.org>
Sun, 4 May 2008 15:23:33 +0000 (15:23 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Sun, 4 May 2008 15:23:33 +0000 (15:23 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@1101 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

15 files changed:
org.argeo.slc.core/src/main/java/org/argeo/slc/ant/structure/SAwareTask.java
org.argeo.slc.core/src/main/java/org/argeo/slc/core/structure/StructureElementProvider.java [new file with mode: 0644]
org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/SimpleResultPart.java
org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/TestResultListener.java
org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/tree/AsynchronousTreeTestResultListener.java
org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/tree/CompositeTreeTestDefinition.java
org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/tree/TreeTestResult.java
org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/tree/TreeTestResultLogger.java
org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/tree/TreeTestResultPersister.java
org.argeo.slc.core/src/main/java/org/argeo/slc/dao/test/TestResultDao.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/hibernate/test/tree/TestResultDaoHibernate.java
org.argeo.slc.core/src/main/java/org/argeo/slc/unit/test/tree/UnitTestTreeUtil.java
org.argeo.slc.core/src/test/java/org/argeo/slc/hibernate/test/tree/TreeTestResultDaoHibernateTest.java
org.argeo.slc.core/src/test/resources/org/argeo/slc/ant/applicationContext.xml

index 9db63f141dcc4437c2ba481466f8a41b8c0e2a74..d248a38705378bfa318781385bf1a5400362e48d 100644 (file)
@@ -17,8 +17,7 @@ import org.argeo.slc.core.structure.StructureRegistry;
 import org.argeo.slc.core.structure.tree.TreeSPath;\r
 \r
 /** Ant task that can be registered within a structure. */\r
-public abstract class SAwareTask extends AbstractSpringTask implements\r
-               StructureElement {\r
+public abstract class SAwareTask extends AbstractSpringTask {\r
        private String path;\r
        private TreeSPath treeSPath;\r
        private final List<AbstractSpringArg> sAwareArgs = new Vector<AbstractSpringArg>();\r
@@ -66,14 +65,21 @@ public abstract class SAwareTask extends AbstractSpringTask implements
 \r
                        treeSPath = taskPath;\r
                } else {\r
-                       treeSPath = TreeSPath.parseToCreatePath(path);\r
+                       treeSPath = new TreeSPath(path);\r
                }\r
 \r
-               if (structureElementArg != null)\r
-                       getRegistry().register(treeSPath,\r
-                                       structureElementArg.getStructureElement());\r
-               else\r
-                       getRegistry().register(treeSPath, this);\r
+               if (getRegistry().getElement(treeSPath) == null) {\r
+                       // No structure element registered.\r
+                       if (structureElementArg != null) {\r
+                               getRegistry().register(treeSPath,\r
+                                               structureElementArg.getStructureElement());\r
+                       } else {\r
+                               if (getDescription() != null) {\r
+                                       getRegistry().register(treeSPath,\r
+                                                       new SimpleSElement(getDescription()));\r
+                               }\r
+                       }\r
+               }\r
 \r
                // notify registered args\r
                for (AbstractSpringArg arg : sAwareArgs) {\r
diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/core/structure/StructureElementProvider.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/core/structure/StructureElementProvider.java
new file mode 100644 (file)
index 0000000..b9aa144
--- /dev/null
@@ -0,0 +1,5 @@
+package org.argeo.slc.core.structure;\r
+\r
+public interface StructureElementProvider {\r
+       public StructureElement createStructureElement();\r
+}\r
index ef5512ccf5f2a180b559cb70357f03b6b9524343..e114e1f6d15c34b7eb68aa4dd8e13cfb9d0813cf 100644 (file)
@@ -1,6 +1,5 @@
 package org.argeo.slc.core.test;\r
 \r
-\r
 /**\r
  * <p>\r
  * Basic implementation of a result part, implementing the standard three status\r
@@ -59,31 +58,31 @@ public class SimpleResultPart implements TestResultPart, TestStatus,
                if (exception == null)\r
                        return;\r
 \r
-               //this.exceptionMessage = exception.getMessage();\r
-\r
                StringBuffer buf = new StringBuffer("");\r
-               buf.append(exception.getMessage());\r
+               buf.append(exception.toString());\r
                buf.append('\n');\r
-               for(StackTraceElement elem : exception.getStackTrace()){\r
-                       buf.append(elem.toString()).append('\n');\r
+               for (StackTraceElement elem : exception.getStackTrace()) {\r
+                       buf.append('\t').append(elem.toString()).append('\n');\r
                }\r
-               \r
+\r
+               if (exception.getCause() != null)\r
+                       addRootCause(buf, exception.getCause());\r
+\r
                this.exceptionMessage = buf.toString();\r
-               \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
+       protected void addRootCause(StringBuffer buf, Throwable cause) {\r
+               if (cause == null)\r
+                       return;\r
+\r
+               buf.append("Caused by: " + cause.getMessage());\r
+               for (StackTraceElement elem : cause.getStackTrace()) {\r
+                       buf.append('\t').append(elem.toString()).append('\n');\r
+               }\r
+\r
+               if (cause.getCause() != null) {\r
+                       addRootCause(buf, cause.getCause());\r
+               }\r
        }\r
 \r
        @Override\r
index 0d774a71eea7948f252591dd139f6ed1c965b9c0..c42d783d0fe4af04284c2244512f0ef4ea19e75c 100644 (file)
@@ -1,11 +1,11 @@
 package org.argeo.slc.core.test;\r
 \r
 /** Listener to the operations on a test result. */\r
-public interface TestResultListener {\r
+public interface TestResultListener<T extends TestResult> {\r
        /** Notified when a part was added to a test result. */\r
-       public void resultPartAdded(TestResult testResult,\r
+       public void resultPartAdded(T testResult,\r
                        TestResultPart testResultPart);\r
 \r
        /** Stops listening and release the related resources. */\r
-       public void close(TestResult testResult);\r
+       public void close(T testResult);\r
 }\r
index 59a58987436cff0a73c0121008ad76db36f69f0c..a3dc33f3ba5505bf90a8e355d49f867cb4faafde 100644 (file)
@@ -3,7 +3,6 @@ package org.argeo.slc.core.test.tree;
 import java.util.Vector;\r
 \r
 import org.argeo.slc.core.structure.tree.TreeSPath;\r
-import org.argeo.slc.core.test.NumericTRId;\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
@@ -12,6 +11,7 @@ import org.argeo.slc.core.test.TestResultPart;
  * Abstract asynchronous implementation of a listener listening to a\r
  * <code>TreeTestResult</code>.\r
  * \r
+ * @deprecated listeners should be called synchronously\r
  * @see TreeTestResult\r
  */\r
 public abstract class AsynchronousTreeTestResultListener implements\r
index 25479069b70e66ab9578609e3528ec76a91c814f..f26c085807285b0e2ba487364ea039a19da111bf 100644 (file)
@@ -9,6 +9,7 @@ import org.apache.commons.logging.LogFactory;
 import org.argeo.slc.core.structure.SimpleSElement;\r
 import org.argeo.slc.core.structure.StructureAware;\r
 import org.argeo.slc.core.structure.StructureElement;\r
+import org.argeo.slc.core.structure.StructureElementProvider;\r
 import org.argeo.slc.core.structure.StructurePath;\r
 import org.argeo.slc.core.structure.StructureRegistry;\r
 import org.argeo.slc.core.structure.tree.TreeSPath;\r
@@ -21,13 +22,13 @@ import org.argeo.slc.core.test.TestRun;
  * children.\r
  */\r
 public class CompositeTreeTestDefinition implements TestDefinition,\r
-               StructureAware {\r
+               StructureAware<TreeSPath> {\r
        private Log log = LogFactory.getLog(CompositeTreeTestDefinition.class);\r
 \r
        private List<TestDefinition> tasks = null;\r
        private List<TreeSPath> taskPaths = null;\r
        private TreeSPath path;\r
-       private StructureRegistry registry;\r
+       private StructureRegistry<TreeSPath> registry;\r
 \r
        public void execute(TestRun testRun) {\r
                log.info("Execute sequence of test definitions...");\r
@@ -58,18 +59,20 @@ public class CompositeTreeTestDefinition implements TestDefinition,
                }\r
        }\r
 \r
-       public void notifyCurrentPath(StructureRegistry registry, StructurePath path) {\r
-               this.path = (TreeSPath) path;\r
+       public void notifyCurrentPath(StructureRegistry<TreeSPath> registry,\r
+                       TreeSPath path) {\r
+               this.path = path;\r
                this.registry = registry;\r
-               \r
+\r
                // clear task paths\r
                taskPaths.clear();\r
 \r
                Integer count = 0;\r
                for (TestDefinition task : tasks) {\r
                        final StructureElement element;\r
-                       if (task instanceof StructureElement) {\r
-                               element = (StructureElement) task;\r
+                       if (task instanceof StructureElementProvider) {\r
+                               element = ((StructureElementProvider) task)\r
+                                               .createStructureElement();\r
                        } else {\r
                                element = new SimpleSElement("[no desc]");\r
                        }\r
@@ -77,7 +80,8 @@ public class CompositeTreeTestDefinition implements TestDefinition,
                        registry.register(taskPath, element);\r
                        taskPaths.add(taskPath);\r
                        if (task instanceof StructureAware) {\r
-                               ((StructureAware) task).notifyCurrentPath(registry, taskPath);\r
+                               ((StructureAware<TreeSPath>) task).notifyCurrentPath(registry,\r
+                                               taskPath);\r
                        }\r
                        count++;\r
                }\r
index 9b807c904be55023d0ab614273c3a442c51e629d..a012c4451b065a3e26926f710d4712cd5dc04068 100644 (file)
@@ -27,7 +27,7 @@ import org.argeo.slc.core.test.TestRunAware;
 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
+       private List<TestResultListener<TreeTestResult>> listeners = new Vector<TestResultListener<TreeTestResult>>();\r
 \r
        private TreeSPath currentPath;\r
        private TestRun currentTestRun;\r
@@ -42,7 +42,7 @@ public class TreeTestResult implements TestResult, StructureAware<TreeSPath> {
        private SortedMap<TreeSPath, StructureElement> elements = new TreeMap<TreeSPath, StructureElement>();\r
 \r
        /** Sets the list of listeners. */\r
-       public void setListeners(List<TestResultListener> listeners) {\r
+       public void setListeners(List<TestResultListener<TreeTestResult>> listeners) {\r
                this.listeners = listeners;\r
        }\r
 \r
@@ -62,7 +62,7 @@ public class TreeTestResult implements TestResult, StructureAware<TreeSPath> {
 \r
                // notify listeners\r
                synchronized (listeners) {\r
-                       for (TestResultListener listener : listeners) {\r
+                       for (TestResultListener<TreeTestResult> listener : listeners) {\r
                                listener.resultPartAdded(this, part);\r
                        }\r
                }\r
@@ -112,7 +112,7 @@ public class TreeTestResult implements TestResult, StructureAware<TreeSPath> {
                closeDate = new Date();\r
 \r
                synchronized (listeners) {\r
-                       for (TestResultListener listener : listeners) {\r
+                       for (TestResultListener<TreeTestResult> listener : listeners) {\r
                                listener.close(this);\r
                        }\r
                        listeners.clear();\r
@@ -166,6 +166,5 @@ public class TreeTestResult implements TestResult, StructureAware<TreeSPath> {
        public TestRun getCurrentTestRun() {\r
                return currentTestRun;\r
        }\r
-       \r
-       \r
+\r
 }\r
index a0736fdbac0e45ace6c45a8d6f3401e9d20a057e..667e2e5a911f6612d9f7328c97b40d37e439a3a4 100644 (file)
@@ -4,8 +4,11 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;\r
 \r
 import org.argeo.slc.core.test.SimpleResultPart;\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.TestStatus;\r
+import org.argeo.slc.core.test.tree.AsynchronousTreeTestResultListener.PartStruct;\r
 \r
 /**\r
  * Listener logging tree-based test results to the underlying logging system.\r
@@ -13,28 +16,26 @@ import org.argeo.slc.core.test.TestStatus;
  * @see TreeTestResult\r
  * \r
  */\r
-public class TreeTestResultLogger extends AsynchronousTreeTestResultListener {\r
+public class TreeTestResultLogger implements TestResultListener<TreeTestResult> {\r
 \r
        private static Log log = LogFactory.getLog(TreeTestResultLogger.class);\r
 \r
-       public TreeTestResultLogger() {\r
-               super(true);\r
-       }\r
-\r
-       @Override\r
-       protected void resultPartAdded(PartStruct partStruct) {\r
-               TestResultPart part = partStruct.part;\r
-               String msg = partStruct.part + " - " + partStruct.uuid + ":"\r
-                               + partStruct.path;\r
-               if (part.getStatus().equals(TestStatus.PASSED)) {\r
+       public void resultPartAdded(TreeTestResult testResult,\r
+                       TestResultPart testResultPart) {\r
+               String msg = testResultPart + " - " + testResult.getUuid() + ":"\r
+                               + testResult.getCurrentPath();\r
+               if (testResultPart.getStatus().equals(TestStatus.PASSED)) {\r
                        log.info(msg);\r
-               } else if (part.getStatus().equals(TestStatus.FAILED)) {\r
+               } else if (testResultPart.getStatus().equals(TestStatus.FAILED)) {\r
                        log.warn(msg);\r
-               } else if (part.getStatus().equals(TestStatus.ERROR)) {\r
-                       log.error(msg + ((SimpleResultPart) part).getExceptionMessage());\r
+               } else if (testResultPart.getStatus().equals(TestStatus.ERROR)) {\r
+                       log.error(msg + "\n" + testResultPart.getExceptionMessage());\r
                } else {\r
                        log.error("Unknow test status: " + msg);\r
                }\r
        }\r
 \r
+       public void close(TreeTestResult testResult) {\r
+       }\r
+\r
 }\r
index d1679f5ac66616c6905032ceb933e7fc65169c77..bec0d9926804a4478d86c4b61ef1ff2584ef70fe 100644 (file)
@@ -3,14 +3,8 @@ package org.argeo.slc.core.test.tree;
 import org.apache.commons.logging.Log;\r
 import org.apache.commons.logging.LogFactory;\r
 \r
-import org.argeo.slc.core.structure.SimpleSElement;\r
-import org.argeo.slc.core.structure.StructureElement;\r
-import org.argeo.slc.core.structure.StructureRegistry;\r
-import org.argeo.slc.core.structure.tree.TreeSPath;\r
-import org.argeo.slc.core.structure.tree.TreeSRegistry;\r
-import org.argeo.slc.dao.structure.tree.TreeSPathDao;\r
-import org.argeo.slc.dao.structure.tree.TreeSRegistryDao;\r
-import org.argeo.slc.dao.test.TestResultDao;\r
+import org.argeo.slc.core.test.TestResultListener;\r
+import org.argeo.slc.core.test.TestResultPart;\r
 import org.argeo.slc.dao.test.tree.TreeTestResultDao;\r
 \r
 /**\r
@@ -18,60 +12,30 @@ import org.argeo.slc.dao.test.tree.TreeTestResultDao;
  * \r
  * @see TreeTestResult\r
  */\r
-public class TreeTestResultPersister extends AsynchronousTreeTestResultListener {\r
+public class TreeTestResultPersister implements\r
+               TestResultListener<TreeTestResult> {\r
        private static Log log = LogFactory.getLog(TreeTestResultPersister.class);\r
 \r
        private TreeTestResultDao testResultDao;\r
-       private TreeSPathDao treeSPathDao;\r
-       private TreeSRegistryDao treeSRegistryDao;\r
 \r
-       @Override\r
-       protected void resultPartAdded(PartStruct partStruct) {\r
+       public void resultPartAdded(TreeTestResult testResult,\r
+                       TestResultPart testResultPart) {\r
                try {\r
                        TreeTestResult persistedResult = testResultDao\r
-                                       .getTestResult(partStruct.uuid);\r
+                                       .getTestResult(testResult.getUuid());\r
 \r
                        if (persistedResult == null) {\r
-                               testResultDao.create(partStruct.result);\r
+                               testResultDao.create(testResult);\r
                        } else {\r
-                               testResultDao.update(partStruct.result);\r
+                               testResultDao.update(testResult);\r
                        }\r
-                       /*\r
-                        * TreeSPath path = treeSPathDao.getOrCreate(partStruct.path);\r
-                        * \r
-                        * StructureRegistry<TreeSPath> localRegistry = partStruct.result\r
-                        * .getRegistry(); TreeSRegistry registry =\r
-                        * getOrCreateTreeSRegistry(path);\r
-                        * treeSRegistryDao.syncPath(registry, localRegistry, path);\r
-                        * \r
-                        * if (persistedResult == null) { persistedResult = new\r
-                        * TreeTestResult();\r
-                        * persistedResult.setNumericResultId(partStruct.resultId);\r
-                        * PartSubList subList = new PartSubList();\r
-                        * subList.getParts().add(partStruct.part);\r
-                        * persistedResult.getResultParts().put(path, subList);\r
-                        * \r
-                        * testResultDao.create(persistedResult); } else { PartSubList\r
-                        * subList = persistedResult.getResultParts() .get(path); if\r
-                        * (subList == null) { subList = new PartSubList();\r
-                        * persistedResult.getResultParts().put(path, subList); }\r
-                        * persistedResult.getResultParts().get(path).getParts().add(\r
-                        * partStruct.part);\r
-                        * \r
-                        * if (log.isTraceEnabled()) { log.trace("ResultId:" +\r
-                        * persistedResult.getTestResultId()); log.trace("ResultParts size:" +\r
-                        * persistedResult.getResultParts().size()); log.trace("Sublist\r
-                        * size:" + subList.getParts().size()); log.trace("Part: " +\r
-                        * partStruct.part); } testResultDao.update(persistedResult); }\r
-                        */\r
                } catch (Exception e) {\r
-                       log.error("Could not persist part for result #" + partStruct.uuid,\r
-                                       e);\r
+                       log.error("Could not persist result part " + testResultPart\r
+                                       + " for result " + testResult.getUuid());\r
                }\r
        }\r
 \r
-       @Override\r
-       protected void postClose(TreeTestResult testResult) {\r
+       public void close(TreeTestResult testResult) {\r
                TreeTestResult persistedResult = (TreeTestResult) testResultDao\r
                                .getTestResult(testResult.getUuid());\r
 \r
@@ -84,31 +48,8 @@ public class TreeTestResultPersister extends AsynchronousTreeTestResultListener
                                        + testResult.getUuid());\r
        }\r
 \r
-       private TreeSRegistry getOrCreateTreeSRegistry(TreeSPath path) {\r
-               TreeSRegistry registry = treeSRegistryDao.getActiveTreeSRegistry();\r
-               if (registry == null) {\r
-                       registry = new TreeSRegistry();\r
-                       registry.setStatus(TreeSRegistry.STATUS_ACTIVE);\r
-                       treeSRegistryDao.create(registry);\r
-                       return treeSRegistryDao.getActiveTreeSRegistry();\r
-               } else {\r
-                       return registry;\r
-               }\r
-       }\r
-\r
        /** Sets the DAO to use in order to persist the results. */\r
        public void setTestResultDao(TreeTestResultDao testResultDao) {\r
                this.testResultDao = testResultDao;\r
        }\r
-\r
-       /** Sets the tree structure path DAO. */\r
-       public void setTreeSPathDao(TreeSPathDao treeSPathDao) {\r
-               this.treeSPathDao = treeSPathDao;\r
-       }\r
-\r
-       /** Sets the tree structure registry DAO. */\r
-       public void setTreeSRegistryDao(TreeSRegistryDao treeSRegistryDao) {\r
-               this.treeSRegistryDao = treeSRegistryDao;\r
-       }\r
-\r
 }\r
index b67fa895f908d39202ff27f05db007a74fa6dc3c..01cdffd25f176305307d289bb178cb5731472264 100644 (file)
@@ -1,9 +1,9 @@
 package org.argeo.slc.dao.test;\r
 \r
+import java.util.Date;\r
 import java.util.List;\r
 \r
 import org.argeo.slc.core.test.TestResult;\r
-import org.argeo.slc.core.test.TestResultId;\r
 \r
 /**\r
  * The dao for <code>TestResult</code>.\r
@@ -22,4 +22,7 @@ public interface TestResultDao<T extends TestResult> {
 \r
        /** Lists all test results. */\r
        public List<T> listTestResults();\r
+       \r
+\r
+       public void close(String id, Date closeDate);\r
 }\r
index 5c4a3f879ca1ffec5b93514a843da7ed7f670dba..c66d3692156e66418a0467141fe1c727532c4fd3 100644 (file)
@@ -7,6 +7,6 @@ import org.argeo.slc.core.test.tree.TreeTestResult;
 import org.argeo.slc.dao.test.TestResultDao;\r
 \r
 public interface TreeTestResultDao extends TestResultDao<TreeTestResult> {\r
-       /** Lists results containing this path*/\r
+       /** Lists results containing this path */\r
        public List<TreeTestResult> listResults(TreeSPath path);\r
 }\r
index 3dcf0088738237f884b85977518806e0d9569559..681a707f1f1d617cdc564452f73e570d6faaf00f 100644 (file)
@@ -1,9 +1,11 @@
 package org.argeo.slc.hibernate.test.tree;\r
 \r
+import java.util.Date;\r
 import java.util.List;\r
 \r
 import org.springframework.orm.hibernate3.support.HibernateDaoSupport;\r
 \r
+import org.argeo.slc.core.SlcException;\r
 import org.argeo.slc.core.structure.tree.TreeSPath;\r
 import org.argeo.slc.core.test.NumericTRId;\r
 import org.argeo.slc.core.test.TestResult;\r
@@ -50,4 +52,17 @@ public class TestResultDaoHibernate extends HibernateDaoSupport implements
                return list;\r
        }\r
 \r
+       public void close(String id, Date closeDate) {\r
+//             TreeTestResult ttr = (TreeTestResult) getHibernateTemplate().load(\r
+//                             TreeTestResult.class, id);\r
+               TreeTestResult ttr = getTestResult(id);\r
+               if (ttr != null) {\r
+                       ttr.setCloseDate(closeDate);\r
+                       getHibernateTemplate().update(ttr);\r
+               } else {\r
+                       throw new SlcException("Result with id " + id\r
+                                       + " could not be closed because it was not found.");\r
+               }\r
+       }\r
+\r
 }\r
index 2e1ef8a77a49d22ef39d87dba9ce718f8f089db7..1862055fa7607fa413fdbd3ead8e0e0e3c8a2431 100644 (file)
@@ -74,15 +74,10 @@ public class UnitTestTreeUtil {
                }\r
        }\r
 \r
-       /**\r
-        * Assert one part of a tree test result.\r
-        * \r
-        * @deprecated use {@link #assertPart(TestResultPart, TestResultPart)}\r
-        *             instead\r
-        */\r
+       /** Asserts one part of a tree test result */\r
        public static void assertPart(TreeTestResult testResult, String pathStr,\r
                        int index, Integer status, String message) {\r
-               TreeSPath path = TreeSPath.parseToCreatePath(pathStr);\r
+               TreeSPath path = new TreeSPath(pathStr);\r
                PartSubList list = testResult.getResultParts().get(path);\r
                if (list == null) {\r
                        fail("No result for path " + path);\r
@@ -92,7 +87,7 @@ public class UnitTestTreeUtil {
                        fail("Not enough parts.");\r
                }\r
                SimpleResultPart part = (SimpleResultPart) list.getParts().get(index);\r
-               assertPart(part, status, message, null, part.getTestRunUuid());\r
+               assertPart(part, status, message, null, part.getTestRunUuid(), true);\r
        }\r
 \r
        public static void assertPart(TestResultPart expected,\r
@@ -104,13 +99,13 @@ public class UnitTestTreeUtil {
                }\r
 \r
                assertPart(reached, expected.getStatus(), expected.getMessage(),\r
-                               expected.getExceptionMessage(), expectedTestRunUuid);\r
+                               expected.getExceptionMessage(), expectedTestRunUuid, false);\r
        }\r
 \r
        /** Assert one part of a tree test result. */\r
        private static void assertPart(TestResultPart part, Integer status,\r
                        String message, String exceptionDescription,\r
-                       String expectedTestRunUuid) {\r
+                       String expectedTestRunUuid, boolean skipExceptionMessage) {\r
                assertEquals(status, part.getStatus());\r
 \r
                if (log.isTraceEnabled()) {\r
@@ -118,16 +113,19 @@ public class UnitTestTreeUtil {
                        log.trace("Reached message:" + part.getMessage());\r
                }\r
                assertEquals(message, part.getMessage());\r
-               if (exceptionDescription == null) {\r
-                       assertNull(part.getExceptionMessage());\r
-               } else {\r
-                       if (log.isTraceEnabled()) {\r
-                               log.trace("Expected exception message:" + exceptionDescription);\r
-                               log.trace("Reached exception message:"\r
-                                               + part.getExceptionMessage());\r
+               if (!skipExceptionMessage) {\r
+                       if (exceptionDescription == null) {\r
+                               assertNull(part.getExceptionMessage());\r
+                       } else {\r
+                               if (log.isTraceEnabled()) {\r
+                                       log.trace("Expected exception message:"\r
+                                                       + exceptionDescription);\r
+                                       log.trace("Reached exception message:"\r
+                                                       + part.getExceptionMessage());\r
+                               }\r
+\r
+                               assertEquals(exceptionDescription, part.getExceptionMessage());\r
                        }\r
-\r
-                       assertEquals(exceptionDescription, part.getExceptionMessage());\r
                }\r
 \r
                if (expectedTestRunUuid != null) {\r
index bb80ddca0c29de9d8667bf5f84566813118df305..c1808da13fd4a43686b90b44ea5b8ff944a8e480 100644 (file)
@@ -1,12 +1,15 @@
 package org.argeo.slc.hibernate.test.tree;\r
 \r
 import static org.argeo.slc.core.test.tree.TreeTestResultTestUtils.createCompleteTreeTestResult;\r
+import static org.argeo.slc.core.test.tree.TreeTestResultTestUtils.createSimpleTreeTestResult;\r
 \r
 import java.util.Date;\r
 \r
 import org.argeo.slc.core.structure.SimpleSElement;\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.TestStatus;\r
 import org.argeo.slc.core.test.tree.TreeTestResult;\r
 import org.argeo.slc.core.test.tree.TreeTestResultTestUtils;\r
 import org.argeo.slc.dao.test.tree.TreeTestResultDao;\r
@@ -14,38 +17,40 @@ import org.argeo.slc.unit.AbstractSpringTestCase;
 import org.argeo.slc.unit.test.tree.UnitTestTreeUtil;\r
 \r
 public class TreeTestResultDaoHibernateTest extends AbstractSpringTestCase {\r
+       private TreeTestResultDao testResultDao = null;\r
+\r
+       @Override\r
+       public void setUp() {\r
+               testResultDao = (TreeTestResultDao) getContext().getBean(\r
+                               "testResultDao");\r
+       }\r
 \r
        public void testCreate() {\r
-               TreeTestResultDao testResultDao = (TreeTestResultDao) getContext()\r
-                               .getBean("testResultDao");\r
 \r
                TreeTestResult ttr = createCompleteTreeTestResult();\r
                testResultDao.create(ttr);\r
 \r
                TreeTestResult ttrPersisted = (TreeTestResult) testResultDao\r
                                .getTestResult(ttr.getUuid());\r
-               \r
+\r
                UnitTestTreeUtil.assertTreeTestResult(ttr, ttrPersisted);\r
        }\r
 \r
        public void testUpdate() {\r
-               TreeTestResultDao testResultDao = (TreeTestResultDao) getContext()\r
-                               .getBean("testResultDao");\r
-\r
                TreeTestResult ttr = createCompleteTreeTestResult();\r
                testResultDao.create(ttr);\r
 \r
                TreeTestResult ttrUpdated = (TreeTestResult) testResultDao\r
                                .getTestResult(ttr.getUuid());\r
-               \r
+\r
                // Modifying ttrUpdated\r
-               \r
-               /** this closeDate update commented because \r
-                * the assertTreeTestResult will find a unexpected \r
-                * discrepancy in the date.\r
-                * ttrUpdated.setCloseDate(new Date()); \r
+\r
+               /**\r
+                * this closeDate update commented because the assertTreeTestResult will\r
+                * find a unexpected discrepancy in the date.\r
+                * ttrUpdated.setCloseDate(new Date());\r
                 */\r
-               \r
+\r
                String pathStr = "/test";\r
                TreeSPath path = TreeSPath.parseToCreatePath(pathStr);\r
 \r
@@ -55,20 +60,57 @@ public class TreeTestResultDaoHibernateTest extends AbstractSpringTestCase {
                registry.register(path, elem);\r
 \r
                ttrUpdated.notifyCurrentPath(registry, path);\r
-               \r
-               ttrUpdated.addResultPart(TreeTestResultTestUtils.createSimpleResultPartPassed());\r
-               ttrUpdated.addResultPart(TreeTestResultTestUtils.createSimpleResultPartFailed());\r
-               ttrUpdated.addResultPart(TreeTestResultTestUtils.createSimpleResultPartError());\r
-               \r
+\r
+               ttrUpdated.addResultPart(TreeTestResultTestUtils\r
+                               .createSimpleResultPartPassed());\r
+               ttrUpdated.addResultPart(TreeTestResultTestUtils\r
+                               .createSimpleResultPartFailed());\r
+               ttrUpdated.addResultPart(TreeTestResultTestUtils\r
+                               .createSimpleResultPartError());\r
+\r
                testResultDao.update(ttrUpdated);\r
-               \r
+\r
                // comparison of ttrUpdated and ttrRetrieved\r
                TreeTestResult ttrRetrieved = (TreeTestResult) testResultDao\r
-               .getTestResult(ttr.getUuid());\r
-               \r
+                               .getTestResult(ttr.getUuid());\r
+\r
                UnitTestTreeUtil.assertTreeTestResult(ttrRetrieved, ttrUpdated);\r
        }\r
-       \r
+\r
+       public void testMultipleUpdateScenario() throws Exception{\r
+               TreeSRegistry registry = new TreeSRegistry();\r
+\r
+               TreeSPath path = new TreeSPath("/root/test");\r
+               SimpleSElement elem = new SimpleSElement("Unit Test");\r
+               elem.getTags().put("myTag", "myTagValue");\r
+               registry.register(path, elem);\r
+               \r
+               TreeTestResult ttr = createSimpleTreeTestResult();\r
+               ttr.notifyCurrentPath(registry, path);\r
+               ttr.addResultPart(new SimpleResultPart(TestStatus.PASSED,"First test"));\r
+               \r
+               testResultDao.create(ttr);\r
+               \r
+               path = new TreeSPath("/root/test2/subtest");\r
+               elem = new SimpleSElement("Sub Test");\r
+               elem.getTags().put("myTag", "myTagValue");\r
+               registry.register(path, elem);\r
+               \r
+               ttr.notifyCurrentPath(registry, path);\r
+               ttr.addResultPart(new SimpleResultPart(TestStatus.PASSED,"Second test"));\r
+               \r
+               testResultDao.update(ttr);\r
+               \r
+               ttr.notifyCurrentPath(registry, path);\r
+               ttr.addResultPart(new SimpleResultPart(TestStatus.PASSED,"Third test with same path"));\r
+               \r
+               testResultDao.update(ttr);\r
+               \r
+               ttr.close();\r
+               \r
+               testResultDao.close(ttr.getUuid(), ttr.getCloseDate());\r
+       }\r
+\r
        @Override\r
        protected String getApplicationContextLocation() {\r
                return "org/argeo/slc/hibernate/applicationContext.xml";\r
index 37fd9d3866c357ca8ea59ce3ba99d9aa5c418017..3f8f15f6fd748de35a105ab9a3a9b9f7ec046e66 100644 (file)
@@ -24,8 +24,7 @@
        </bean>\r
 \r
        <bean id="resultLogger"\r
-               class="org.argeo.slc.core.test.tree.TreeTestResultLogger"\r
-               init-method="init">\r
+               class="org.argeo.slc.core.test.tree.TreeTestResultLogger">\r
        </bean>\r
 \r
        <bean name="testDef"\r