+++ /dev/null
-/*
- * Copyright (C) 2007-2012 Argeo GmbH
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-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.SlcException;
-import org.argeo.slc.core.test.SimpleResultPart;
-import org.argeo.slc.core.test.context.ContextUtils;
-import org.argeo.slc.core.test.context.DefaultContextTestData;
-import org.argeo.slc.detached.DetachedAnswer;
-import org.argeo.slc.detached.DetachedClient;
-import org.argeo.slc.detached.DetachedRequest;
-import org.argeo.slc.detached.DetachedStep;
-import org.argeo.slc.detached.ui.UiStep;
-import org.argeo.slc.test.TestDefinition;
-import org.argeo.slc.test.TestResult;
-import org.argeo.slc.test.TestRun;
-import org.argeo.slc.test.TestStatus;
-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 implements TestDefinition, BeanNameAware,
- BeanFactoryAware, InitializingBean {
- private final static Log log = LogFactory
- .getLog(DetachedTestDefinition.class);
-
- private DetachedStep step;
- private DetachedClient client;
-
- // Spring properties
- private String testDefBeanName = null;
- private BeanDefinitionRegistry beanDefinitionRegistry = null;
- private String stepRef = null;
-
- public void execute(TestRun testRun) {
- // Look for step bean name
- String stepBeanNameT = null;
- if (this.stepRef == null && step != null) {
- if (step instanceof UiStep) {
- stepBeanNameT = ((UiStep) step).getBeanName();
- } else {
- // Introspects bean factory in order to find step bean name
- BeanDefinition thisBeanDef = beanDefinitionRegistry
- .getBeanDefinition(testDefBeanName);
- PropertyValue propValue = thisBeanDef.getPropertyValues()
- .getPropertyValue("step");
- Object stepBeanRef = propValue.getValue();
- BeanReference ref = (BeanReference) stepBeanRef;
- stepBeanNameT = ref.getBeanName();
- }
- } else if (this.stepRef != null) {
- stepBeanNameT = this.stepRef;
- }
-
- // Execute
- DetachedRequest request = new DetachedRequest();
- request.setUuid(UUID.randomUUID().toString());
- request.setRef(stepBeanNameT);
-
- DefaultContextTestData testData = testRun.getTestData();
- if (testData != null) {
- Map<String, Object> values = testData.getValues();
- Properties inputParameters = new Properties();
- inputParameters.putAll(values);// TODO: check conversions to string
- request.setProperties(inputParameters);
- }
-
- try {
- client.sendRequest(request);
- } catch (Exception e) {
- throw new SlcException("Could not send request for step "
- + stepBeanNameT, e);
- }
-
- DetachedAnswer answer;
- try {
- answer = client.receiveAnswer();
- } catch (Exception e) {
- throw new SlcException("Could not receive answer #"
- + request.getUuid() + " for step " + stepBeanNameT, e);
- }
-
- if (answer.getStatus() == DetachedAnswer.ERROR)
- throw new SlcException("Error when executing step "
- + answer.getUuid() + ": " + answer.getLog());
- else
- log.info("Received answer for '" + request.getRef() + "' ("
- + answer.getStatusAsString() + "):" + answer.getLog());
-
- if (testData != null) {
- Properties outputParameters = answer.getProperties();
- for (Object key : outputParameters.keySet())
- testData.getValues().put(key.toString(),
- outputParameters.get(key));
- }
-
- if (testData != null) {
- ContextUtils.compareReachedExpected(testData,
- testRun.getTestResult());
- } else {
- ((TestResult) testRun.getTestResult())
- .addResultPart(new SimpleResultPart(TestStatus.PASSED,
- "Step " + stepBeanNameT + " executed successfully"));
- }
- }
-
- public void setBeanName(String name) {
- this.testDefBeanName = 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 {
- }
-
- public void setStep(DetachedStep step) {
- this.step = step;
- }
-
- public void setClient(DetachedClient client) {
- this.client = client;
- }
-
- public void setStepRef(String stepBeanName) {
- this.stepRef = stepBeanName;
- }
-
-}