From ba629b762a53fe79d90473bb13b1ddb184f3e0a7 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Tue, 24 Sep 2019 16:55:13 +0200 Subject: [PATCH] Fixed bugs and tests --- pom.xml | 7 ++ .../client/SmartExecutorClientImpl.java | 6 +- .../client/SmartExecutorClientTest.java | 84 ++++++++++++++++--- 3 files changed, 83 insertions(+), 14 deletions(-) diff --git a/pom.xml b/pom.xml index 680ee58..089ff2c 100644 --- a/pom.xml +++ b/pom.xml @@ -84,6 +84,13 @@ 1.0.13 test + + org.gcube.vremanagement + hello-world-se-plugin + [1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT) + test + + diff --git a/src/main/java/org/gcube/vremanagement/executor/client/SmartExecutorClientImpl.java b/src/main/java/org/gcube/vremanagement/executor/client/SmartExecutorClientImpl.java index fd49988..bb3af10 100644 --- a/src/main/java/org/gcube/vremanagement/executor/client/SmartExecutorClientImpl.java +++ b/src/main/java/org/gcube/vremanagement/executor/client/SmartExecutorClientImpl.java @@ -128,7 +128,6 @@ public class SmartExecutorClientImpl implements SmartExecutorClient { GXHTTPStringRequest gxHTTPStringRequest = GXHTTPStringRequest.newRequest(address); gxHTTPStringRequest.from(SmartExecutorClient.class.getSimpleName()); gxHTTPStringRequest.header("Accept", GXConnection.APPLICATION_JSON_CHARSET_UTF_8); - gxHTTPStringRequest.header("Accept", "text/plain"); gxHTTPStringRequest.path(RestConstants.PLUGINS_PATH_PART); HttpURLConnection httpURLConnection = gxHTTPStringRequest.get(); @@ -157,7 +156,6 @@ public class SmartExecutorClientImpl implements SmartExecutorClient { GXHTTPStringRequest gxHTTPStringRequest = GXHTTPStringRequest.newRequest(address); gxHTTPStringRequest.from(SmartExecutorClient.class.getSimpleName()); gxHTTPStringRequest.header("Accept", GXConnection.APPLICATION_JSON_CHARSET_UTF_8); - gxHTTPStringRequest.header("Accept", "text/plain"); gxHTTPStringRequest.path(RestConstants.PLUGINS_PATH_PART); gxHTTPStringRequest.path(name); gxHTTPStringRequest.path(RestConstants.EXECUTIONS_PATH_PART); @@ -203,7 +201,7 @@ public class SmartExecutorClientImpl implements SmartExecutorClient { logger.info("Going to launch plugin {} on {} with parameters {} ", pluginName, host, launchParameter); GXHTTPStringRequest gxHTTPStringRequest = GXHTTPStringRequest.newRequest(address); gxHTTPStringRequest.from(SmartExecutorClient.class.getSimpleName()); - gxHTTPStringRequest.header("Accept", GXConnection.APPLICATION_JSON_CHARSET_UTF_8); + gxHTTPStringRequest.header("Content-Type", GXConnection.APPLICATION_JSON_CHARSET_UTF_8); gxHTTPStringRequest.header("Accept", "text/plain"); gxHTTPStringRequest.path(RestConstants.PLUGINS_PATH_PART); gxHTTPStringRequest.path(pluginName); @@ -297,7 +295,7 @@ public class SmartExecutorClientImpl implements SmartExecutorClient { GXHTTPStringRequest gxHTTPStringRequest = GXHTTPStringRequest.newRequest(address); gxHTTPStringRequest.from(SmartExecutorClient.class.getSimpleName()); - gxHTTPStringRequest.header("Accept", GXConnection.APPLICATION_JSON_CHARSET_UTF_8); + gxHTTPStringRequest.header("Accept", "text/plain"); gxHTTPStringRequest.path(RestConstants.PLUGINS_PATH_PART); gxHTTPStringRequest.path(pluginName); gxHTTPStringRequest.path(RestConstants.EXECUTIONS_PATH_PART); diff --git a/src/test/java/org/gcube/vremanagement/executor/client/SmartExecutorClientTest.java b/src/test/java/org/gcube/vremanagement/executor/client/SmartExecutorClientTest.java index 5cec2a4..04e5a42 100644 --- a/src/test/java/org/gcube/vremanagement/executor/client/SmartExecutorClientTest.java +++ b/src/test/java/org/gcube/vremanagement/executor/client/SmartExecutorClientTest.java @@ -1,22 +1,28 @@ package org.gcube.vremanagement.executor.client; import java.io.IOException; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.TimeUnit; -import org.gcube.vremanagement.executor.json.SEMapper; +import org.gcube.vremanagement.executor.api.types.LaunchParameter; +import org.gcube.vremanagement.executor.api.types.Scheduling; import org.gcube.vremanagement.executor.plugin.PluginDeclaration; +import org.gcube.vremanagement.executor.plugin.PluginStateEvolution; +import org.gcube.vremanagement.executor.plugin.ScheduledTask; +import org.gcube.vremanagement.helloworld.HelloWorldPlugin; +import org.gcube.vremanagement.helloworld.HelloWorldPluginDeclaration; import org.junit.Assert; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.JsonMappingException; - /** * @author Luca Frosini (ISTI - CNR) */ -public class SmartExecutorClientTest { +public class SmartExecutorClientTest extends ContextTest { private static Logger logger = LoggerFactory.getLogger(SmartExecutorClientTest.class); @@ -38,10 +44,68 @@ public class SmartExecutorClientTest { } - @Test - public void testUnmarshallPluginList() throws JsonParseException, JsonMappingException, IOException { - String pluginList = "[{\"@class\":\"PluginDeclaration\",\"description\":\"Hello World Description\",\"supportedCapabilities\":{\"FakeKey\":\"FakeValue\"},\"version\":\"1.1.2\",\"name\":\"HelloWorld\"}]"; - List list = SEMapper.getInstance().unmarshalList(PluginDeclaration.class, pluginList); - logger.debug("{}", SEMapper.getInstance().marshal(PluginDeclaration.class, list)); + private LaunchParameter getLaunchParameter() { + Scheduling scheduling = new Scheduling(20); + Map inputs = new HashMap(); + inputs.put(HelloWorldPlugin.SLEEP_TIME, TimeUnit.SECONDS.toMillis(10)); + inputs.put("TestUUID", UUID.randomUUID()); + + LaunchParameter launchParameter = new LaunchParameter(HelloWorldPluginDeclaration.NAME, inputs); + launchParameter.setScheduling(scheduling); + + return launchParameter; } + + // @Test + public void testServiceInteraction() throws IOException { + HelloWorldPluginDeclaration helloWorldPluginDeclaration = new HelloWorldPluginDeclaration(); + logger.debug("Going to test smart executor using {} plugin", helloWorldPluginDeclaration.getName()); + SmartExecutorClient smartExecutorClient = SmartExecutorClientFactory.getClient(helloWorldPluginDeclaration.getName()); + String host = smartExecutorClient.getHost(); + Assert.assertTrue(host.contains("pc-frosini.isti.cnr.it")); + + List plugins = smartExecutorClient.getPlugins(); + Assert.assertTrue(plugins.size()==1); + PluginDeclaration pluginDeclaration = plugins.get(0); + + + Assert.assertTrue(pluginDeclaration.getName().compareTo(helloWorldPluginDeclaration.getName())==0); + Assert.assertTrue(pluginDeclaration.getDescription().compareTo(helloWorldPluginDeclaration.getDescription())==0); + Assert.assertTrue(pluginDeclaration.getVersion().compareTo(helloWorldPluginDeclaration.getVersion())==0); + Assert.assertTrue(pluginDeclaration.getSupportedCapabilities().equals(helloWorldPluginDeclaration.getSupportedCapabilities())); + + + List orphans = smartExecutorClient.getOrphanScheduledLaunches(); + for(ScheduledTask orphan : orphans) { + boolean removed = smartExecutorClient.delete(orphan.getUUID(), true); + Assert.assertTrue(removed); + } + orphans = smartExecutorClient.getOrphanScheduledLaunches(); + Assert.assertTrue(orphans.size()==0); + + + LaunchParameter launchParameter = getLaunchParameter(); + + UUID executionIdentifier = smartExecutorClient.launch(launchParameter); + + List launches = smartExecutorClient.getScheduledLaunches(); + Assert.assertTrue(launches.size()==1); + ScheduledTask scheduledTask = launches.get(0); + Assert.assertTrue(scheduledTask.getUUID().compareTo(executionIdentifier)==0); + + PluginStateEvolution pluginStateEvolution = smartExecutorClient.getPluginStateEvolution(executionIdentifier); + Assert.assertTrue(pluginStateEvolution.getUUID().compareTo(executionIdentifier)==0); + + + pluginStateEvolution = smartExecutorClient.getPluginStateEvolution(executionIdentifier, 1); + Assert.assertTrue(pluginStateEvolution.getUUID().compareTo(executionIdentifier)==0); + + boolean removed = smartExecutorClient.delete(executionIdentifier, true); + Assert.assertTrue(removed); + + orphans = smartExecutorClient.getOrphanScheduledLaunches(); + Assert.assertTrue(orphans.size()==0); + + } + }