2017-02-01 17:01:15 +01:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
package org.gcube.vremanagement.executor;
|
|
|
|
|
|
|
|
import java.io.IOException;
|
2019-09-24 14:59:25 +02:00
|
|
|
import java.util.ArrayList;
|
2017-02-01 17:01:15 +01:00
|
|
|
import java.util.Calendar;
|
|
|
|
import java.util.HashMap;
|
2019-09-24 14:59:25 +02:00
|
|
|
import java.util.List;
|
2017-02-01 17:01:15 +01:00
|
|
|
import java.util.Map;
|
|
|
|
import java.util.UUID;
|
|
|
|
|
2020-07-10 18:16:41 +02:00
|
|
|
import org.gcube.com.fasterxml.jackson.core.JsonGenerationException;
|
|
|
|
import org.gcube.com.fasterxml.jackson.databind.JsonMappingException;
|
|
|
|
import org.gcube.com.fasterxml.jackson.databind.ObjectMapper;
|
2017-02-01 17:01:15 +01:00
|
|
|
import org.gcube.vremanagement.executor.api.types.LaunchParameter;
|
|
|
|
import org.gcube.vremanagement.executor.api.types.Scheduling;
|
|
|
|
import org.gcube.vremanagement.executor.exception.InvalidPluginStateEvolutionException;
|
2019-09-24 14:59:25 +02:00
|
|
|
import org.gcube.vremanagement.executor.json.ExtendedSEMapper;
|
2018-01-10 17:33:26 +01:00
|
|
|
import org.gcube.vremanagement.executor.json.SEMapper;
|
2020-09-30 11:19:49 +02:00
|
|
|
import org.gcube.vremanagement.executor.plugin.Plugin;
|
|
|
|
import org.gcube.vremanagement.executor.plugin.PluginDefinition;
|
2017-02-01 17:01:15 +01:00
|
|
|
import org.gcube.vremanagement.executor.plugin.PluginState;
|
|
|
|
import org.gcube.vremanagement.executor.plugin.PluginStateEvolution;
|
|
|
|
import org.gcube.vremanagement.executor.plugin.Ref;
|
|
|
|
import org.gcube.vremanagement.executor.plugin.RunOn;
|
2019-09-24 14:59:25 +02:00
|
|
|
import org.gcube.vremanagement.executor.pluginmanager.PluginManager;
|
2017-02-01 17:01:15 +01:00
|
|
|
import org.gcube.vremanagement.executor.scheduledtask.ScheduledTask;
|
2020-09-30 11:19:49 +02:00
|
|
|
import org.gcube.vremanagement.helloworld.HelloWorldPlugin;
|
2017-02-01 17:01:15 +01:00
|
|
|
import org.junit.Test;
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @author Luca Frosini (ISTI - CNR)
|
|
|
|
*
|
|
|
|
*/
|
2019-02-21 14:12:27 +01:00
|
|
|
public class SerializationTest extends ContextTest {
|
2019-09-24 14:59:25 +02:00
|
|
|
|
2017-02-01 17:01:15 +01:00
|
|
|
private static Logger logger = LoggerFactory.getLogger(SerializationTest.class);
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void testScheduling() throws JsonGenerationException, JsonMappingException, IOException {
|
2019-09-24 14:59:25 +02:00
|
|
|
Map<String,Object> inputs = new HashMap<String,Object>();
|
2017-02-01 17:01:15 +01:00
|
|
|
inputs.put("Hello", "World");
|
|
|
|
long sleepTime = 10000;
|
|
|
|
inputs.put("sleepTime", sleepTime);
|
|
|
|
|
|
|
|
Scheduling scheduling = new Scheduling(20);
|
|
|
|
scheduling.setGlobal(true);
|
|
|
|
|
|
|
|
LaunchParameter launchParameter = new LaunchParameter("HelloWorld", inputs, scheduling);
|
|
|
|
logger.debug("{} to be Marshalled : {}", launchParameter.getClass().getSimpleName(), launchParameter);
|
|
|
|
|
|
|
|
ObjectMapper objectMapper = new ObjectMapper();
|
|
|
|
String launchParameterJSONString = objectMapper.writeValueAsString(launchParameter);
|
|
|
|
logger.debug("Marshalled : {}", launchParameterJSONString);
|
|
|
|
|
2019-09-24 14:59:25 +02:00
|
|
|
LaunchParameter launchParameterUnmarshalled = objectMapper.readValue(launchParameterJSONString,
|
|
|
|
LaunchParameter.class);
|
|
|
|
logger.debug("UnMarshalled : {}", launchParameterUnmarshalled);
|
2017-02-01 17:01:15 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void testScheduledTask() throws JsonGenerationException, JsonMappingException, IOException {
|
2019-09-24 14:59:25 +02:00
|
|
|
Map<String,Object> inputs = new HashMap<String,Object>();
|
2017-02-01 17:01:15 +01:00
|
|
|
inputs.put("Hello", "World");
|
|
|
|
long sleepTime = 10000;
|
|
|
|
inputs.put("sleepTime", sleepTime);
|
|
|
|
|
|
|
|
Scheduling scheduling = new Scheduling(20);
|
|
|
|
scheduling.setGlobal(true);
|
|
|
|
|
|
|
|
LaunchParameter launchParameter = new LaunchParameter("HelloWorld", inputs, scheduling);
|
|
|
|
UUID uuid = UUID.randomUUID();
|
|
|
|
Ref hostingNode = new Ref(UUID.randomUUID().toString(), "localhost");
|
|
|
|
Ref eService = new Ref(UUID.randomUUID().toString(), "localhost");
|
|
|
|
RunOn runOn = new RunOn(hostingNode, eService);
|
|
|
|
ScheduledTask scheduledTask = new ScheduledTask(uuid, launchParameter, runOn);
|
|
|
|
logger.debug("{} to be Marshalled : {}", scheduledTask.getClass().getSimpleName(), launchParameter);
|
|
|
|
|
2019-09-24 14:59:25 +02:00
|
|
|
String scheduledTaskJSONString = ExtendedSEMapper.getInstance().marshal(scheduledTask);
|
2017-02-01 17:01:15 +01:00
|
|
|
logger.debug("Marshalled : {}", scheduledTaskJSONString);
|
|
|
|
|
2019-09-24 14:59:25 +02:00
|
|
|
ScheduledTask scheduledTaskUnmarshalled = ExtendedSEMapper.getInstance().unmarshal(ScheduledTask.class,
|
|
|
|
scheduledTaskJSONString);
|
|
|
|
logger.debug("UnMarshalled : {}", scheduledTaskUnmarshalled);
|
|
|
|
|
2017-02-01 17:01:15 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2019-09-24 14:59:25 +02:00
|
|
|
public void testPluginEvolutionState()
|
|
|
|
throws JsonGenerationException, JsonMappingException, IOException, InvalidPluginStateEvolutionException {
|
2017-02-01 17:01:15 +01:00
|
|
|
|
2019-09-24 14:59:25 +02:00
|
|
|
PluginStateEvolution pes = new PluginStateEvolution(UUID.randomUUID(), 1,
|
2020-09-30 11:19:49 +02:00
|
|
|
Calendar.getInstance().getTimeInMillis(), new HelloWorldPlugin(), PluginState.RUNNING, 10);
|
2017-02-01 17:01:15 +01:00
|
|
|
logger.debug("{} to be Marshalled : {}", pes.getClass().getSimpleName(), pes);
|
|
|
|
|
|
|
|
ObjectMapper objectMapper = new ObjectMapper();
|
|
|
|
String scheduledTaskJSONString = objectMapper.writeValueAsString(pes);
|
|
|
|
logger.debug("Marshalled : {}", scheduledTaskJSONString);
|
|
|
|
|
2019-09-24 14:59:25 +02:00
|
|
|
PluginStateEvolution pesUnmarshalled = objectMapper.readValue(scheduledTaskJSONString,
|
|
|
|
PluginStateEvolution.class);
|
|
|
|
logger.debug("UnMarshalled : {}", pesUnmarshalled);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void testAvailablePluginMarshalling() throws Exception {
|
2020-10-14 11:25:52 +02:00
|
|
|
PluginManager pluginManager = PluginManager.getInstance();
|
|
|
|
Map<String, Class<? extends Plugin>> availablePlugins = pluginManager.getAvailablePlugins();
|
2020-09-30 11:19:49 +02:00
|
|
|
List<PluginDefinition> plugins = new ArrayList<>();
|
|
|
|
for(String pluginName : availablePlugins.keySet()) {
|
2020-10-14 11:25:52 +02:00
|
|
|
plugins.add(pluginManager.getPlugin(pluginName));
|
2020-09-30 11:19:49 +02:00
|
|
|
}
|
|
|
|
String list = ExtendedSEMapper.getInstance().marshal(PluginDefinition.class, plugins);
|
2019-09-24 14:59:25 +02:00
|
|
|
logger.debug("Plugins are :\n{}", list);
|
2017-02-01 17:01:15 +01:00
|
|
|
}
|
2019-09-24 14:59:25 +02:00
|
|
|
|
|
|
|
@Test
|
|
|
|
public void test() throws Exception {
|
|
|
|
String scheduled = "[{" + "\"@class\":\"ScheduledTask\"," + "\"uuid\":\"d9d9bc94-b1ac-43e2-ada7-0da8045b637f\","
|
|
|
|
+ "\"scope\":\"/gcube/devNext/NextNext\","
|
|
|
|
+ "\"token\":\"abcdef-7f6e-49cd-9a34-909cd3832f3e-98187548\"," + "\"clientInfo\":{"
|
|
|
|
+ " \"@class\":\"UserInfo\",\"roles\":[\"OrganizationMember\"],\"id\":null,\"type\":\"USER\"" + "},"
|
|
|
|
+ "\"runOn\":{" + " \"@class\":\"RunOn\"," + " \"hostingNode\":{"
|
|
|
|
+ " \"@class\":\"Ref\",\"id\":\"5f51c684-dd23-4d0e-a19d-9710ce34056a\","
|
|
|
|
+ " \"address\":\"pc-frosini.isti.cnr.it:8080\"" + " }," + " \"eService\":{"
|
|
|
|
+ " \"@class\":\"Ref\",\"id\":\"5f51c684-dd23-4d0e-a19d-9710ce34056a\","
|
|
|
|
+ " \"address\":\"pc-frosini.isti.cnr.it:8080\"" + " }" + "}," + "\"launchParameter\":{"
|
|
|
|
+ " \"@class\":\"LaunchParameter\",\"pluginCapabilities\":null," + " \"inputs\":{"
|
|
|
|
+ " \"Hello\":\"World\",\"sleepTime\":10000" + " },"
|
|
|
|
+ " \"pluginStateNotifications\":{" + " \"org.acme.HWPluginStateNotification\":{"
|
|
|
|
+ " \"Hello\":\"Hello World Notification :) :)\"" + " }},"
|
|
|
|
+ " \"scheduling\":{" + " \"@class\":\"Scheduling\",\"cronExpression\":null,"
|
|
|
|
+ " \"delay\":120,\"schedulingTimes\":4,\"firstStartTime\":null,\"endTime\":null,"
|
|
|
|
+ " \"previuosExecutionsMustBeCompleted\":true,\"global\":false" + " },"
|
|
|
|
+ " \"pluginName\":\"HelloWorld\"," + " \"pluginVersion\":null" + " }" + "}]";
|
|
|
|
List<ScheduledTask> scheduledTasks = ExtendedSEMapper.getInstance().unmarshalList(ScheduledTask.class,
|
|
|
|
scheduled);
|
|
|
|
|
|
|
|
String complete = ExtendedSEMapper.getInstance().marshal(ScheduledTask.class, scheduledTasks);
|
|
|
|
logger.debug("ExtendedSEMapper : {}", complete);
|
2017-02-01 17:01:15 +01:00
|
|
|
|
2019-09-24 14:59:25 +02:00
|
|
|
List<org.gcube.vremanagement.executor.plugin.ScheduledTask> tasks = new ArrayList<>();
|
|
|
|
for(ScheduledTask scheduledTask : scheduledTasks) {
|
|
|
|
org.gcube.vremanagement.executor.plugin.ScheduledTask task = new org.gcube.vremanagement.executor.plugin.ScheduledTask(
|
|
|
|
scheduledTask.getUUID(), scheduledTask.getRunOn(), scheduledTask.getLaunchParameter());
|
|
|
|
tasks.add(task);
|
|
|
|
}
|
|
|
|
|
|
|
|
String marshalled = SEMapper.getInstance().marshal(org.gcube.vremanagement.executor.plugin.ScheduledTask.class,
|
|
|
|
tasks);
|
|
|
|
logger.debug("SEMapper : {}", marshalled);
|
|
|
|
}
|
|
|
|
|
2017-02-01 17:01:15 +01:00
|
|
|
}
|