Java 17 Upgrade
[policy/models.git] / models-interactions / model-simulators / src / test / java / org / onap / policy / simulators / SoSimulatorTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * simulators
4  * ================================================================================
5  * Copyright (C) 2017-2020 AT&T Intellectual Property. All rights reserved.
6  * Modifications Copyright (C) 2019-2020 Nordix Foundation.
7  * Modifications Copyright (C) 2020 Wipro Limited.
8  * Modifications Copyright (C) 2022 CTC, Inc. and others.
9  * ================================================================================
10  * Licensed under the Apache License, Version 2.0 (the "License");
11  * you may not use this file except in compliance with the License.
12  * You may obtain a copy of the License at
13  *
14  *      http://www.apache.org/licenses/LICENSE-2.0
15  *
16  * Unless required by applicable law or agreed to in writing, software
17  * distributed under the License is distributed on an "AS IS" BASIS,
18  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19  * See the License for the specific language governing permissions and
20  * limitations under the License.
21  * ============LICENSE_END=========================================================
22  */
23
24 package org.onap.policy.simulators;
25
26 import static org.assertj.core.api.Assertions.assertThat;
27 import static org.junit.Assert.assertEquals;
28 import static org.junit.Assert.assertNotNull;
29 import static org.junit.Assert.assertTrue;
30 import static org.junit.Assert.fail;
31
32 import java.util.HashMap;
33 import java.util.UUID;
34 import org.apache.commons.lang3.tuple.Pair;
35 import org.junit.AfterClass;
36 import org.junit.BeforeClass;
37 import org.junit.Test;
38 import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance;
39 import org.onap.policy.rest.RestManager;
40 import org.onap.policy.so.SoCloudConfiguration;
41 import org.onap.policy.so.SoModelInfo;
42 import org.onap.policy.so.SoRelatedInstance;
43 import org.onap.policy.so.SoRelatedInstanceListElement;
44 import org.onap.policy.so.SoRequest;
45 import org.onap.policy.so.SoRequest3gpp;
46 import org.onap.policy.so.SoRequestCll;
47 import org.onap.policy.so.SoRequestDetails;
48 import org.onap.policy.so.SoRequestInfo;
49 import org.onap.policy.so.SoRequestParameters;
50 import org.onap.policy.so.util.Serialization;
51
52 public class SoSimulatorTest {
53
54     /**
55      * Set up test class.
56      */
57     @BeforeClass
58     public static void setUpSimulator() {
59         try {
60             var testServer = Util.buildSoSim();
61             assertNotNull(testServer);
62         } catch (final Exception e) {
63             fail(e.getMessage());
64         }
65     }
66
67     @AfterClass
68     public static void tearDownSimulator() {
69         HttpServletServerFactoryInstance.getServerFactory().destroy();
70         SoSimulatorJaxRs.setRequirePolling(false);
71     }
72
73     /**
74      * Create dummy SO request for TestResponse() junit.
75      */
76     private SoRequest createTestRequest() {
77
78         // Construct SO Request
79         final SoRequest request = new SoRequest();
80         request.setRequestId(UUID.randomUUID());
81         request.setRequestDetails(new SoRequestDetails());
82         request.getRequestDetails().setModelInfo(new SoModelInfo());
83         request.getRequestDetails().setCloudConfiguration(new SoCloudConfiguration());
84         request.getRequestDetails().setRequestInfo(new SoRequestInfo());
85         request.getRequestDetails().setRequestParameters(new SoRequestParameters());
86         request.getRequestDetails().getRequestParameters().setUserParams(null);
87         //
88         // cloudConfiguration
89         //
90         request.getRequestDetails().getCloudConfiguration().setLcpCloudRegionId("DFW");
91         request.getRequestDetails().getCloudConfiguration().setTenantId("1015548");
92         //
93         // modelInfo
94         //
95         request.getRequestDetails().getModelInfo().setModelType("vfModule");
96         request.getRequestDetails().getModelInfo().setModelInvariantId("f32568ec-2f1c-458a-864b-0593d53d141a");
97         request.getRequestDetails().getModelInfo().setModelVersionId("69615025-879d-4f0d-afe3-b7d1a7eeed1f");
98         request.getRequestDetails().getModelInfo().setModelName("C15ce9e1E9144c8fB8bb..dnsscaling..module-1");
99         request.getRequestDetails().getModelInfo().setModelVersion("1.0");
100         //
101         // requestInfo
102         //
103         request.getRequestDetails().getRequestInfo()
104                         .setInstanceName("vDNS_Ete_Named90e1ab3-dcd5-4877-9edb-eadfc84e32c8");
105         request.getRequestDetails().getRequestInfo().setSource("POLICY");
106         request.getRequestDetails().getRequestInfo().setSuppressRollback(false);
107         request.getRequestDetails().getRequestInfo().setRequestorId("policy");
108         //
109         // relatedInstanceList
110         //
111         final SoRelatedInstanceListElement relatedInstanceListElement1 = new SoRelatedInstanceListElement();
112         final SoRelatedInstanceListElement relatedInstanceListElement2 = new SoRelatedInstanceListElement();
113         relatedInstanceListElement1.setRelatedInstance(new SoRelatedInstance());
114         relatedInstanceListElement2.setRelatedInstance(new SoRelatedInstance());
115         //
116         relatedInstanceListElement1.getRelatedInstance().setInstanceId("cf8426a6-0b53-4e3d-bfa6-4b2f4d5913a5");
117         relatedInstanceListElement1.getRelatedInstance().setModelInfo(new SoModelInfo());
118         relatedInstanceListElement1.getRelatedInstance().getModelInfo().setModelType("service");
119         relatedInstanceListElement1.getRelatedInstance().getModelInfo()
120                         .setModelInvariantId("4fcbc1c0-7793-46d8-8aa1-fa1c2ed9ec7b");
121         relatedInstanceListElement1.getRelatedInstance().getModelInfo()
122                         .setModelVersionId("5c996219-b2e2-4c76-9b43-7e8672a33c1d");
123         relatedInstanceListElement1.getRelatedInstance().getModelInfo().setModelName("8330e932-2a23-4943-8606");
124         relatedInstanceListElement1.getRelatedInstance().getModelInfo().setModelVersion("1.0");
125         //
126         relatedInstanceListElement2.getRelatedInstance().setInstanceId("594e2fe0-48b8-41ff-82e2-3d4bab69b192");
127         relatedInstanceListElement2.getRelatedInstance().setModelInfo(new SoModelInfo());
128         relatedInstanceListElement2.getRelatedInstance().getModelInfo().setModelType("vnf");
129         relatedInstanceListElement2.getRelatedInstance().getModelInfo()
130                         .setModelInvariantId("033a32ed-aa65-4764-a736-36f2942f1aa0");
131         relatedInstanceListElement2.getRelatedInstance().getModelInfo()
132                         .setModelVersionId("d4d072dc-4e21-4a03-9524-628985819a8e");
133         relatedInstanceListElement2.getRelatedInstance().getModelInfo().setModelName("c15ce9e1-e914-4c8f-b8bb");
134         relatedInstanceListElement2.getRelatedInstance().getModelInfo().setModelVersion("1");
135         relatedInstanceListElement2.getRelatedInstance().getModelInfo()
136                         .setModelCustomizationName("c15ce9e1-e914-4c8f-b8bb 1");
137         //
138         request.getRequestDetails().getRelatedInstanceList().add(relatedInstanceListElement1);
139         request.getRequestDetails().getRelatedInstanceList().add(relatedInstanceListElement2);
140
141         return request;
142     }
143
144     @Test
145     public void testPost() {
146         SoSimulatorJaxRs.setRequirePolling(false);
147         String request = Serialization.gsonPretty.toJson(this.createTestRequest());
148         Pair<Integer, String> httpDetails = new RestManager().post(
149                         "http://localhost:6667/serviceInstantiation/v7/serviceInstances/12345/vnfs/12345/vfModules/scaleOut",
150                         "username",
151                         "password", new HashMap<>(), "application/json", request);
152         assertNotNull(httpDetails);
153         assertThat(httpDetails.getRight()).contains("\"COMPLETE\"").contains("requestSelfLink");
154
155         /*
156          * Repeat, but set the flag indicating that the request should yield incomplete.
157          */
158         SoSimulatorJaxRs.setRequirePolling(true);
159
160         request = Serialization.gsonPretty.toJson(this.createTestRequest());
161         httpDetails = new RestManager().post(
162                         "http://localhost:6667/serviceInstantiation/v7/serviceInstances/12345/vnfs/12345/vfModules/scaleOut",
163                         "username",
164                         "password", new HashMap<>(), "application/json", request);
165         assertNotNull(httpDetails);
166         assertThat(httpDetails.getRight()).contains("requestSelfLink").doesNotContain("\"COMPLETE\"");
167
168         // now poll for the response
169         String uri = extractUri(httpDetails.getRight());
170         httpDetails = new RestManager().get(
171                         "http://localhost:6667/orchestrationRequests/v5/" + uri,
172                         "username",
173                         "password", new HashMap<>());
174         assertNotNull(httpDetails);
175         assertThat(httpDetails.getRight()).contains("\"IN_PROGRESS\"").doesNotContain("requestSelfLink");
176
177         // poll again
178         httpDetails = new RestManager().get(
179                         "http://localhost:6667/orchestrationRequests/v5/" + uri,
180                         "username",
181                         "password", new HashMap<>());
182         assertNotNull(httpDetails);
183         assertThat(httpDetails.getRight()).contains("\"COMPLETE\"").doesNotContain("requestSelfLink");
184     }
185
186     @Test
187     public void testDelete() {
188         SoSimulatorJaxRs.setRequirePolling(false);
189         String request = Serialization.gsonPretty.toJson(this.createTestRequest());
190         Pair<Integer, String> httpDetails = new RestManager().delete(
191                         "http://localhost:6667/serviceInstances/v7/12345/vnfs/12345/vfModules/12345",
192                         "username",
193                         "password", new HashMap<>(), "application/json", request);
194         assertNotNull(httpDetails);
195         assertThat(httpDetails.getRight()).contains("\"COMPLETE\"").contains("requestSelfLink");
196
197         /*
198          * Repeat, but set the flag indicating that the request should yield incomplete.
199          */
200         SoSimulatorJaxRs.setRequirePolling(true);
201
202         request = Serialization.gsonPretty.toJson(this.createTestRequest());
203         httpDetails = new RestManager().delete(
204                         "http://localhost:6667/serviceInstances/v7/12345/vnfs/12345/vfModules/12345",
205                         "username",
206                         "password", new HashMap<>(), "application/json", request);
207         assertNotNull(httpDetails);
208         assertThat(httpDetails.getRight()).contains("requestSelfLink").doesNotContain("\"COMPLETE\"");
209
210         // now poll for the response
211         String uri = extractUri(httpDetails.getRight());
212         httpDetails = new RestManager().get(
213                         "http://localhost:6667/orchestrationRequests/v5/" + uri,
214                         "username",
215                         "password", new HashMap<>());
216         assertNotNull(httpDetails);
217         assertThat(httpDetails.getRight()).contains("\"IN_PROGRESS\"").doesNotContain("requestSelfLink");
218
219         // poll again
220         httpDetails = new RestManager().get(
221                         "http://localhost:6667/orchestrationRequests/v5/" + uri,
222                         "username",
223                         "password", new HashMap<>());
224         assertNotNull(httpDetails);
225         assertThat(httpDetails.getRight()).contains("\"COMPLETE\"").doesNotContain("requestSelfLink");
226     }
227
228     @Test
229     public void testModifyNssi() {
230         SoSimulatorJaxRs.setRequirePolling(false);
231         String request = Serialization.gsonPretty.toJson(this.createNssiRequest());
232         Pair<Integer, String> httpDetails = new RestManager().put(
233                 "http://localhost:6667/3gppservices/v7/modify",
234                 "username",
235                 "password", new HashMap<>(), "application/json", request);
236         assertNotNull(httpDetails);
237         assertEquals(200, httpDetails.getLeft().intValue());
238         assertThat(httpDetails.getRight()).contains("jobId").contains("status");
239     }
240
241     private SoRequest3gpp createNssiRequest() {
242         SoRequest3gpp request = new SoRequest3gpp();
243
244         request.setName("URLLC_core1");
245         request.setServiceInstanceId("ff67a209-dc69-4a1a-b89a-c1f55c2a8842");
246         request.setGlobalSubscriberId("5G Customer");
247         request.setSubscriptionServiceType("5G");
248         request.setNetworkType("an");
249         request.setAdditionalProperties(new HashMap<String, Object>());
250
251         return request;
252     }
253
254     @Test
255     public void testModifyCll() {
256         SoSimulatorJaxRs.setRequirePolling(false);
257         String request = Serialization.gsonPretty.toJson(this.createCllRequest());
258         Pair<Integer, String> httpDetails = new RestManager().put(
259                 "http://localhost:6667/infra/serviceIntent/v1/modify",
260                 "username",
261                 "password", new HashMap<>(), "application/json", request);
262         assertNotNull(httpDetails);
263         assertEquals(200, httpDetails.getLeft().intValue());
264         assertThat(httpDetails.getRight()).contains("jobId").contains("status");
265     }
266
267     private SoRequestCll createCllRequest() {
268         SoRequestCll request = new SoRequestCll();
269
270         request.setName("cloud-leased-line-101");
271         request.setServiceInstanceId("cll-instance-01");
272         request.setGlobalSubscriberId("IBNCustomer");
273         request.setSubscriptionServiceType("ibn");
274         request.setServiceType("CLL");
275         request.setAdditionalProperties(new HashMap<String, Object>());
276
277         return request;
278     }
279
280     private String extractUri(String response) {
281         final String prefix = "\"requestId\": \"";
282
283         int start = response.indexOf(prefix);
284         assertTrue(start >= 0);
285
286         start += prefix.length();
287
288         int end = response.indexOf('"', start);
289         assertTrue(end >= 0);
290
291         return response.substring(start, end);
292     }
293 }