1 package vid.automation.test.services;
3 import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
4 import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
5 import com.google.common.collect.ImmutableList;
6 import com.google.common.collect.ImmutableMap;
7 import org.glassfish.jersey.client.ClientProperties;
8 import org.glassfish.jersey.uri.internal.JerseyUriBuilder;
9 import org.opencomp.simulator.presetGenerator.presets.BasePresets.BasePreset;
10 import org.opencomp.simulator.presetGenerator.presets.model.RegistrationRequest;
11 import org.springframework.http.HttpStatus;
12 import vid.automation.test.utils.ReadFile;
14 import javax.ws.rs.client.Client;
15 import javax.ws.rs.client.ClientBuilder;
16 import javax.ws.rs.client.Entity;
17 import javax.ws.rs.client.WebTarget;
18 import javax.ws.rs.core.MediaType;
19 import javax.ws.rs.core.Response;
21 import java.util.Collection;
22 import java.util.List;
24 import java.util.function.UnaryOperator;
26 import static org.testng.Assert.assertEquals;
27 import static vid.automation.test.services.DropTestApiField.dropTestApiFieldFromString;
29 public class SimulatorApi {
31 public enum RegistrationStrategy {
32 APPEND, CLEAR_THEN_SET
35 private static final URI uri; //uri for registration
36 private static final URI simulationUri; //uri for getting simulated responses
37 private static final Client client;
39 private static final List<UnaryOperator<String>> presetStringPostProccessors =
40 ImmutableList.of(dropTestApiFieldFromString());
43 String host = System.getProperty("VID_HOST", "127.0.0.1" );
44 Integer port = Integer.valueOf(System.getProperty("SIM_PORT", System.getProperty("VID_PORT", "8080"))); //port for registration
45 uri = new JerseyUriBuilder().host(host).port(port).scheme("http").path("vidSimulator").build();
46 client = ClientBuilder.newClient();
47 client.property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true);
48 //registering jacksonJsonProvider for avoiding exceptions like :
49 // org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException:
50 // MessageBodyWriter not found for media type=application/json
51 JacksonJsonProvider jacksonJsonProvider = new JacksonJaxbJsonProvider();
52 client.register(jacksonJsonProvider);
54 Integer simulationPort = Integer.valueOf(System.getProperty("SIMULATION_PORT", "1080")); //port getting simulated responses
55 simulationUri = new JerseyUriBuilder().host(host).port(simulationPort).scheme("http").build();
58 public static URI getSimulationUri() {
62 public static void registerExpectation(String expectationFilename, RegistrationStrategy registrationStrategy) {
63 registerExpectation(expectationFilename, ImmutableMap.<String, Object>of(), registrationStrategy);
66 public static void registerExpectation(RegistrationStrategy strategy, String... expectationTemplateFilenames) {
67 registerExpectation(expectationTemplateFilenames, ImmutableMap.of(), strategy);
70 public static void registerExpectation(String[] expectationTemplateFilenames, ImmutableMap<String, Object> templateParams, RegistrationStrategy strategy) {
71 if (strategy.equals(RegistrationStrategy.CLEAR_THEN_SET)) {
74 for (String expectationTemplateFilename: expectationTemplateFilenames) {
75 registerExpectation(expectationTemplateFilename, templateParams, RegistrationStrategy.APPEND);
79 public static void registerExpectation(String expectationTemplateFilename, ImmutableMap<String, Object> templateParams, RegistrationStrategy registrationStrategy) {
81 String content = ReadFile.loadResourceAsString("registration_to_simulator/" + expectationTemplateFilename);
83 for (Map.Entry<String, Object> templateParam : templateParams.entrySet()) {
84 content = content.replaceAll(templateParam.getKey(), templateParam.getValue().toString());
87 registerToSimulatorAndAssertSuccess(content, registrationStrategy);
91 public static void registerExpectationFromPreset(BasePreset preset, RegistrationStrategy registrationStrategy) {
92 RegistrationRequest content = preset.generateScenario();
93 registerToSimulatorAndAssertSuccess(content, registrationStrategy);
96 public static void registerExpectationFromPresets(Collection<BasePreset> presets, RegistrationStrategy registrationStrategy) {
97 if (registrationStrategy == RegistrationStrategy.CLEAR_THEN_SET) {
102 try {registerToSimulatorAndAssertSuccess(preset.generateScenario());}
103 catch (RuntimeException e) {
104 throw new RuntimeException("Failed to register preset "+preset.getClass().getName(), e);
110 private static void registerToSimulatorAndAssertSuccess(Object content, RegistrationStrategy registrationStrategy) {
111 if (registrationStrategy == RegistrationStrategy.CLEAR_THEN_SET) {
112 clearRegistrations();
114 registerToSimulatorAndAssertSuccess(content);
117 private static void registerToSimulatorAndAssertSuccess(Object content) {
119 content = postProccessContent(content);
121 Response response = createSimulatorRegistrationWebTarget().request(MediaType.APPLICATION_JSON_TYPE).post(Entity.json(content));
122 assertEquals(response.getStatus(), HttpStatus.OK.value());
125 private static Object postProccessContent(Object content) {
126 if (content instanceof String) {
127 for (UnaryOperator<String> presetStringPostProccessor : presetStringPostProccessors) {
128 content = presetStringPostProccessor.apply((String) content);
135 public static void clearExpectations() {
136 clearRegistrations();
139 private static void clearRegistrations() {
140 Response response = createSimulatorRegistrationWebTarget().request().delete();
141 assertEquals(response.getStatus(), HttpStatus.OK.value());
144 private static WebTarget createSimulatorRegistrationWebTarget() {
145 return client.target(uri).path("registerToVidSimulator");
148 public static void clearAll() {
149 WebTarget webTarget = createSimulatorRegistrationWebTarget();
150 webTarget.request().delete();