package vid.automation.test.services;
-import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
-import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
+import static java.util.stream.Collectors.toList;
+import static org.testng.Assert.assertEquals;
+import static vid.automation.test.services.DropTestApiField.dropFieldCloudOwnerFromString;
+import static vid.automation.test.services.DropTestApiField.dropTestApiFieldFromString;
+
+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.uri.internal.JerseyUriBuilder;
-import org.opencomp.simulator.presetGenerator.presets.BasePresets.BasePreset;
-import org.opencomp.simulator.presetGenerator.presets.model.RegistrationRequest;
-import org.springframework.http.HttpStatus;
-import vid.automation.test.utils.ReadFile;
-
+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 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.UnaryOperator;
-
-import static org.testng.Assert.assertEquals;
-import static vid.automation.test.services.DropTestApiField.dropTestApiFieldFromString;
+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.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;
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 StringWrapper {
+ public String value;
+ }
+
+ public static class RecordedHeaders {
+ public StringWrapper name;
+ public List<StringWrapper> values;
+ }
+
+ public static class HttpRequest {
+ public StringWrapper path;
+ public List<RecordedHeaders> headers;
+ }
+
+ public static class RecordedRequests {
+ public String path;
+ public Map<String, List<String>> headers;
+
+ public RecordedRequests(String path, Map<String, List<String>> headers) {
+ this.path = path;
+ this.headers = headers;
+ }
+
+ public RecordedRequests() {
+ }
+ }
+
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" );
+ String host = System.getProperty("SIM_HOST", System.getProperty("VID_HOST", "127.0.0.1"));
Integer port = Integer.valueOf(System.getProperty("SIM_PORT", System.getProperty("VID_PORT", "8080"))); //port for registration
uri = new JerseyUriBuilder().host(host).port(port).scheme("http").path("vidSimulator").build();
client = ClientBuilder.newClient();
// 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
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(toList()), registrationStrategy);
}
public static void registerExpectationFromPresets(Collection<BasePreset> presets, RegistrationStrategy registrationStrategy) {
}
presets.forEach(
preset-> {
- try {registerToSimulatorAndAssertSuccess(preset.generateScenario());}
- catch (RuntimeException e) {
+ try {registerToSimulatorAndAssertSuccess(preset.getClass().getCanonicalName(), preset.generateScenario());}
+ catch (Throwable e) {
throw new RuntimeException("Failed to register preset "+preset.getClass().getName(), e);
}
}
);
}
- 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() {
+ List<HttpRequest> httpRequests = retrieveRecordedHttpRequests();
+ return httpRequests.stream().map(x->x.path.value).collect(
+ Collectors.groupingBy(Function.identity(), Collectors.counting()));
+ }
+
+ private static List<HttpRequest> retrieveRecordedHttpRequests() {
+ Response response = client.target(uri).path("retrieveRecordedRequests").request().get();
+ return response.readEntity(new GenericType<List<HttpRequest>>(){});
+ }
+
+ public static List<RecordedRequests> retrieveRecordedRequests() {
+ List<HttpRequest> rawRequests = retrieveRecordedHttpRequests();
+ return rawRequests.stream().map(request->new RecordedRequests(
+ request.path.value,
+ request.headers.stream().collect(
+ Collectors.toMap(
+ x->x.name.value,
+ x->x.values.stream().map(y->y.value).collect(toList())))
+ )).collect(toList());
+ }
+
+ 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);
}
private static void clearRegistrations() {
+ logger.info("Clearing Registrations");
Response response = createSimulatorRegistrationWebTarget().request().delete();
assertEquals(response.getStatus(), HttpStatus.OK.value());
}