infrastructure-tests/src/test/java/org/gcube/vremanagement/executor/client/DefaultExecutorTest.java

165 lines
5.0 KiB
Java

/**
*
*/
package org.gcube.vremanagement.executor.client;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import org.acme.HelloWorldPlugin;
import org.acme.HelloWorldPluginDeclaration;
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
import org.gcube.utils.TestUtility;
import org.gcube.vremanagement.executor.api.types.LaunchParameter;
import org.gcube.vremanagement.executor.api.types.Scheduling;
import org.gcube.vremanagement.executor.client.plugins.ExecutorPlugin;
import org.gcube.vremanagement.executor.client.proxies.SmartExecutorProxy;
import org.gcube.vremanagement.executor.exception.PluginInstanceNotFoundException;
import org.gcube.vremanagement.executor.exception.PluginNotFoundException;
import org.gcube.vremanagement.executor.plugin.PluginState;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/
*
*/
public class DefaultExecutorTest {
private static Logger logger = LoggerFactory.getLogger(DefaultExecutorTest.class);
private SmartExecutorProxy proxy;
@Before
public void before(){
SecurityTokenProvider.instance.set(TestUtility.TOKEN);
proxy = ExecutorPlugin.getExecutorProxy().build();
Assert.assertNotNull(proxy);
}
@After
public void after(){
SecurityTokenProvider.instance.reset();
}
@Test
public void launch() {
Map<String, Object> inputs = new HashMap<String, Object>();
LaunchParameter launchParameter = new LaunchParameter("Test", inputs);
try {
proxy.launch(launchParameter);
} catch (Exception e) {
Assert.assertEquals(PluginNotFoundException.class, e.getCause().getClass());
}
}
@Test
public void getState() {
String executionIdentifier = UUID.randomUUID().toString();
try {
proxy.getState(executionIdentifier);
} catch (Exception e) {
Assert.assertEquals(PluginInstanceNotFoundException.class, e.getCause().getClass());
}
}
@Test
public void testOk() throws Exception {
Map<String, Object> inputs = new HashMap<String, Object>();
inputs.put("Hello", "World");
long sleepTime = 10000; // 1000 millisec * 10 = 10 sec
inputs.put(HelloWorldPlugin.SLEEP_TIME, sleepTime);
LaunchParameter launchParameter = new LaunchParameter(HelloWorldPluginDeclaration.NAME, inputs);
try {
String executionIdentifier = proxy.launch(launchParameter);
Thread.sleep(1000);
Assert.assertEquals(PluginState.RUNNING, proxy.getState(executionIdentifier));
Thread.sleep(4000);
Assert.assertEquals(PluginState.RUNNING, proxy.getState(executionIdentifier));
Thread.sleep(6000);
Assert.assertEquals(PluginState.DONE, proxy.getState(executionIdentifier));
} catch (Exception e) {
logger.error("testOk Exception", e);
throw e;
}
}
@Test
public void testScheduledTaskNotPersisted() throws Exception {
proxy = ExecutorPlugin.getExecutorProxy((new HelloWorldPluginDeclaration()).getName()).build();
Assert.assertNotNull(proxy);
Map<String, Object> inputs = new HashMap<String, Object>();
inputs.put("Hello", "World");
long sleepTime = 10000; // 1000 millisec * 10 = 10 sec
inputs.put(HelloWorldPlugin.SLEEP_TIME, sleepTime);
// Every 5 minutes, for 12 times (one hour totally).
Scheduling scheduling = new Scheduling(60*5,12,false);
LaunchParameter launchParameter = new LaunchParameter(HelloWorldPluginDeclaration.NAME, inputs, scheduling);
try {
String executionIdentifier = proxy.launch(launchParameter);
Thread.sleep(1000);
Assert.assertEquals(PluginState.RUNNING, proxy.getState(executionIdentifier));
Thread.sleep(4000);
Assert.assertEquals(PluginState.RUNNING, proxy.getState(executionIdentifier));
Thread.sleep(6000);
Assert.assertEquals(PluginState.DONE, proxy.getState(executionIdentifier));
} catch (Exception e) {
logger.error("testOk Exception", e);
throw e;
}
}
@Test
public void testScheduledTaskPersisted() throws Exception {
proxy = ExecutorPlugin.getExecutorProxy((new HelloWorldPluginDeclaration()).getName()).build();
Assert.assertNotNull(proxy);
Map<String, Object> inputs = new HashMap<String, Object>();
inputs.put("Hello", "World");
long sleepTime = 10000; // 1000 millisec * 10 = 10 sec
inputs.put(HelloWorldPlugin.SLEEP_TIME, sleepTime);
// Every 5 minutes, for 12 times (one hour totally).
Scheduling scheduling = new Scheduling(60*5,12,true);
LaunchParameter launchParameter = new LaunchParameter(HelloWorldPluginDeclaration.NAME, inputs, scheduling);
try {
String executionIdentifier = proxy.launch(launchParameter);
Thread.sleep(1000);
Assert.assertEquals(PluginState.RUNNING, proxy.getState(executionIdentifier));
Thread.sleep(4000);
Assert.assertEquals(PluginState.RUNNING, proxy.getState(executionIdentifier));
Thread.sleep(6000);
Assert.assertEquals(PluginState.DONE, proxy.getState(executionIdentifier));
} catch (Exception e) {
logger.error("testOk Exception", e);
throw e;
}
}
}