1 package org
.argeo
.slc
.lib
.detached
;
4 import java
.util
.Properties
;
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
.SimpleResultPart
;
12 import org
.argeo
.slc
.core
.test
.TestDefinition
;
13 import org
.argeo
.slc
.core
.test
.TestRun
;
14 import org
.argeo
.slc
.core
.test
.TestStatus
;
15 import org
.argeo
.slc
.core
.test
.context
.ContextUtils
;
16 import org
.argeo
.slc
.detached
.DetachedClient
;
17 import org
.argeo
.slc
.detached
.DetachedStep
;
18 import org
.argeo
.slc
.detached
.DetachedAnswer
;
19 import org
.argeo
.slc
.detached
.DetachedRequest
;
20 import org
.argeo
.slc
.detached
.ui
.UiStep
;
21 import org
.springframework
.beans
.BeansException
;
22 import org
.springframework
.beans
.PropertyValue
;
23 import org
.springframework
.beans
.factory
.BeanFactory
;
24 import org
.springframework
.beans
.factory
.BeanFactoryAware
;
25 import org
.springframework
.beans
.factory
.BeanInitializationException
;
26 import org
.springframework
.beans
.factory
.BeanNameAware
;
27 import org
.springframework
.beans
.factory
.InitializingBean
;
28 import org
.springframework
.beans
.factory
.config
.BeanDefinition
;
29 import org
.springframework
.beans
.factory
.config
.BeanReference
;
30 import org
.springframework
.beans
.factory
.support
.BeanDefinitionRegistry
;
32 public class DetachedTestDefinition
extends TreeSRelatedHelper
implements
33 TestDefinition
, BeanNameAware
, BeanFactoryAware
, InitializingBean
{
34 private final static Log log
= LogFactory
35 .getLog(DetachedTestDefinition
.class);
37 private DetachedStep step
;
38 private DetachedClient client
;
41 private String testDefBeanName
= null;
42 private BeanDefinitionRegistry beanDefinitionRegistry
= null;
43 private String stepBeanName
= null;
45 public void execute(TestRun testRun
) {
46 // Look for step bean name
47 String stepBeanNameT
= null;
48 if (this.stepBeanName
== null && step
!= null) {
49 if (step
instanceof UiStep
) {
50 stepBeanNameT
= ((UiStep
) step
).getBeanName();
52 // Introspects bean factory in order to find step bean name
53 BeanDefinition thisBeanDef
= beanDefinitionRegistry
54 .getBeanDefinition(testDefBeanName
);
55 PropertyValue propValue
= thisBeanDef
.getPropertyValues()
56 .getPropertyValue("step");
57 Object stepBeanRef
= propValue
.getValue();
58 BeanReference ref
= (BeanReference
) stepBeanRef
;
59 stepBeanNameT
= ref
.getBeanName();
61 } else if (this.stepBeanName
!= null) {
62 stepBeanNameT
= this.stepBeanName
;
66 DetachedRequest request
= new DetachedRequest();
67 request
.setPath(getBasePath().toString());
68 request
.setUuid(UUID
.randomUUID().toString());
69 request
.setRef(stepBeanNameT
);
71 DetachedTestData testData
= testRun
.getTestData();
72 if (testData
!= null) {
73 Map
<String
, Object
> values
= testData
.getValues();
74 Properties inputParameters
= new Properties();
75 inputParameters
.putAll(values
);// TODO: check conversions to string
76 request
.setProperties(inputParameters
);
80 client
.sendRequest(request
);
81 } catch (Exception e
) {
82 throw new SlcException("Could not send request for step "
87 DetachedAnswer answer
= client
.receiveAnswer();
88 if (answer
.getStatus() == DetachedAnswer
.ERROR
)
89 throw new SlcException("Error when executing step "
90 + answer
.getUuid() + ": " + answer
.getLog());
92 log
.info("Received answer for '" + request
.getRef() + "' ("
93 + answer
.getStatusAsString() + "):" + answer
.getLog());
95 if (testData
!= null) {
96 Properties outputParameters
= answer
.getProperties();
97 for (Object key
: outputParameters
.keySet())
98 testData
.getValues().put(key
.toString(),
99 outputParameters
.get(key
));
101 } catch (Exception e
) {
102 throw new SlcException("Could not receive answer #"
103 + request
.getUuid() + " for step " + stepBeanNameT
, e
);
106 if (testData
!= null) {
107 ContextUtils
.compareReachedExpected(testData
, testRun
108 .getTestResult(), this);
110 testRun
.getTestResult().addResultPart(
111 new SimpleResultPart(TestStatus
.PASSED
, "Step "
112 + stepBeanNameT
+ " executed successfully"));
116 public void setBeanName(String name
) {
117 this.testDefBeanName
= name
;
120 public void setBeanFactory(BeanFactory beanFactory
) throws BeansException
{
121 if (beanFactory
instanceof BeanDefinitionRegistry
)
122 beanDefinitionRegistry
= (BeanDefinitionRegistry
) beanFactory
;
124 throw new BeanInitializationException(
125 "Require BeanDefinitionRegistry");
128 public void afterPropertiesSet() throws Exception
{
131 public void setStep(DetachedStep step
) {
135 public void setClient(DetachedClient client
) {
136 this.client
= client
;
139 public void setStepBeanName(String stepBeanName
) {
140 this.stepBeanName
= stepBeanName
;