/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.component.execution.internal;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.easymock.Capture;
import org.easymock.EasyMock;
import org.junit.Test;
import de.rcenvironment.core.component.execution.api.ComponentExecutionContext;
import de.rcenvironment.core.component.execution.api.WorkflowExecutionControllerCallbackService;
import de.rcenvironment.core.component.testutils.ComponentExecutionContextMock;
import de.rcenvironment.core.component.testutils.ComponentExecutionRelatedInstancesFactoryDefaultStub;
/**
* Tests for {@link ComponentExecutionControllerImplTest}.
*
* @author Doreen Seider
*/
public class ComponentExecutionControllerImplTest {
private static final String TEST_VERIFICATION_TOKEN = "some-token";
private static final String INVALID_VERIFICATION_TOKEN = "some-invalid-token";
/**
* Tests if the result verification is only be done if the verification token is valid.
*/
@Test
public void testVerifyResults() {
WorkflowExecutionControllerCallbackService wfExeCtrlCallbackServiceMock =
EasyMock.createStrictMock(WorkflowExecutionControllerCallbackService.class);
ComponentExecutionRelatedInstancesFactory compExeRelatedInstancesFactoryMock =
new ComponentExecutionRelatedInstancesFactoryDefaultStub();
new ComponentExecutionControllerImpl().bindComponentExecutionRelatedInstancesFactory(compExeRelatedInstancesFactoryMock);
ComponentExecutionContext compExeCtx = new ComponentExecutionContextMock();
ComponentExecutionControllerImpl comExeCtrl = new ComponentExecutionControllerImpl(compExeCtx, wfExeCtrlCallbackServiceMock, 0);
ComponentStateMachine compStateMachineMock =
createComponentStateMachineMockAndApply(null, comExeCtrl.geComponentExecutionRelatedInstances());
assertFalse(comExeCtrl.verifyResults(TEST_VERIFICATION_TOKEN, true));
assertFalse(comExeCtrl.verifyResults(TEST_VERIFICATION_TOKEN, false));
EasyMock.verify(compStateMachineMock);
compStateMachineMock =
createComponentStateMachineMockAndApply(TEST_VERIFICATION_TOKEN, comExeCtrl.geComponentExecutionRelatedInstances());
assertFalse(comExeCtrl.verifyResults(INVALID_VERIFICATION_TOKEN, true));
assertFalse(comExeCtrl.verifyResults(INVALID_VERIFICATION_TOKEN, false));
EasyMock.verify(compStateMachineMock);
Capture<ComponentStateMachineEvent> compStateMachineEventCapture = new Capture<>();
compStateMachineMock =
createComponentStateMachineMockAndApply(TEST_VERIFICATION_TOKEN, comExeCtrl.geComponentExecutionRelatedInstances(),
compStateMachineEventCapture);
assertTrue(comExeCtrl.verifyResults(TEST_VERIFICATION_TOKEN, true));
EasyMock.verify(compStateMachineMock);
assertEquals(ComponentStateMachineEventType.RESULTS_APPROVED, compStateMachineEventCapture.getValue().getType());
compStateMachineEventCapture = new Capture<>();
compStateMachineMock =
createComponentStateMachineMockAndApply(TEST_VERIFICATION_TOKEN, comExeCtrl.geComponentExecutionRelatedInstances(),
compStateMachineEventCapture);
assertTrue(comExeCtrl.verifyResults(TEST_VERIFICATION_TOKEN, false));
EasyMock.verify(compStateMachineMock);
assertEquals(ComponentStateMachineEventType.RESULTS_REJECTED, compStateMachineEventCapture.getValue().getType());
}
private ComponentStateMachine createComponentStateMachineMockAndApply(String verificationToken,
ComponentExecutionRelatedInstances compExeRelatedInstances, Capture<ComponentStateMachineEvent> compStateMachineEventCapture) {
ComponentStateMachine comStateMachineMock = EasyMock.createStrictMock(ComponentStateMachine.class);
EasyMock.expect(comStateMachineMock.getVerificationToken()).andStubReturn(verificationToken);
if (compStateMachineEventCapture != null) {
comStateMachineMock.postEvent(EasyMock.capture(compStateMachineEventCapture));
EasyMock.expectLastCall();
}
EasyMock.replay(comStateMachineMock);
compExeRelatedInstances.compStateMachine = comStateMachineMock;
return comStateMachineMock;
}
private ComponentStateMachine createComponentStateMachineMockAndApply(String verificationToken,
ComponentExecutionRelatedInstances compExeRelatedInstances) {
return createComponentStateMachineMockAndApply(verificationToken, compExeRelatedInstances, null);
}
}