modules/plugins/alt-lang/alt-lang-plugin/src/main/java/org/rhq/plugins/altlang/AltLangComponent.java | 12 -- modules/plugins/alt-lang/alt-lang-plugin/src/test/java/org/rhq/plugins/altlang/AltLangComponentTest.java | 52 +++++++++- 2 files changed, 53 insertions(+), 11 deletions(-)
New commits: commit 8f5f9bd2c90730f9a85f18f80e16b88de53cc987 Author: John Sanda john@localhost.localdomain Date: Wed Dec 30 22:15:43 2009 -0500
Refactoring invokeOperation method to get it under test
diff --git a/modules/plugins/alt-lang/alt-lang-plugin/src/main/java/org/rhq/plugins/altlang/AltLangComponent.java b/modules/plugins/alt-lang/alt-lang-plugin/src/main/java/org/rhq/plugins/altlang/AltLangComponent.java index 4ec45d0..e2149c3 100644 --- a/modules/plugins/alt-lang/alt-lang-plugin/src/main/java/org/rhq/plugins/altlang/AltLangComponent.java +++ b/modules/plugins/alt-lang/alt-lang-plugin/src/main/java/org/rhq/plugins/altlang/AltLangComponent.java @@ -103,15 +103,13 @@ public class AltLangComponent extends AltLangAbstractComponent Action action = createAction("operations", name); ScriptMetadata metadata = resolveScript(resourceContext.getPluginConfiguration(), action);
- ScriptEngine scriptEngine = createScriptEngine(metadata); - - Map<String, Object> vars = new HashMap<String, Object>(); - vars.put("operation", name); - vars.put("parameters", parameters); + Map<String, Object> bindings = new HashMap<String, Object>(); + bindings.put("action", action); + bindings.put("resourceContext", resourceContext); + bindings.put("parameters", parameters);
- setBindings(scriptEngine, action, vars); + OperationResult result = scriptExecutor.executeScript(metadata, bindings);
- OperationResult result = (OperationResult) scriptEngine.eval(loadScript(metadata)); return result; }
diff --git a/modules/plugins/alt-lang/alt-lang-plugin/src/test/java/org/rhq/plugins/altlang/AltLangComponentTest.java b/modules/plugins/alt-lang/alt-lang-plugin/src/test/java/org/rhq/plugins/altlang/AltLangComponentTest.java index 21bbd71..20e15c3 100644 --- a/modules/plugins/alt-lang/alt-lang-plugin/src/test/java/org/rhq/plugins/altlang/AltLangComponentTest.java +++ b/modules/plugins/alt-lang/alt-lang-plugin/src/test/java/org/rhq/plugins/altlang/AltLangComponentTest.java @@ -30,10 +30,13 @@ import static org.hamcrest.collection.IsMapContaining.*; import org.hamcrest.Matcher; import org.jmock.Expectations; import org.rhq.core.domain.configuration.Configuration; +import org.rhq.core.domain.configuration.PropertySimple; import org.rhq.core.domain.measurement.AvailabilityType; import org.rhq.core.domain.resource.Resource; import org.rhq.core.domain.resource.ResourceType; import org.rhq.core.pluginapi.inventory.ResourceContext; +import org.rhq.core.pluginapi.operation.OperationFacet; +import org.rhq.core.pluginapi.operation.OperationResult; import org.rhq.test.JMockTest; import org.rhq.test.jmock.PropertyMatcher; import org.testng.annotations.BeforeMethod; @@ -73,6 +76,10 @@ public class AltLangComponentTest extends JMockTest { resourceContext = new FakeResourceContext(createResource());
metadata = new ScriptMetadata(); + metadata.setClasspathDirectory("/"); + metadata.setExtension("js"); + metadata.setLang("javascript"); + metadata.setScriptName("altlang_test");
action = null; } @@ -167,6 +174,46 @@ public class AltLangComponentTest extends JMockTest { ); }
+ @Test + public void scriptToInvokeOperationShouldBeCalledWithCorrectBindings() throws Exception { + component.setResourceContext(resourceContext); + + String operationName = "testOp"; + + action = new Action("operations", operationName, resourceContext.getResourceType()); + + final Configuration parameters = new Configuration(); + parameters.put(new PropertySimple("foo", "bar")); + + final OperationResult expectedResult = new OperationResult(); + expectedResult.setSimpleResult("testOp executed"); + + final Map<String, Object> bindings = new HashMap<String, Object>(); + bindings.put("resourceContext", resourceContext); + bindings.put("action", action); + + context.checking(new Expectations() {{ + allowing(scriptResolverFactory).getScriptResolver(); will(returnValue(scriptResolver)); + + atLeast(1).of(scriptResolver).resolveScript(with(resourceContext.getPluginConfiguration()), + with(matchingAction(action))); will(returnValue(metadata)); + + // This expectation verifies that scriptExecutor is passes the correct arguments. First, it checks that + // the metadata argument matches and then it checks the bindings argument. The bindings argument is a map + // of objects to be bound as script variables. This expectation verifies that the minimum, required + // variables are bound. + oneOf(scriptExecutor).executeScript(with(matchingMetadata(metadata)), + with(allOf(hasEntry(equal("action"), matchingAction(action)), + hasEntry(equal("resourceContext"), same(resourceContext)), + hasEntry(equal("parameters"), equal(parameters))))); + will(returnValue(expectedResult)); + }}); + + OperationResult actualResult = component.invokeOperation(operationName, parameters); + + assertEquals(actualResult, expectedResult, "Expected to get back operation result from the executed script"); + } + public static Matcher<Action> matchingAction(Action expected) { return new PropertyMatcher<Action>(expected); } @@ -183,10 +230,7 @@ public class AltLangComponentTest extends JMockTest { return resource; }
- static class FakeResourceContext extends ResourceContext { - private Configuration pluginConfiguration; - private ResourceType resourceType; - + static class FakeResourceContext extends ResourceContext { public FakeResourceContext(Resource resource) { super(resource, null, null, null, null, null, null, null, null, null, null, null); }
rhq-commits@lists.fedorahosted.org