Add dist mode
[vnfsdk/refrepo.git] / vnfmarket-be / vnf-sdk-marketplace / src / main / java / org / onap / vtp / VTPResource.java
index 9e1a9c8..a756cb0 100644 (file)
@@ -18,16 +18,14 @@ package org.onap.vtp;
 
 import java.io.IOException;
 import java.text.SimpleDateFormat;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Properties;
-import java.util.TimeZone;
-import java.util.UUID;
+import java.util.*;
 
+import com.google.gson.*;
 import org.apache.http.HttpStatus;
 import org.onap.vtp.error.VTPError;
 import org.onap.vtp.error.VTPError.VTPException;
+import org.onap.vtp.manager.DistManager;
+import org.onap.vtp.manager.model.Tester;
 import org.open.infc.grpc.Output;
 import org.open.infc.grpc.Result;
 import org.open.infc.grpc.client.OpenInterfaceGrpcClient;
@@ -35,13 +33,15 @@ import org.open.infc.grpc.client.OpenRemoteCli;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.gson.Gson;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonParser;
 import com.google.gson.reflect.TypeToken;
 import org.yaml.snakeyaml.DumperOptions;
 import org.yaml.snakeyaml.Yaml;
 
+import javax.ws.rs.client.Client;
+import javax.ws.rs.client.ClientBuilder;
+import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.MediaType;
+
 public class VTPResource {
 
     protected static final Logger LOG = LoggerFactory.getLogger(VTPResource.class);
@@ -54,9 +54,10 @@ public class VTPResource {
     protected static int VTP_EXECUTION_GRPC_TIMEOUT;  // NOSONAR
     protected static String VTP_YAML_STORE;  // NOSONAR
     protected static String VTP_SCRIPT_STORE;  // NOSONAR
-
+    public static boolean mode=false;
     protected static final SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US);  // NOSONAR
-
+    DistManager distManager = null;
+    Tester tester = null;
     static {
         dateFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));
 
@@ -70,6 +71,8 @@ public class VTPResource {
             VTP_EXECUTION_GRPC_TIMEOUT = Integer.parseInt(prp.getProperty("vtp.grpc.timeout")) * 1000 ;
             VTP_YAML_STORE = prp.getProperty("vtp.yaml.store");
             VTP_SCRIPT_STORE = prp.getProperty("vtp.script.store");
+            if (prp.getProperty("vtp.execution.mode").equals("dist"))
+                mode=true;
         } catch (Exception e) {  // NOSONAR
             LOG.error(e.getMessage());
         }
