]> git.argeo.org Git - gpl/argeo-slc.git/commitdiff
Integrate detached with standard SLC
authorMathieu Baudier <mbaudier@argeo.org>
Thu, 2 Oct 2008 07:46:13 +0000 (07:46 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Thu, 2 Oct 2008 07:46:13 +0000 (07:46 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@1673 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

org.argeo.slc.agent/pom.xml
org.argeo.slc.agent/src/main/java/org/argeo/slc/lib/detached/DetachedTestData.java [new file with mode: 0644]
org.argeo.slc.agent/src/main/java/org/argeo/slc/lib/detached/DetachedTestDefinition.java [new file with mode: 0644]

index 8616efb12e35a55ccf311fae0d2c23723ba2ce17..4c90f75d9aeefc2eb4cd48939fca3e22ff47f4ab 100644 (file)
                        <artifactId>argeo-slc-core</artifactId>
                        <version>${project.version}</version>
                </dependency>
+        <dependency>
+            <groupId>org.argeo.slc</groupId>
+            <artifactId>org.argeo.slc.detached</artifactId>
+            <version>${project.version}</version>
+        </dependency>
 
                <dependency>
                        <groupId>log4j</groupId>
diff --git a/org.argeo.slc.agent/src/main/java/org/argeo/slc/lib/detached/DetachedTestData.java b/org.argeo.slc.agent/src/main/java/org/argeo/slc/lib/detached/DetachedTestData.java
new file mode 100644 (file)
index 0000000..ee471cc
--- /dev/null
@@ -0,0 +1,7 @@
+package org.argeo.slc.lib.detached;
+
+import org.argeo.slc.core.test.context.DefaultContextTestData;
+
+public class DetachedTestData extends DefaultContextTestData {
+
+}
diff --git a/org.argeo.slc.agent/src/main/java/org/argeo/slc/lib/detached/DetachedTestDefinition.java b/org.argeo.slc.agent/src/main/java/org/argeo/slc/lib/detached/DetachedTestDefinition.java
new file mode 100644 (file)
index 0000000..4689c23
--- /dev/null
@@ -0,0 +1,118 @@
+package org.argeo.slc.lib.detached;
+
+import java.util.Map;
+import java.util.Properties;
+import java.util.UUID;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.argeo.slc.core.SlcException;
+import org.argeo.slc.core.structure.tree.TreeSRelatedHelper;
+import org.argeo.slc.core.test.TestDefinition;
+import org.argeo.slc.core.test.TestRun;
+import org.argeo.slc.core.test.context.ContextUtils;
+import org.argeo.slc.detached.DetachedClient;
+import org.argeo.slc.detached.DetachedStep;
+import org.argeo.slc.detached.DetachedAnswer;
+import org.argeo.slc.detached.DetachedRequest;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.PropertyValue;
+import org.springframework.beans.factory.BeanFactory;
+import org.springframework.beans.factory.BeanFactoryAware;
+import org.springframework.beans.factory.BeanInitializationException;
+import org.springframework.beans.factory.BeanNameAware;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.config.BeanDefinition;
+import org.springframework.beans.factory.config.BeanReference;
+import org.springframework.beans.factory.support.BeanDefinitionRegistry;
+
+public class DetachedTestDefinition extends TreeSRelatedHelper implements
+               TestDefinition, BeanNameAware, BeanFactoryAware, InitializingBean {
+       private final static Log log = LogFactory
+                       .getLog(DetachedTestDefinition.class);
+
+       private DetachedStep step;
+       private DetachedClient client;
+
+       // Spring properties
+       private String thisBeanName = null;
+       private BeanDefinitionRegistry beanDefinitionRegistry = null;
+       private String stepBeanName = null;
+
+       public void execute(TestRun testRun) {
+               DetachedTestData testData = testRun.getTestData();
+               Map<String, Object> values = testData.getValues();
+               Properties inputParameters = new Properties();
+               inputParameters.putAll(values);// TODO: check conversions to string
+
+               DetachedRequest request = new DetachedRequest();
+               request.setPath(getBasePath().toString());
+               request.setUuid(UUID.randomUUID().toString());
+               request.setRef(stepBeanName);
+               request.setProperties(inputParameters);
+
+               try {
+                       client.sendRequest(request);
+                       log.debug("Sent detached request #" + request.getUuid()
+                                       + " for step " + stepBeanName);
+               } catch (Exception e) {
+                       throw new SlcException("Could not send request for step "
+                                       + stepBeanName, e);
+               }
+
+               try {
+                       DetachedAnswer answer = client.receiveAnswer();
+                       Properties outputParameters = answer.getProperties();
+                       for (Object key : outputParameters.keySet())
+                               testData.getValues().put(key.toString(),
+                                               outputParameters.get(key));
+                       log.debug("Received detached answer #" + answer.getUuid()
+                                       + " for step " + stepBeanName);
+               } catch (Exception e) {
+                       throw new SlcException("Could not receive answer #"
+                                       + request.getUuid() + " for step " + stepBeanName, e);
+               }
+
+               ContextUtils.compareReachedExpected(testData, testRun.getTestResult(),
+                               this);
+       }
+
+       public void setBeanName(String name) {
+               this.thisBeanName = name;
+       }
+
+       public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
+               if (beanFactory instanceof BeanDefinitionRegistry)
+                       beanDefinitionRegistry = (BeanDefinitionRegistry) beanFactory;
+               else
+                       throw new BeanInitializationException(
+                                       "Require BeanDefinitionRegistry");
+       }
+
+       public void afterPropertiesSet() throws Exception {
+               if (stepBeanName == null) {
+                       // Introspects bean factory in order to find step bean name
+                       BeanDefinition thisBeanDef = beanDefinitionRegistry
+                                       .getBeanDefinition(thisBeanName);
+                       PropertyValue propValue = thisBeanDef.getPropertyValues()
+                                       .getPropertyValue("step");
+                       Object stepBeanRef = propValue.getValue();
+                       log.info("stepBeanRef.class=" + stepBeanRef.getClass());
+                       BeanReference ref = (BeanReference) stepBeanRef;
+                       stepBeanName = ref.getBeanName();
+               }
+       }
+
+       public void setStep(DetachedStep step) {
+               this.step = step;
+       }
+
+       public void setClient(DetachedClient client) {
+               this.client = client;
+       }
+
+       public void setStepBeanName(String stepBeanName) {
+               this.stepBeanName = stepBeanName;
+       }
+
+}