Closed loop operation guarantee for ccvpn
[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             Util.buildSoSim();
61         } catch (final Exception e) {
62             fail(e.getMessage());
63         }
64     }
65
66     @AfterClass
67     public static void tearDownSimulator() {
68         HttpServletServerFactoryInstance.getServerFactory().destroy();
69         SoSimulatorJaxRs.setRequirePolling(false);
70     }
71
72     /**
73      * Create dummy SO request for TestResponse() junit.
74      */
75     private SoRequest createTestRequest() {
76
77         // Construct SO Request
78         final SoRequest request = new SoRequest();
79         request.setRequestId(UUID.randomUUID());
80         request.setRequestDetails(new SoRequestDetails());
81         request.getRequestDetails().setModelInfo(new SoModelInfo());
82         request.getRequestDetails().setCloudConfiguration(new SoCloudConfiguration());
83         request.getRequestDetails().setRequestInfo(new SoRequestInfo());
84         request.getRequestDetails().setRequestParameters(new SoRequestParameters());
85         request.getRequestDetails().getRequestParameters().setUserParams(null);
86         //
87         // cloudConfiguration
88         //
89         request.getRequestDetails().getCloudConfiguration().setLcpCloudRegionId("DFW");
90         request.getRequestDetails().getCloudConfiguration().setTenantId("1015548");
91         //
92         // modelInfo
93         //
94         request.getRequestDetails().getModelInfo().setModelType("vfModule");
95         request.getRequestDetails().getModelInfo().setModelInvariantId("f32568ec-2f1c-458a-864b-0593d53d141a");
96         request.getRequestDetails().getModelInfo().setModelVersionId("69615025-879d-4f0d-afe3-b7d1a7eeed1f");
97         request.getRequestDetails().getModelInfo().setModelName("C15ce9e1E9144c8fB8bb..dnsscaling..module-1");
98         request.getRequestDetails().getModelInfo().setModelVersion("1.0");
99         //
100         // requestInfo
101         //
102         request.getRequestDetails().getRequestInfo()
103                         .setInstanceName("vDNS_Ete_Named90e1ab3-dcd5-4877-9edb-eadfc84e32c8");
104         request.getRequestDetails().getRequestInfo().setSource("POLICY");
105         request.getRequestDetails().getRequestInfo().setSuppressRollback(false);
106         request.getRequestDetails().getRequestInfo().setRequestorId("policy");
107         //
108         // relatedInstanceList
109         //
110         final SoRelatedInstanceListElement relatedInstanceListElement1 = new SoRelatedInstanceListElement();
111         final SoRelatedInstanceListElement relatedInstanceListElement2 = new SoRelatedInstanceListElement();
112         relatedInstanceListElement1.setRelatedInstance(new SoRelatedInstance());
113         relatedInstanceListElement2.setRelatedInstance(new SoRelatedInstance());
114         //
115         relatedInstanceListElement1.getRelatedInstance().setInstanceId("cf8426a6-0b53-4e3d-bfa6-4b2f4d5913a5");
116         relatedInstanceListElement1.getRelatedInstance().setModelInfo(new SoModelInfo());
117         relatedInstanceListElement1.getRelatedInstance().getModelInfo().setModelType("service");
118         relatedInstanceListElement1.getRelatedInstance().getModelInfo()
119                         .setModelInvariantId("4fcbc1c0-7793-46d8-8aa1-fa1c2ed9ec7b");
120         relatedInstanceListElement1.getRelatedInstance().getModelInfo()
121                         .setModelVersionId("5c996219-b2e2-4c76-9b43-7e8672a33c1d");
122         relatedInstanceListElement1.getRelatedInstance().getModelInfo().setModelName("8330e932-2a23-4943-8606");
123         relatedInstanceListElement1.getRelatedInstance().getModelInfo().setModelVersion("1.0");
124         //
125         relatedInstanceListElement2.getRelatedInstance().setInstanceId("594e2fe0-48b8-41ff-82e2-3d4bab69b192");
126         relatedInstanceListElement2.getRelatedInstance().setModelInfo(new SoModelInfo());
127         relatedInstanceListElement2.getRelatedInstance().getModelInfo().setModelType("vnf");
128         relatedInstanceListElement2.getRelatedInstance().getModelInfo()
129                         .setModelInvariantId("033a32ed-aa65-4764-a736-36f2942f1aa0");
130         relatedInstanceListElement2.getRelatedInstance().getModelInfo()
131                         .setModelVersionId("d4d072dc-4e21-4a03-9524-628985819a8e");
132         relatedInstanceListElement2.getRelatedInstance().getModelInfo().setModelName("c15ce9e1-e914-4c8f-b8bb");
133         relatedInstanceListElement2.getRelatedInstance().getModelInfo().setModelVersion("1");
134         relatedInstanceListElement2.getRelatedInstance().getModelInfo()
135                         .setModelCustomizationName("c15ce9e1-e914-4c8f-b8bb 1");
136         //
137         request.getRequestDetails().getRelatedInstanceList().add(relatedInstanceListElement1);
138         request.getRequestDetails().getRelatedInstanceList().add(relatedInstanceListElement2);
139
140         return request;
141     }
142
143     @Test
144     public void testPost() {
145         SoSimulatorJaxRs.setRequirePolling(false);
146         String request = Serialization.gsonPretty.toJson(this.createTestRequest());
147         Pair<Integer, String> httpDetails = new RestManager().post(
148                         "http://localhost:6667/serviceInstantiation/v7/serviceInstances/12345/vnfs/12345/vfModules/scaleOut",
149                         "username",
150                         "password", new HashMap<>(), "application/json", request);
151         assertNotNull(httpDetails);
152         assertThat(httpDetails.getRight()).contains("\"COMPLETE\"").contains("requestSelfLink");
153
154         /*
155          * Repeat, but set the flag indicating that the request should yield incomplete.
156          */
157         SoSimulatorJaxRs.setRequirePolling(true);
158
159         request = Serialization.gsonPretty.toJson(this.createTestRequest());
160         httpDetails = new RestManager().post(
161                         "http://localhost:6667/serviceInstantiation/v7/serviceInstances/12345/vnfs/12345/vfModules/scaleOut",
162                         "username",
163                         "password", new HashMap<>(), "application/json", request);
164         assertNotNull(httpDetails);
165         assertThat(httpDetails.getRight()).contains("requestSelfLink").doesNotContain("\"COMPLETE\"");
166
167         // now poll for the response
168         String uri = extractUri(httpDetails.getRight());
169         httpDetails = new RestManager().get(
170                         "http://localhost:6667/orchestrationRequests/v5/" + uri,
171                         "username",
172                         "password", new HashMap<>());
173         assertNotNull(httpDetails);
174         assertThat(httpDetails.getRight()).contains("\"IN_PROGRESS\"").doesNotContain("requestSelfLink");
175
176         // poll again
177         httpDetails = new RestManager().get(
178                         "http://localhost:6667/orchestrationRequests/v5/" + uri,
179                         "username",
180                         "password", new HashMap<>());
181         assertNotNull(httpDetails);
182         assertThat(httpDetails.getRight()).contains("\"COMPLETE\"").doesNotContain("requestSelfLink");
183     }
184
185     @Test
186     public void testDelete() {
187         SoSimulatorJaxRs.setRequirePolling(false);
188         String request = Serialization.gsonPretty.toJson(this.createTestRequest());
189         Pair<Integer, String> httpDetails = new RestManager().delete(
190                         "http://localhost:6667/serviceInstances/v7/12345/vnfs/12345/vfModules/12345",
191                         "username",
192                         "password", new HashMap<>(), "application/json", request);
193         assertNotNull(httpDetails);
194         assertThat(httpDetails.getRight()).contains("\"COMPLETE\"").contains("requestSelfLink");
195
196         /*
197          * Repeat, but set the flag indicating that the request should yield incomplete.
198          */
199         SoSimulatorJaxRs.setRequirePolling(true);
200
201         request = Serialization.gsonPretty.toJson(this.createTestRequest());
202         httpDetails = new RestManager().delete(
203                         "http://localhost:6667/serviceInstances/v7/12345/vnfs/12345/vfModules/12345",
204                         "username",
205                         "password", new HashMap<>(), "application/json", request);
206         assertNotNull(httpDetails);
207         assertThat(httpDetails.getRight()).contains("requestSelfLink").doesNotContain("\"COMPLETE\"");
208
209         // now poll for the response
210         String uri = extractUri(httpDetails.getRight());
211         httpDetails = new RestManager().get(
212                         "http://localhost:6667/orchestrationRequests/v5/" + uri,
213                         "username",
214                         "password", new HashMap<>());
215         assertNotNull(httpDetails);
216         assertThat(httpDetails.getRight()).contains("\"IN_PROGRESS\"").doesNotContain("requestSelfLink");
217
218         // poll again
219         httpDetails = new RestManager().get(
220                         "http://localhost:6667/orchestrationRequests/v5/" + uri,
221                         "username",
222                         "password", new HashMap<>());
223         assertNotNull(httpDetails);
224         assertThat(httpDetails.getRight()).contains("\"COMPLETE\"").doesNotContain("requestSelfLink");
225     }
226
227     @Test
228     public void testModifyNssi() {
229         SoSimulatorJaxRs.setRequirePolling(false);
230         String request = Serialization.gsonPretty.toJson(this.createNssiRequest());
231         Pair<Integer, String> httpDetails = new RestManager().put(
232                 "http://localhost:6667/3gppservices/v7/modify",
233                 "username",
234                 "password", new HashMap<>(), "application/json", request);
235         assertNotNull(httpDetails);
236         assertEquals(200, httpDetails.getLeft().intValue());
237         assertThat(httpDetails.getRight()).contains("jobId").contains("status");
238     }
239
240     private SoRequest3gpp createNssiRequest() {
241         SoRequest3gpp request = new SoRequest3gpp();
242
243         request.setName("URLLC_core1");
244         request.setServiceInstanceId("ff67a209-dc69-4a1a-b89a-c1f55c2a8842");
245         request.setGlobalSubscriberId("5G Customer");
246         request.setSubscriptionServiceType("5G");
247         request.setNetworkType("an");
248         request.setAdditionalProperties(new HashMap<String, Object>());
249
250         return request;
251     }
252
253     @Test
254     public void testModifyCll() {
255         SoSimulatorJaxRs.setRequirePolling(false);
256         String request = Serialization.gsonPretty.toJson(this.createCllRequest());
257         Pair<Integer, String> httpDetails = new RestManager().put(
258                 "http://localhost:6667/infra/serviceIntent/v1/modify",
259                 "username",
260                 "password", new HashMap<>(), "application/json", request);
261         assertNotNull(httpDetails);
262         assertEquals(200, httpDetails.getLeft().intValue());
263         assertThat(httpDetails.getRight()).contains("jobId").contains("status");
264     }
265
266     private SoRequestCll createCllRequest() {
267         SoRequestCll request = new SoRequestCll();
268
269         request.setName("cloud-leased-line-101");
270         request.setServiceInstanceId("cll-instance-01");
271         request.setGlobalSubscriberId("IBNCustomer");
272         request.setSubscriptionServiceType("ibn");
273         request.setServiceType("CLL");
274         request.setAdditionalProperties(new HashMap<String, Object>());
275
276         return request;
277     }
278
279     private String extractUri(String response) {
280         final String prefix = "\"requestId\": \"";
281
282         int start = response.indexOf(prefix);
283         assertTrue(start >= 0);
284
285         start += prefix.length();
286
287         int end = response.indexOf('"', start);
288         assertTrue(end >= 0);
289
290         return response.substring(start, end);
291     }
292 }