Merge from ecomp 718fd196 - Integration Tests
[vid.git] / vid-automation / src / main / java / vid / automation / test / services / SimulatorApi.java
index 74cda79..0874496 100644 (file)
@@ -1,13 +1,16 @@
 package vid.automation.test.services;
 
-import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
-import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import org.glassfish.jersey.client.ClientProperties;
+import org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.JacksonJaxbJsonProvider;
+import org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.JacksonJsonProvider;
 import org.glassfish.jersey.uri.internal.JerseyUriBuilder;
-import org.opencomp.simulator.presetGenerator.presets.BasePresets.BasePreset;
-import org.opencomp.simulator.presetGenerator.presets.model.RegistrationRequest;
+import org.onap.simulator.presetGenerator.presets.BasePresets.BasePreset;
+import org.onap.simulator.presetGenerator.presets.model.RegistrationRequest;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.http.HttpStatus;
 import vid.automation.test.utils.ReadFile;
 
@@ -15,15 +18,19 @@ import javax.ws.rs.client.Client;
 import javax.ws.rs.client.ClientBuilder;
 import javax.ws.rs.client.Entity;
 import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.GenericType;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import java.net.URI;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Function;
 import java.util.function.UnaryOperator;
+import java.util.stream.Collectors;
 
 import static org.testng.Assert.assertEquals;
+import static vid.automation.test.services.DropTestApiField.dropFieldCloudOwnerFromString;
 import static vid.automation.test.services.DropTestApiField.dropTestApiFieldFromString;
 
 public class SimulatorApi {
@@ -32,12 +39,28 @@ public class SimulatorApi {
         APPEND, CLEAR_THEN_SET
     }
 
+    private static final Logger logger = LoggerFactory.getLogger(SimulatorApi.class);
+
+    /*
+    these classes are partial representation of org.mockserver.model.HttpRequest.
+    We can not use HttpRequest since it contains Map with NottableString and jackson throw the following error :
+    com.fasterxml.jackson.databind.JsonMappingException: Can not find a (Map) Key deserializer for type
+     [simple type, class org.mockserver.model.NottableString]
+    */
+    public static class Path {
+        public String value;
+    }
+
+    public static class HttpRequest{
+        public Path path;
+    }
+
     private static final URI uri; //uri for registration
     private static final URI simulationUri; //uri for getting simulated responses
     private static final Client client;
 
     private static final List<UnaryOperator<String>> presetStringPostProccessors =
-            ImmutableList.of(dropTestApiFieldFromString());
+            ImmutableList.of(dropTestApiFieldFromString(), dropFieldCloudOwnerFromString());
 
     static {
         String host = System.getProperty("VID_HOST", "127.0.0.1" );
@@ -49,6 +72,7 @@ public class SimulatorApi {
         // org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException:
         // MessageBodyWriter not found for media type=application/json
         JacksonJsonProvider jacksonJsonProvider = new JacksonJaxbJsonProvider();
+        jacksonJsonProvider.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
         client.register(jacksonJsonProvider);
 
         Integer simulationPort = Integer.valueOf(System.getProperty("SIMULATION_PORT", "1080")); //port getting simulated responses
@@ -84,13 +108,19 @@ public class SimulatorApi {
             content = content.replaceAll(templateParam.getKey(), templateParam.getValue().toString());
         }
 
-        registerToSimulatorAndAssertSuccess(content, registrationStrategy);
+        registerToSimulatorAndAssertSuccess(expectationTemplateFilename, content, registrationStrategy);
 
     }
 
     public static void registerExpectationFromPreset(BasePreset preset, RegistrationStrategy registrationStrategy) {
         RegistrationRequest content = preset.generateScenario();
-        registerToSimulatorAndAssertSuccess(content, registrationStrategy);
+        registerToSimulatorAndAssertSuccess(preset.getClass().getCanonicalName(), content, registrationStrategy);
+    }
+
+    public static void registerExpectationFromPresetsCollections(Collection<Collection<BasePreset>> presets, RegistrationStrategy registrationStrategy) {
+        registerExpectationFromPresets(presets.stream()
+                .flatMap(Collection::stream)
+                .collect(Collectors.toList()), registrationStrategy);
     }
 
     public static void registerExpectationFromPresets(Collection<BasePreset> presets, RegistrationStrategy registrationStrategy) {
@@ -99,7 +129,7 @@ public class SimulatorApi {
         }
         presets.forEach(
                 preset-> {
-                    try {registerToSimulatorAndAssertSuccess(preset.generateScenario());}
+                    try {registerToSimulatorAndAssertSuccess(preset.getClass().getCanonicalName(), preset.generateScenario());}
                     catch (RuntimeException e) {
                         throw new RuntimeException("Failed to register preset "+preset.getClass().getName(), e);
                     }
@@ -107,14 +137,31 @@ public class SimulatorApi {
         );
     }
 
-    private static void registerToSimulatorAndAssertSuccess(Object content, RegistrationStrategy registrationStrategy) {
+//    public static List<HttpRequest> retrieveRecordedRequests() {
+//        Response response = client.target(uri).path("retrieveRecordedRequests").request().get();
+//        return response.readEntity(new GenericType<List<HttpRequest>>(){});
+//    }
+
+    /*
+        This method return counter of requests that has been sent to simulator.
+        The key of the map is a path, and the value is counter
+     */
+    public static Map<String, Long> retrieveRecordedRequestsPathCounter() {
+        Response response = client.target(uri).path("retrieveRecordedRequests").request().get();
+        List<HttpRequest> httpRequests =  response.readEntity(new GenericType<List<HttpRequest>>(){});
+        return httpRequests.stream().map(x->x.path.value).collect(
+                Collectors.groupingBy(Function.identity(), Collectors.counting()));
+    }
+
+    private static void registerToSimulatorAndAssertSuccess(String name, Object content, RegistrationStrategy registrationStrategy) {
         if (registrationStrategy == RegistrationStrategy.CLEAR_THEN_SET) {
             clearRegistrations();
         }
-        registerToSimulatorAndAssertSuccess(content);
+        registerToSimulatorAndAssertSuccess(name, content);
     }
 
-    private static void registerToSimulatorAndAssertSuccess(Object content) {
+    private static void registerToSimulatorAndAssertSuccess(String name, Object content) {
+        logger.info("Setting {}", name);
 
         content = postProccessContent(content);
 
@@ -137,6 +184,7 @@ public class SimulatorApi {
     }
 
     private static void clearRegistrations() {
+        logger.info("Clearing Registrations");
         Response response = createSimulatorRegistrationWebTarget().request().delete();
         assertEquals(response.getStatus(), HttpStatus.OK.value());
     }