From 3ac6b9361cb1761ed67360988931e6103ef3ba9d Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Thu, 2 Oct 2008 07:46:13 +0000 Subject: [PATCH] Integrate detached with standard SLC git-svn-id: https://svn.argeo.org/slc/trunk@1673 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- org.argeo.slc.agent/pom.xml | 5 + .../slc/lib/detached/DetachedTestData.java | 7 ++ .../lib/detached/DetachedTestDefinition.java | 118 ++++++++++++++++++ 3 files changed, 130 insertions(+) create mode 100644 org.argeo.slc.agent/src/main/java/org/argeo/slc/lib/detached/DetachedTestData.java create mode 100644 org.argeo.slc.agent/src/main/java/org/argeo/slc/lib/detached/DetachedTestDefinition.java diff --git a/org.argeo.slc.agent/pom.xml b/org.argeo.slc.agent/pom.xml index 8616efb12..4c90f75d9 100644 --- a/org.argeo.slc.agent/pom.xml +++ b/org.argeo.slc.agent/pom.xml @@ -53,6 +53,11 @@ argeo-slc-core ${project.version} + + org.argeo.slc + org.argeo.slc.detached + ${project.version} + log4j 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 index 000000000..ee471cce3 --- /dev/null +++ b/org.argeo.slc.agent/src/main/java/org/argeo/slc/lib/detached/DetachedTestData.java @@ -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 index 000000000..4689c235a --- /dev/null +++ b/org.argeo.slc.agent/src/main/java/org/argeo/slc/lib/detached/DetachedTestDefinition.java @@ -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 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; + } + +} -- 2.39.2