package org.infinispan.scripting;
import static org.testng.AssertJUnit.assertEquals;
import java.util.List;
import org.infinispan.commons.CacheException;
import org.infinispan.manager.EmbeddedCacheManager;
import org.infinispan.scripting.impl.ScriptTask;
import org.infinispan.scripting.utils.ScriptingUtils;
import org.infinispan.tasks.Task;
import org.infinispan.tasks.TaskContext;
import org.infinispan.tasks.TaskExecutionMode;
import org.infinispan.tasks.TaskManager;
import org.infinispan.tasks.spi.TaskEngine;
import org.infinispan.test.SingleCacheManagerTest;
import org.infinispan.test.fwk.CleanupAfterMethod;
import org.infinispan.test.fwk.TestCacheManagerFactory;
import org.testng.annotations.Test;
@Test(groups="functional", testName="scripting.ScriptingTaskManagerTest")
@CleanupAfterMethod
public class ScriptingTaskManagerTest extends SingleCacheManagerTest {
protected static final String TEST_SCRIPT = "test.js";
protected static final String BROKEN_SCRIPT = "brokenTest.js";
protected TaskManager taskManager;
@Override
protected EmbeddedCacheManager createCacheManager() throws Exception {
return TestCacheManagerFactory.createCacheManager();
}
@Override
protected void setup() throws Exception {
super.setup();
taskManager = cacheManager.getGlobalComponentRegistry().getComponent(TaskManager.class);
cacheManager.defineConfiguration(ScriptingTest.CACHE_NAME, cacheManager.getDefaultCacheConfiguration());
}
public void testTask() throws Exception {
ScriptingManager scriptingManager = cacheManager.getGlobalComponentRegistry().getComponent(ScriptingManager.class);
ScriptingUtils.loadScript(scriptingManager, TEST_SCRIPT);
String result = (String) taskManager.runTask(TEST_SCRIPT, new TaskContext().addParameter("a", "a")).get();
assertEquals("a", result);
List<Task> tasks = taskManager.getTasks();
assertEquals(1, tasks.size());
ScriptTask scriptTask = (ScriptTask) tasks.get(0);
assertEquals("test.js", scriptTask.getName());
assertEquals(TaskExecutionMode.ONE_NODE, scriptTask.getExecutionMode());
assertEquals("Script", scriptTask.getType());
}
public void testAvailableEngines() {
List<TaskEngine> engines = taskManager.getEngines();
assertEquals(1, engines.size());
assertEquals("Script", engines.get(0).getName());
}
@Test(expectedExceptions = CacheException.class, expectedExceptionsMessageRegExp = ".*Script execution error.*")
public void testBrokenTask() throws Exception {
ScriptingManager scriptingManager = cacheManager.getGlobalComponentRegistry().getComponent(ScriptingManager.class);
ScriptingUtils.loadScript(scriptingManager, BROKEN_SCRIPT);
taskManager.runTask(BROKEN_SCRIPT, new TaskContext()).get();
}
}