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(a)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);
}