Merge "moving certs from docker image to mounted catalog"
[vid.git] / vid-automation / src / test / java / org / onap / vid / api / SdcApiTest.java
1 package org.onap.vid.api;
2
3 import com.fasterxml.jackson.databind.JsonNode;
4 import com.google.common.collect.ImmutableList;
5 import org.onap.simulator.presetGenerator.presets.BasePresets.BasePreset;
6 import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceMetadataGet;
7 import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceToscaModelGet;
8 import org.springframework.http.HttpStatus;
9 import org.springframework.http.ResponseEntity;
10 import org.testng.Assert;
11 import org.testng.annotations.BeforeClass;
12 import org.testng.annotations.BeforeMethod;
13 import org.testng.annotations.Test;
14 import vid.automation.test.infra.FeatureTogglingTest;
15 import vid.automation.test.infra.Features;
16
17 import static net.javacrumbs.jsonunit.JsonMatchers.jsonEquals;
18 import static net.javacrumbs.jsonunit.JsonMatchers.jsonStringEquals;
19 import static net.javacrumbs.jsonunit.core.Option.IGNORING_ARRAY_ORDER;
20 import static org.hamcrest.MatcherAssert.assertThat;
21 import static org.hamcrest.core.Is.is;
22 import static org.hamcrest.core.IsNot.not;
23 import static org.testng.Assert.assertFalse;
24 import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.APPEND;
25 import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET;
26 import static vid.automation.test.services.SimulatorApi.registerExpectation;
27 import static vid.automation.test.services.SimulatorApi.registerExpectationFromPresets;
28 import static vid.automation.test.utils.ReadFile.loadResourceAsString;
29
30 public class SdcApiTest extends BaseApiTest {
31
32     private static final String SDC_GET_SERVICE_MODEL = "/rest/models/services/";
33
34
35     private static final String A_LA_CARTE_INSTANTIATION_TYPE_UUID = "4d71990b-d8ad-4510-ac61-496288d9078e";
36     private static final String A_LA_CARTE_INSTANTIATION_TYPE_INVARIANT_UUID = "d27e42cf-087e-4d31-88ac-6c4b7585f800";
37     private static final String A_LA_CARTE_INSTANTIATION_TYPE_FILE_PATH = "csar15782222_instantiationTypeAlacarte_invariantUUIDMacro.zip";
38     private static final String A_LA_CARTE_INSTANTIATION_TYPE_EXPECTED_RESPONSE = "sdcApiTest/aLaCarteInstantiationTypeResponse.json";
39
40
41     private static final String MACRO_INSTANTIATION_TYPE_FILE_PATH = "csar15782222_instantiationTypeMacro_invariantUUIDAlacarte.zip";
42     private static final String MACRO_INSTANTIATION_TYPE_UUID = "4d71990b-d8ad-4510-ac61-496288d9078e";
43     private static final String MACRO_INSTANTIATION_TYPE_INVARIANT_UUID = "a8dcd72d-d44d-44f2-aa85-53aa9ca99cba";
44     private static final String MACRO_INSTANTIATION_TYPE_EXPECTED_RESPONSE = "sdcApiTest/macroInstantiationTypeResponse.json";
45
46
47     private static final String EMPTY_INSTANTIATION_TYPE_FILE_PATH = "csar15782222_instantiationTypeEmpty_invariantUUIDAlacarte.zip";
48     private static final String EMPTY_INSTANTIATION_TYPE_EXPECTED_RESPONSE = "sdcApiTest/emptyInstantiationTypeResponse.json";
49
50     private static final String BOTH_INSTANTIATION_TYPE_FILE_PATH = "csar15782222_instantiationTypeBoth_invariantUUIDAlacarte.zip";
51
52
53     private static final String MIN_MAX_INITIAL_UUID = "43f13072-fe50-496b-b673-7af075d10143";
54     private static final String MIN_MAX_INITIAL_INVARIANT_UUID = "35fb95d8-d1f0-4e46-99ac-e01b423e8e3f";
55     private static final String MIN_MAX_INITIAL_FILE_PATH = "min_max_initial_vfModule_csar_v4.0.zip";
56
57     private static final String MIN_MAX_INITIAL_UUID_OLD_CSAR = "245562de-3984-49ef-a708-6c9d7cfcabd1";
58     private static final String MIN_MAX_INITIAL_INVARIANT_UUID_OLD_CSAR = "24216d6-71d0-41c8-ac81-0c5acfee514a";
59     private static final String MIN_MAX_INITIAL_FILE_PATH_OLD_CSAR = "service-VflorenceRvpmsFeAic3011217Svc-csar.csar.zip";
60
61     private static final String GROUPING_SERVICE_ROLE_FILE_PATH = "csar15782222_instantiationTypeAlacarte_VnfGrouping.zip";
62     private static final String GROUPING_SERVICE_ROLE_UUID = "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc";
63     private static final String GROUPING_SERVICE_ROLE_INVARIANT_UUID = "7ee41ce4-4827-44b0-a48e-2707a59905d2";
64     private static final String GROUPING_SERVICE_ROLE_EXPECTED_RESPONSE = "VnfGroup/groupingServiceRoleResponse.json";
65
66     @BeforeClass
67     public void login() {
68         super.login();
69     }
70
71     @BeforeMethod
72     public void invalidateTheCache(){
73         if(Features.FLAG_SERVICE_MODEL_CACHE.isActive()) {
74             restTemplate.postForObject(uri + "/rest/models/reset", "", Object.class);
75         }
76     }
77
78     @Test
79     public void getServiceModelALaCarteInstantiation() {
80         registerToSimulatorWithPresets(A_LA_CARTE_INSTANTIATION_TYPE_UUID, A_LA_CARTE_INSTANTIATION_TYPE_INVARIANT_UUID, A_LA_CARTE_INSTANTIATION_TYPE_FILE_PATH);
81         ResponseEntity<String> response = restTemplate.getForEntity(buildUri(SDC_GET_SERVICE_MODEL + A_LA_CARTE_INSTANTIATION_TYPE_UUID), String.class);
82         Assert.assertEquals(response.getStatusCode(), HttpStatus.OK);
83         String aLaCarteInstantiationTypeExpectedResponse = loadResourceAsString(A_LA_CARTE_INSTANTIATION_TYPE_EXPECTED_RESPONSE);
84         assertThat(response.getBody(), jsonEquals(aLaCarteInstantiationTypeExpectedResponse)
85             .when(IGNORING_ARRAY_ORDER)
86             .whenIgnoringPaths("service.vidNotions.instantiationUI"));
87     }
88
89
90     @Test
91     public void getServiceModelMacroInstantiation() {
92         registerToSimulatorWithPresets(MACRO_INSTANTIATION_TYPE_UUID, MACRO_INSTANTIATION_TYPE_INVARIANT_UUID, MACRO_INSTANTIATION_TYPE_FILE_PATH);
93         ResponseEntity<String> response = restTemplate.getForEntity(buildUri(SDC_GET_SERVICE_MODEL + MACRO_INSTANTIATION_TYPE_UUID), String.class);
94         Assert.assertEquals(response.getStatusCode(), HttpStatus.OK);
95         String macroInstantiationTypeExpectedResponse = loadResourceAsString(MACRO_INSTANTIATION_TYPE_EXPECTED_RESPONSE);
96         assertThat("The response is in the format of JSON", response.getBody(), is(jsonStringEquals(turnOffInstantiationUI(macroInstantiationTypeExpectedResponse))));
97     }
98
99
100     @Test
101     public void getServiceModelWithoutInstantiationType(){
102         registerToSimulatorWithPresets(MACRO_INSTANTIATION_TYPE_UUID, MACRO_INSTANTIATION_TYPE_INVARIANT_UUID, EMPTY_INSTANTIATION_TYPE_FILE_PATH);
103         ResponseEntity<String> response = restTemplate.getForEntity(buildUri(SDC_GET_SERVICE_MODEL + MACRO_INSTANTIATION_TYPE_UUID), String.class);
104         Assert.assertEquals(response.getStatusCode(), HttpStatus.OK);
105         String emptyInstantiationTypeExpectedResponse = loadResourceAsString(EMPTY_INSTANTIATION_TYPE_EXPECTED_RESPONSE);
106         assertThat("The response is in the format of JSON", response.getBody(), is(jsonStringEquals(turnOffInstantiationUI(emptyInstantiationTypeExpectedResponse))));
107     }
108
109     @Test
110     public void getServiceModelBothInstantiationType(){
111         registerToSimulatorWithPresets(MACRO_INSTANTIATION_TYPE_UUID, MACRO_INSTANTIATION_TYPE_INVARIANT_UUID, BOTH_INSTANTIATION_TYPE_FILE_PATH);
112         ResponseEntity<String> response = restTemplate.getForEntity(buildUri(SDC_GET_SERVICE_MODEL + MACRO_INSTANTIATION_TYPE_UUID), String.class);
113         Assert.assertEquals(response.getStatusCode(), HttpStatus.OK);
114         String macroInstantiationTypeExpectedResponse = loadResourceAsString(MACRO_INSTANTIATION_TYPE_EXPECTED_RESPONSE);
115         assertThat("The response is in the format of JSON", response.getBody(), is(jsonStringEquals(turnOffInstantiationUI(macroInstantiationTypeExpectedResponse))));
116     }
117
118     @Test
119     public void getServiceModelWithGroupsAndCheckMinMaxInitialParams(){
120         registerToSimulatorWithPresets(MIN_MAX_INITIAL_UUID, MIN_MAX_INITIAL_INVARIANT_UUID, MIN_MAX_INITIAL_FILE_PATH);
121         ResponseEntity<String> response = restTemplate.getForEntity(buildUri(SDC_GET_SERVICE_MODEL + MIN_MAX_INITIAL_UUID), String.class);
122         Assert.assertEquals(response.getStatusCode(), HttpStatus.OK);
123         String minMaxInitialExpectedResponse = loadResourceAsString("sdcApiTest/minMaxInitialExpectedResponse.json");
124         assertThat("The response is in the format of JSON", response.getBody(), is(jsonStringEquals(turnOffInstantiationUI(minMaxInitialExpectedResponse))));
125     }
126
127     @Test
128     public void getServiceModelWithGroupsAndCheckMinMaxInitialParamsOldCsar(){
129         registerToSimulatorWithPresets(MIN_MAX_INITIAL_UUID_OLD_CSAR, MIN_MAX_INITIAL_INVARIANT_UUID_OLD_CSAR, MIN_MAX_INITIAL_FILE_PATH_OLD_CSAR);
130         ResponseEntity<String> response = restTemplate.getForEntity(buildUri(SDC_GET_SERVICE_MODEL + MIN_MAX_INITIAL_UUID_OLD_CSAR), String.class);
131         Assert.assertEquals(response.getStatusCode(), HttpStatus.OK);
132         String minMaxInitialExpectedResponseOldCsar = loadResourceAsString("sdcApiTest/minMaxInitialExpectedResponseOldCsar.json");
133         assertThat("The response is in the format of JSON", response.getBody(), is(jsonStringEquals(minMaxInitialExpectedResponseOldCsar)));
134     }
135
136     @Test
137     @FeatureTogglingTest(Features.FLAG_1902_VNF_GROUPING)
138     public void getServiceModelWithServiceRoleGrouping(){
139         registerToSimulatorWithPresets(GROUPING_SERVICE_ROLE_UUID, GROUPING_SERVICE_ROLE_INVARIANT_UUID, GROUPING_SERVICE_ROLE_FILE_PATH);
140         ResponseEntity<String> response = restTemplate.getForEntity(buildUri(SDC_GET_SERVICE_MODEL + GROUPING_SERVICE_ROLE_UUID), String.class);
141         Assert.assertEquals(response.getStatusCode(), HttpStatus.OK);
142         String groupingServiceRoleExpectedResponse = loadResourceAsString(GROUPING_SERVICE_ROLE_EXPECTED_RESPONSE);
143         assertThat("The response is in the format of JSON", response.getBody(), is(jsonStringEquals(groupingServiceRoleExpectedResponse)));
144     }
145
146     private void registerToSimulatorWithPresets(String uuid, String invariantUuid, String pathPath){
147         ImmutableList<BasePreset> presets = ImmutableList.of(
148                 new PresetSDCGetServiceToscaModelGet(uuid, pathPath),
149                 new PresetSDCGetServiceMetadataGet(uuid,invariantUuid, pathPath));
150         registerExpectationFromPresets(presets, CLEAR_THEN_SET);
151     }
152
153     private String turnOffInstantiationUI(String expectedJson) {
154         if (!Features.FLAG_5G_IN_NEW_INSTANTIATION_UI.isActive()) {
155             // replaces the instantiationUI field-value with "legacy", whatever it was
156             return expectedJson.replaceFirst("(\"instantiationUI\": *\")[^\"]*(\",)", "$1legacy$2");
157         } else {
158             return expectedJson;
159         }
160     }
161
162     @Test
163     public void withModelFromE2eWithToscaParserButNewFlow_requestModels_expectVnfRelatedVfModulesNotNull() {
164
165         /*
166         We had a problem that this exact model vnfs returned with no vfModules and
167         volumeGroups, because a 'isNewFlow' value in org.onap.vid.asdc.parser.ToscaParserImpl
168         was always false because a coding error.
169          */
170         registerExpectation("get_sdc_catalog_services_VflorenceRvpmsFeAic3011217Svc.json", CLEAR_THEN_SET);
171         registerExpectation("create_new_instance/aai_get_full_subscribers.json", APPEND);
172
173         final JsonNode response = restTemplate.getForObject(uri + "/rest/models/services/" + "245562de-3984-49ef-a708-6c9d7cfcabd1", JsonNode.class);
174
175         // using json-pointers instead of path, because vnf name has
176         // dots and spaces
177         final String myVnf = "vFLORENCEvProbe_FE_AIC3-11.2.1_VF 1";
178         final String base = "/vnfs/" + myVnf;
179
180         assertFalse(response.at(base).isMissingNode(),
181                 "test relies on '" + myVnf + "' to be in model; got: " + response);
182
183         assertThat("vfModules under '" + myVnf + "' must not be empty; got: " + response,
184                 response.at(base + "/vfModules").size(), is(not(0)));
185
186         assertThat("volumeGroups under '" + myVnf + "' must not be empty; got: " + response,
187                 response.at(base + "/volumeGroups").size(), is(not(0)));
188
189     }
190 }