]> git.argeo.org Git - gpl/argeo-slc.git/blob - org.argeo.slc.agent/src/main/java/org/argeo/slc/lib/detached/DetachedTestDefinition.java
Integrate XML-based file exchanges.
[gpl/argeo-slc.git] / org.argeo.slc.agent / src / main / java / org / argeo / slc / lib / detached / DetachedTestDefinition.java
1 package org.argeo.slc.lib.detached;
2
3 import java.util.Map;
4 import java.util.Properties;
5 import java.util.UUID;
6
7 import org.apache.commons.logging.Log;
8 import org.apache.commons.logging.LogFactory;
9 import org.argeo.slc.core.SlcException;
10 import org.argeo.slc.core.structure.tree.TreeSRelatedHelper;
11 import org.argeo.slc.core.test.TestDefinition;
12 import org.argeo.slc.core.test.TestRun;
13 import org.argeo.slc.core.test.context.ContextUtils;
14 import org.argeo.slc.detached.DetachedClient;
15 import org.argeo.slc.detached.DetachedStep;
16 import org.argeo.slc.detached.DetachedAnswer;
17 import org.argeo.slc.detached.DetachedRequest;
18 import org.springframework.beans.BeansException;
19 import org.springframework.beans.PropertyValue;
20 import org.springframework.beans.factory.BeanFactory;
21 import org.springframework.beans.factory.BeanFactoryAware;
22 import org.springframework.beans.factory.BeanInitializationException;
23 import org.springframework.beans.factory.BeanNameAware;
24 import org.springframework.beans.factory.InitializingBean;
25 import org.springframework.beans.factory.config.BeanDefinition;
26 import org.springframework.beans.factory.config.BeanReference;
27 import org.springframework.beans.factory.support.BeanDefinitionRegistry;
28
29 public class DetachedTestDefinition extends TreeSRelatedHelper implements
30 TestDefinition, BeanNameAware, BeanFactoryAware, InitializingBean {
31 private final static Log log = LogFactory
32 .getLog(DetachedTestDefinition.class);
33
34 private DetachedStep step;
35 private DetachedClient client;
36
37 // Spring properties
38 private String thisBeanName = null;
39 private BeanDefinitionRegistry beanDefinitionRegistry = null;
40 private String stepBeanName = null;
41
42 public void execute(TestRun testRun) {
43 DetachedTestData testData = testRun.getTestData();
44 Map<String, Object> values = testData.getValues();
45 Properties inputParameters = new Properties();
46 inputParameters.putAll(values);// TODO: check conversions to string
47
48 DetachedRequest request = new DetachedRequest();
49 request.setPath(getBasePath().toString());
50 request.setUuid(UUID.randomUUID().toString());
51 request.setRef(stepBeanName);
52 request.setProperties(inputParameters);
53
54 try {
55 client.sendRequest(request);
56 } catch (Exception e) {
57 throw new SlcException("Could not send request for step "
58 + stepBeanName, e);
59 }
60
61 try {
62 DetachedAnswer answer = client.receiveAnswer();
63 if (answer.getStatus() == DetachedAnswer.ERROR)
64 throw new SlcException("Error when executing step "
65 + answer.getUuid() + ": " + answer.getLog());
66 else
67 log.info("Step answer: " + answer.getLog());
68 Properties outputParameters = answer.getProperties();
69 for (Object key : outputParameters.keySet())
70 testData.getValues().put(key.toString(),
71 outputParameters.get(key));
72 } catch (Exception e) {
73 throw new SlcException("Could not receive answer #"
74 + request.getUuid() + " for step " + stepBeanName, e);
75 }
76
77 ContextUtils.compareReachedExpected(testData, testRun.getTestResult(),
78 this);
79 }
80
81 public void setBeanName(String name) {
82 this.thisBeanName = name;
83 }
84
85 public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
86 if (beanFactory instanceof BeanDefinitionRegistry)
87 beanDefinitionRegistry = (BeanDefinitionRegistry) beanFactory;
88 else
89 throw new BeanInitializationException(
90 "Require BeanDefinitionRegistry");
91 }
92
93 public void afterPropertiesSet() throws Exception {
94 if (stepBeanName == null) {
95 // Introspects bean factory in order to find step bean name
96 BeanDefinition thisBeanDef = beanDefinitionRegistry
97 .getBeanDefinition(thisBeanName);
98 PropertyValue propValue = thisBeanDef.getPropertyValues()
99 .getPropertyValue("step");
100 Object stepBeanRef = propValue.getValue();
101 BeanReference ref = (BeanReference) stepBeanRef;
102 stepBeanName = ref.getBeanName();
103 }
104 }
105
106 public void setStep(DetachedStep step) {
107 this.step = step;
108 }
109
110 public void setClient(DetachedClient client) {
111 this.client = client;
112 }
113
114 public void setStepBeanName(String stepBeanName) {
115 this.stepBeanName = stepBeanName;
116 }
117
118 }