/*******************************************************************************
* Copyright (c) 2011, 2013 Wind River Systems, Inc. and others. All rights reserved.
* This program and the accompanying materials are made available under the terms
* of the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Wind River Systems - initial API and implementation
*******************************************************************************/
package org.eclipse.tcf.te.tests.stepper;
import java.util.Map;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.tcf.te.runtime.concurrent.util.ExecutorsUtil;
import org.eclipse.tcf.te.runtime.interfaces.properties.IPropertiesContainer;
import org.eclipse.tcf.te.runtime.properties.PropertiesContainer;
import org.eclipse.tcf.te.runtime.stepper.StepperManager;
import org.eclipse.tcf.te.runtime.stepper.context.AbstractStepContext;
import org.eclipse.tcf.te.runtime.stepper.interfaces.IStep;
import org.eclipse.tcf.te.runtime.stepper.interfaces.IStepGroup;
import org.eclipse.tcf.te.runtime.stepper.interfaces.IStepGroupable;
import org.eclipse.tcf.te.runtime.stepper.interfaces.IStepper;
import org.eclipse.tcf.te.runtime.stepper.stepper.Stepper;
import org.eclipse.tcf.te.tests.CoreTestCase;
import org.eclipse.tcf.te.tests.stepper.steps.ParameterizedTestStep;
import org.eclipse.tcf.te.tests.stepper.steps.TestStep;
/**
* Stepper engine test cases.
*/
public class StepperTests extends CoreTestCase {
protected static class TestStepContext extends AbstractStepContext {
/**
* Constructor.
*/
public TestStepContext(Object contextObject) {
super(contextObject);
}
@Override
public String getId() {
return "org.eclipse.tcf.te.tests.stepper.TestStepContext"; //$NON-NLS-1$
}
@Override
public String getName() {
return "TestStepContext"; //$NON-NLS-1$
}
}
/**
* Provides a test suite to the caller which combines all single
* test bundled within this category.
*
* @return Test suite containing all test for this test category.
*/
public static Test getTestSuite() {
TestSuite testSuite = new TestSuite("Test stepper engine"); //$NON-NLS-1$
// add ourself to the test suite
testSuite.addTestSuite(StepperTests.class);
return testSuite;
}
/**
* Test the stepper extension point mechanism.
*/
public void testStepperContributions() {
assertNotNull("Unexpected return value 'null'.", StepperManager.getInstance()); //$NON-NLS-1$
}
/**
* Test the steps extension point mechanism.
*/
public void testStepContributions() {
assertNotNull("Unexpected return value 'null'.", StepperManager.getInstance()); //$NON-NLS-1$
assertNotNull("Unexpected return value 'null'.", StepperManager.getInstance().getStepExtManager()); //$NON-NLS-1$
IStep[] steps = StepperManager.getInstance().getStepExtManager().getSteps(false);
int testStepCount = 0;
for (IStep step : steps) {
if (step.getId().startsWith("org.eclipse.tcf.te.tests.stepper.step")) { //$NON-NLS-1$
testStepCount++;
} else {
continue;
}
if (step.getId().endsWith(".step1")) { //$NON-NLS-1$
assertEquals("Unexpected step label found.", "Test Step 1", step.getLabel()); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals("Unexpected step description found.", "", step.getDescription()); //$NON-NLS-1$ //$NON-NLS-2$
assertTrue("Unexpected step class type found.", step instanceof TestStep); //$NON-NLS-1$
assertEquals("Unexpected number of dependencies found.", 0, step.getDependencies().length); //$NON-NLS-1$
}
if (step.getId().endsWith(".step2")) { //$NON-NLS-1$
assertEquals("Unexpected step label found.", "Test Step 2", step.getLabel()); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals("Unexpected step description found.", "", step.getDescription()); //$NON-NLS-1$ //$NON-NLS-2$
assertTrue("Unexpected step class type found.", step instanceof ParameterizedTestStep); //$NON-NLS-1$
Map<?,?> params = ((ParameterizedTestStep)step).params;
assertNotNull("Unexpected value 'null'.", params); //$NON-NLS-1$
assertEquals("Unexpected number of parameter found.", 1, params.keySet().size()); //$NON-NLS-1$
assertTrue("Missing expected key 'param1'.", params.containsKey("param1")); //$NON-NLS-1$ //$NON-NLS-2$
assertTrue("Missing expected value 'value1'.", params.containsValue("value1")); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals("Unexpected number of dependencies found.", 0, step.getDependencies().length); //$NON-NLS-1$
}
if (step.getId().endsWith(".step3")) { //$NON-NLS-1$
assertEquals("Unexpected step label found.", "Test Step 3", step.getLabel()); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals("Unexpected step description found.", "Just another test step", step.getDescription()); //$NON-NLS-1$ //$NON-NLS-2$
assertTrue("Unexpected step class type found.", step instanceof TestStep); //$NON-NLS-1$
assertEquals("Unexpected number of dependencies found.", 0, step.getDependencies().length); //$NON-NLS-1$
}
if (step.getId().endsWith(".step4")) { //$NON-NLS-1$
assertEquals("Unexpected step label found.", "Test Step 4", step.getLabel()); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals("Unexpected step description found.", "", step.getDescription()); //$NON-NLS-1$ //$NON-NLS-2$
assertTrue("Unexpected step class type found.", step instanceof TestStep); //$NON-NLS-1$
assertEquals("Unexpected number of dependencies found.", 1, step.getDependencies().length); //$NON-NLS-1$
}
if (step.getId().endsWith(".step5")) { //$NON-NLS-1$
assertEquals("Unexpected step label found.", "Test Step 5", step.getLabel()); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals("Unexpected step description found.", "", step.getDescription()); //$NON-NLS-1$ //$NON-NLS-2$
assertTrue("Unexpected step class type found.", step instanceof TestStep); //$NON-NLS-1$
assertEquals("Unexpected number of dependencies found.", 0, step.getDependencies().length); //$NON-NLS-1$
}
}
assertEquals("Unexpected number of test steps found.", 5, testStepCount); //$NON-NLS-1$
}
/**
* Test the step group extension point mechanism.
*/
public void testStepGroupContributions() {
assertNotNull("Unexpected return value 'null'.", StepperManager.getInstance()); //$NON-NLS-1$
assertNotNull("Unexpected return value 'null'.", StepperManager.getInstance().getStepGroupExtManager()); //$NON-NLS-1$
IStepGroup[] stepGroups = StepperManager.getInstance().getStepGroupExtManager().getStepGroups(false);
int testStepGroupCount = 0;
for (IStepGroup stepGroup : stepGroups) {
if (stepGroup.getId().startsWith("org.eclipse.tcf.te.tests.stepper.stepGroup")) { //$NON-NLS-1$
testStepGroupCount++;
} else {
continue;
}
Throwable error = null;
String message = null;
IStepGroupable[] steps = null;
if (stepGroup.getId().endsWith(".stepGroup1")) { //$NON-NLS-1$
assertEquals("Unexpected step group label found.", "Test Step Group 1", stepGroup.getLabel()); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals("Unexpected step description found.", "", stepGroup.getDescription()); //$NON-NLS-1$ //$NON-NLS-2$
assertFalse("Step group is locked but should not.", stepGroup.isLocked()); //$NON-NLS-1$
assertNull("Unexpected non-null value.", stepGroup.getStepGroupIterator()); //$NON-NLS-1$
try {
steps = stepGroup.getSteps(new TestStepContext(this));
} catch (CoreException e) {
error = e;
message = e.getLocalizedMessage();
}
assertNull("Failed to determine steps from step group. Possible cause: " + message, error); //$NON-NLS-1$
assertNotNull("Unexpected return value 'null'.", steps); //$NON-NLS-1$
assertEquals("Unexpected number of steps returned.", 0, steps.length); //$NON-NLS-1$
}
if (stepGroup.getId().endsWith(".stepGroup2")) { //$NON-NLS-1$
assertEquals("Unexpected step group label found.", "Test Step Group 2", stepGroup.getLabel()); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals("Unexpected step description found.", "Just a step group description", stepGroup.getDescription()); //$NON-NLS-1$ //$NON-NLS-2$
assertTrue("Step group is not locked but should.", stepGroup.isLocked()); //$NON-NLS-1$
assertNull("Unexpected non-null value.", stepGroup.getStepGroupIterator()); //$NON-NLS-1$
error = null; message = null; steps = null;
try {
steps = stepGroup.getSteps(new TestStepContext(this));
} catch (CoreException e) {
error = e;
message = e.getLocalizedMessage();
}
assertNull("Failed to determine steps from step group. Possible cause: " + message, error); //$NON-NLS-1$
assertNotNull("Unexpected return value 'null'.", steps); //$NON-NLS-1$
assertEquals("Unexpected number of steps returned.", 0, steps.length); //$NON-NLS-1$
}
if (stepGroup.getId().endsWith(".stepGroup3")) { //$NON-NLS-1$
assertEquals("Unexpected step group label found.", "Test Step Group 3", stepGroup.getLabel()); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals("Unexpected step description found.", "", stepGroup.getDescription()); //$NON-NLS-1$ //$NON-NLS-2$
assertFalse("Step group is locked but should not.", stepGroup.isLocked()); //$NON-NLS-1$
assertNull("Unexpected non-null value.", stepGroup.getStepGroupIterator()); //$NON-NLS-1$
error = null; message = null; steps = null;
try {
steps = stepGroup.getSteps(new TestStepContext(this));
} catch (CoreException e) {
error = e;
message = e.getLocalizedMessage();
}
assertNull("Failed to determine steps from step group. Possible cause: " + message, error); //$NON-NLS-1$
assertNotNull("Unexpected return value 'null'.", steps); //$NON-NLS-1$
assertEquals("Unexpected number of steps returned.", 4, steps.length); //$NON-NLS-1$
assertEquals("Unexpected step order.", "org.eclipse.tcf.te.tests.stepper.step1", steps[0].getExtension().getId()); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals("Unexpected step order.", "org.eclipse.tcf.te.tests.stepper.step2", steps[1].getExtension().getId()); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals("Unexpected step order.", "org.eclipse.tcf.te.tests.stepper.step3", steps[2].getExtension().getId()); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals("Unexpected step order.", "org.eclipse.tcf.te.tests.stepper.step4", steps[3].getExtension().getId()); //$NON-NLS-1$ //$NON-NLS-2$
}
if (stepGroup.getId().endsWith(".stepGroup4")) { //$NON-NLS-1$
assertEquals("Unexpected step group label found.", "Test Step Group 4", stepGroup.getLabel()); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals("Unexpected step description found.", "", stepGroup.getDescription()); //$NON-NLS-1$ //$NON-NLS-2$
assertFalse("Step group is locked but should not.", stepGroup.isLocked()); //$NON-NLS-1$
assertNull("Unexpected non-null value.", stepGroup.getStepGroupIterator()); //$NON-NLS-1$
error = null; message = null; steps = null;
try {
steps = stepGroup.getSteps(new TestStepContext(this));
} catch (CoreException e) {
error = e;
message = e.getLocalizedMessage();
}
assertNull("Failed to determine steps from step group. Possible cause: " + message, error); //$NON-NLS-1$
assertNotNull("Unexpected return value 'null'.", steps); //$NON-NLS-1$
assertEquals("Unexpected number of steps returned.", 5, steps.length); //$NON-NLS-1$
assertEquals("Unexpected step order.", "org.eclipse.tcf.te.tests.stepper.step1", steps[0].getExtension().getId()); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals("Unexpected step order.", "org.eclipse.tcf.te.tests.stepper.step2", steps[1].getExtension().getId()); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals("Unexpected step order.", "org.eclipse.tcf.te.tests.stepper.step3", steps[2].getExtension().getId()); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals("Unexpected step order.", "org.eclipse.tcf.te.tests.stepper.step4", steps[3].getExtension().getId()); //$NON-NLS-1$ //$NON-NLS-2$
error = null; message = null; steps = null;
try {
steps = stepGroup.getSteps(new TestStepContext(this));
} catch (CoreException e) {
error = e;
message = e.getLocalizedMessage();
}
assertNull("Failed to determine steps from step group. Possible cause: " + message, error); //$NON-NLS-1$
assertNotNull("Unexpected return value 'null'.", steps); //$NON-NLS-1$
assertEquals("Unexpected number of steps returned.", 5, steps.length); //$NON-NLS-1$
assertEquals("Unexpected step order.", "org.eclipse.tcf.te.tests.stepper.step1", steps[0].getExtension().getId()); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals("Unexpected step order.", "org.eclipse.tcf.te.tests.stepper.step2", steps[1].getExtension().getId()); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals("Unexpected step order.", "org.eclipse.tcf.te.tests.stepper.step3", steps[2].getExtension().getId()); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals("Unexpected step order.", "org.eclipse.tcf.te.tests.stepper.step4", steps[3].getExtension().getId()); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals("Unexpected step order.", "org.eclipse.tcf.te.tests.stepper.step5", steps[4].getExtension().getId()); //$NON-NLS-1$ //$NON-NLS-2$
}
}
assertEquals("Unexpected number of test step groups found.", 4, testStepGroupCount); //$NON-NLS-1$
}
public void testExecuteStepGroup() {
final IStepper stepper = new Stepper("testExecuteStepGroup"); //$NON-NLS-1$
IPropertiesContainer properties = new PropertiesContainer();
// Initialize the stepper
stepper.initialize(new TestStepContext(this), "org.eclipse.tcf.te.tests.stepper.stepGroup4", properties, null); //$NON-NLS-1$
ExecutorsUtil.execute(new Runnable() {
@Override
public void run() {
// Execute
try {
stepper.execute();
}
catch (Exception e) {
assertNull("Unexpected exception when executing step group", e); //$NON-NLS-1$
}
}
});
// Wait for the stepper to be finished
assertFalse("Timeout executing step group", ExecutorsUtil.waitAndExecute(10000, new IStepper.ExecutionFinishedConditionTester(stepper))); //$NON-NLS-1$
assertNotNull("Missing executed step 1", properties.getProperty("org.eclipse.tcf.te.tests.stepper.step1")); //$NON-NLS-1$ //$NON-NLS-2$
assertNotNull("Missing executed step 2", properties.getProperty("org.eclipse.tcf.te.tests.stepper.step2")); //$NON-NLS-1$ //$NON-NLS-2$
assertNotNull("Missing executed step 3", properties.getProperty("org.eclipse.tcf.te.tests.stepper.step3")); //$NON-NLS-1$ //$NON-NLS-2$
assertNotNull("Missing executed step 4", properties.getProperty("org.eclipse.tcf.te.tests.stepper.step4")); //$NON-NLS-1$ //$NON-NLS-2$
assertNotNull("Missing executed step 5", properties.getProperty("org.eclipse.tcf.te.tests.stepper.step5")); //$NON-NLS-1$ //$NON-NLS-2$
}
}