@@ -80,6 +83,24 @@ public class VTPResource {
     }
 
     protected Result makeRpc(List <String> args, int timeout) throws VTPException {
+        String executionId=args.get(4);
+        if(isDistMode() && (executionId.contains("-") || args.contains("schema-show"))) {
+            distManager =new DistManager();
+
+            if (executionId.contains("-")){
+                tester = distManager.httpRequestExecutions(executionId);
+            }
+            else {
+                String scenario=args.get(4);
+                String testSuiteName=args.get(6);
+                String testCaseName=args.get(8);
+                tester = distManager.httpRequestTestcase(testSuiteName,scenario,testCaseName);
+            }
+
+            VTP_TEST_CENTER_IP = tester.getIp();
+            VTP_TEST_CENTER_PORT = tester.getPort();
+
+        }
         Result result = null;
         String requestId = UUID.randomUUID().toString();
         try {
@@ -119,11 +140,17 @@ public class VTPResource {
         return jsonParser.parse(result.getOutput());
     }
 
-    protected Output makeRpc(String scenario, String requestId, String profile, String testCase, JsonElement argsJsonNode) throws VTPException {
-        return this.makeRpc(scenario, requestId, profile, testCase, argsJsonNode, VTP_EXECUTION_GRPC_TIMEOUT);
+    protected Output makeRpc(String testSuite,String scenario, String requestId, String profile, String testCase, JsonElement argsJsonNode) throws VTPException {
+        return this.makeRpc(testSuite,scenario, requestId, profile, testCase, argsJsonNode, VTP_EXECUTION_GRPC_TIMEOUT);
     }
 
-    protected Output makeRpc(String scenario, String requestId, String profile, String testCase, JsonElement argsJsonNode, int timeout) throws VTPException {
+    protected Output makeRpc(String testSuite,String scenario, String requestId, String profile, String testCase, JsonElement argsJsonNode, int timeout) throws VTPException {
+        if (isDistMode()){
+            distManager =new DistManager();
+            tester = distManager.httpRequestTestcase(testSuite,scenario,testCase);
+            VTP_TEST_CENTER_IP =tester.getIp();
+            VTP_TEST_CENTER_PORT = tester.getPort();
+        }
         Output output = null;
         Map <String, String> args = gson.fromJson(argsJsonNode, new TypeToken<Map<String,String>>(){}.getType());
         try {
@@ -141,7 +168,12 @@ public class VTPResource {
             throw new VTPException(
                     new VTPError().setMessage(e.getMessage()));
         }
-
+        if (isDistMode())
+        {
+            String executionId= output.getAddonsMap().get("execution-id");
+            assert distManager != null;
+            distManager.postDataToManager(executionId,tester.getId(),tester.getTesterId());
+        }
         return output;
     }
 
@@ -156,4 +188,53 @@ public class VTPResource {
         dumperOptions.setPrettyFlow(false);
         return new Yaml(dumperOptions);
     }
+    public boolean isDistMode() {
+        return mode;
+    }
+    protected JsonElement makeRpcAndGetJson(List<String> args,int count,int index) throws VTPException, IOException {
+        return this.makeRpcAndGetJson(args,count,index, VTP_EXECUTION_GRPC_TIMEOUT);
+    }
+
+    protected JsonElement makeRpcAndGetJson(List<String> args,int count,int index, int timeout) throws VTPException {
+        List<String> result = this.makeRpc(args,count,index, timeout);
+        JsonArray jsonArray = new JsonArray();
+        for (String jsonString : result) {
+            JsonElement obj = new JsonParser().parse(jsonString);
+            jsonArray.add(obj);
+        }
+        return jsonArray;
+    }
+
+    protected List<String> makeRpc(List<String> args, int count, int index, int timeout) {
+        distManager = new DistManager();
+        JsonElement jsonElement = distManager.getExecutionJson(count, index);
+        List<String> resultList = new ArrayList<>();
+        if (jsonElement != null && jsonElement.isJsonArray() && jsonElement.getAsJsonArray().size() > 0) {
+            JsonArray resultsArray = jsonElement.getAsJsonArray();
+            Client client = ClientBuilder.newClient();
+            for (JsonElement jElement : resultsArray) {
+                JsonObject jsonObject = jElement.getAsJsonObject();
+                String testerId = null;
+                String executionId = null;
+                if (jsonObject.has("tester_id"))
+                    testerId = jsonObject.get("tester_id").getAsString();
+                if (jsonObject.has("execution_id"))
+                    executionId = jsonObject.get("execution_id").getAsString();
+                if (testerId == null || executionId == null)
+                    throw new IllegalArgumentException("testerId: " + testerId + " and " + " executionId: " + executionId + " should not be null");
+
+                String testerPath = "/manager/tester/" + testerId;
+                JsonObject jObject = distManager.getResponseFromTester(client, distManager.getManagerURL(), testerPath).getAsJsonObject();
+                String vtpTestCenterIp = jObject.get("iP").getAsString();
+                int vtpTestCenterPort = Integer.parseInt(jObject.get("port").getAsString());
+                args.set(4, executionId);
+                try {
+                    resultList.add(distManager.getExecutionDetails(vtpTestCenterIp, vtpTestCenterPort, args, timeout).getOutput());
+                } catch (Exception e) {
+                    LOG.error("executionId : " + executionId + " not valid::: " + e.getMessage());
+                }
+            }
+        }
+        return resultList;
+    }
 }