d8613c8b70e062fecc2cbdf35ea08a514a9ceba9
[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 Nordix Foundation.
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *      http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.onap.policy.simulators;
23
24 import static org.assertj.core.api.Assertions.assertThat;
25 import static org.junit.Assert.assertNotNull;
26 import static org.junit.Assert.assertTrue;
27 import static org.junit.Assert.fail;
28
29 import java.util.HashMap;
30 import java.util.UUID;
31 import org.junit.AfterClass;
32 import org.junit.BeforeClass;
33 import org.junit.Test;
34 import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance;
35 import org.onap.policy.rest.RestManager;
36 import org.onap.policy.rest.RestManager.Pair;
37 import org.onap.policy.so.SoCloudConfiguration;
38 import org.onap.policy.so.SoModelInfo;
39 import org.onap.policy.so.SoRelatedInstance;
40 import org.onap.policy.so.SoRelatedInstanceListElement;
41 import org.onap.policy.so.SoRequest;
42 import org.onap.policy.so.SoRequestDetails;
43 import org.onap.policy.so.SoRequestInfo;
44 import org.onap.policy.so.SoRequestParameters;
45 import org.onap.policy.so.util.Serialization;
46
47 public class SoSimulatorTest {
48
49     /**
50      * Set up test class.
51      */
52     @BeforeClass
53     public static void setUpSimulator() {
54         try {
55             Util.buildSoSim();
56         } catch (final Exception e) {
57             fail(e.getMessage());
58         }
59     }
60
61     @AfterClass
62     public static void tearDownSimulator() {
63         HttpServletServerFactoryInstance.getServerFactory().destroy();
64         SoSimulatorJaxRs.setRequirePolling(false);
65     }
66
67     /**
68      * Create dummy SO request for TestResponse() junit.
69      */
70     private SoRequest createTestRequest() {
71
72         // Construct SO Request
73         final SoRequest request = new SoRequest();
74         request.setRequestId(UUID.randomUUID());
75         request.setRequestDetails(new SoRequestDetails());
76         request.getRequestDetails().setModelInfo(new SoModelInfo());
77         request.getRequestDetails().setCloudConfiguration(new SoCloudConfiguration());
78         request.getRequestDetails().setRequestInfo(new SoRequestInfo());
79         request.getRequestDetails().setRequestParameters(new SoRequestParameters());
80         request.getRequestDetails().getRequestParameters().setUserParams(null);
81         //
82         // cloudConfiguration
83         //
84         request.getRequestDetails().getCloudConfiguration().setLcpCloudRegionId("DFW");
85         request.getRequestDetails().getCloudConfiguration().setTenantId("1015548");
86         //
87         // modelInfo
88         //
89         request.getRequestDetails().getModelInfo().setModelType("vfModule");
90         request.getRequestDetails().getModelInfo().setModelInvariantId("f32568ec-2f1c-458a-864b-0593d53d141a");
91         request.getRequestDetails().getModelInfo().setModelVersionId("69615025-879d-4f0d-afe3-b7d1a7eeed1f");
92         request.getRequestDetails().getModelInfo().setModelName("C15ce9e1E9144c8fB8bb..dnsscaling..module-1");
93         request.getRequestDetails().getModelInfo().setModelVersion("1.0");
94         //
95         // requestInfo
96         //
97         request.getRequestDetails().getRequestInfo()
98                         .setInstanceName("vDNS_Ete_Named90e1ab3-dcd5-4877-9edb-eadfc84e32c8");
99         request.getRequestDetails().getRequestInfo().setSource("POLICY");
100         request.getRequestDetails().getRequestInfo().setSuppressRollback(false);
101         request.getRequestDetails().getRequestInfo().setRequestorId("policy");
102         //
103         // relatedInstanceList
104         //
105         final SoRelatedInstanceListElement relatedInstanceListElement1 = new SoRelatedInstanceListElement();
106         final SoRelatedInstanceListElement relatedInstanceListElement2 = new SoRelatedInstanceListElement();
107         relatedInstanceListElement1.setRelatedInstance(new SoRelatedInstance());
108         relatedInstanceListElement2.setRelatedInstance(new SoRelatedInstance());
109         //
110         relatedInstanceListElement1.getRelatedInstance().setInstanceId("cf8426a6-0b53-4e3d-bfa6-4b2f4d5913a5");
111         relatedInstanceListElement1.getRelatedInstance().setModelInfo(new SoModelInfo());
112         relatedInstanceListElement1.getRelatedInstance().getModelInfo().setModelType("service");
113         relatedInstanceListElement1.getRelatedInstance().getModelInfo()
114                         .setModelInvariantId("4fcbc1c0-7793-46d8-8aa1-fa1c2ed9ec7b");
115         relatedInstanceListElement1.getRelatedInstance().getModelInfo()
116                         .setModelVersionId("5c996219-b2e2-4c76-9b43-7e8672a33c1d");
117         relatedInstanceListElement1.getRelatedInstance().getModelInfo().setModelName("8330e932-2a23-4943-8606");
118         relatedInstanceListElement1.getRelatedInstance().getModelInfo().setModelVersion("1.0");
119         //
120         relatedInstanceListElement2.getRelatedInstance().setInstanceId("594e2fe0-48b8-41ff-82e2-3d4bab69b192");
121         relatedInstanceListElement2.getRelatedInstance().setModelInfo(new SoModelInfo());
122         relatedInstanceListElement2.getRelatedInstance().getModelInfo().setModelType("vnf");
123         relatedInstanceListElement2.getRelatedInstance().getModelInfo()
124                         .setModelInvariantId("033a32ed-aa65-4764-a736-36f2942f1aa0");
125         relatedInstanceListElement2.getRelatedInstance().getModelInfo()
126                         .setModelVersionId("d4d072dc-4e21-4a03-9524-628985819a8e");
127         relatedInstanceListElement2.getRelatedInstance().getModelInfo().setModelName("c15ce9e1-e914-4c8f-b8bb");
128         relatedInstanceListElement2.getRelatedInstance().getModelInfo().setModelVersion("1");
129         relatedInstanceListElement2.getRelatedInstance().getModelInfo()
130                         .setModelCustomizationName("c15ce9e1-e914-4c8f-b8bb 1");
131         //
132         request.getRequestDetails().getRelatedInstanceList().add(relatedInstanceListElement1);
133         request.getRequestDetails().getRelatedInstanceList().add(relatedInstanceListElement2);
134
135         return request;
136     }
137
138     @Test
139     public void testPost() {
140         SoSimulatorJaxRs.setRequirePolling(false);
141         String request = Serialization.gsonPretty.toJson(this.createTestRequest());
142         Pair<Integer, String> httpDetails = new RestManager().post(
143                         "http://localhost:6667/serviceInstantiation/v7/serviceInstances/12345/vnfs/12345/vfModules/scaleOut",
144                         "username",
145                         "password", new HashMap<>(), "application/json", request);
146         assertNotNull(httpDetails);
147         assertThat(httpDetails.second).contains("\"COMPLETE\"").doesNotContain("requestSelfLink");
148
149         /*
150          * Repeat, but set the flag indicating that the request should yield incomplete.
151          */
152         SoSimulatorJaxRs.setRequirePolling(true);
153
154         request = Serialization.gsonPretty.toJson(this.createTestRequest());
155         httpDetails = new RestManager().post(
156                         "http://localhost:6667/serviceInstantiation/v7/serviceInstances/12345/vnfs/12345/vfModules/scaleOut",
157                         "username",
158                         "password", new HashMap<>(), "application/json", request);
159         assertNotNull(httpDetails);
160         assertThat(httpDetails.second).contains("requestSelfLink").doesNotContain("\"COMPLETE\"");
161
162         // now poll for the response
163         String uri = extractUri(httpDetails.second);
164         httpDetails = new RestManager().get(
165                         "http://localhost:6667/orchestrationRequests/v5/" + uri,
166                         "username",
167                         "password", new HashMap<>());
168         assertNotNull(httpDetails);
169         assertThat(httpDetails.second).contains("\"IN_PROGRESS\"").doesNotContain("requestSelfLink");
170
171         // poll again
172         httpDetails = new RestManager().get(
173                         "http://localhost:6667/orchestrationRequests/v5/" + uri,
174                         "username",
175                         "password", new HashMap<>());
176         assertNotNull(httpDetails);
177         assertThat(httpDetails.second).contains("\"COMPLETE\"").doesNotContain("requestSelfLink");
178     }
179
180     @Test
181     public void testDelete() {
182         SoSimulatorJaxRs.setRequirePolling(false);
183         String request = Serialization.gsonPretty.toJson(this.createTestRequest());
184         Pair<Integer, String> httpDetails = new RestManager().delete(
185                         "http://localhost:6667/serviceInstances/v7/12345/vnfs/12345/vfModules/12345",
186                         "username",
187                         "password", new HashMap<>(), "application/json", request);
188         assertNotNull(httpDetails);
189         assertThat(httpDetails.second).contains("\"COMPLETE\"").doesNotContain("requestSelfLink");
190
191         /*
192          * Repeat, but set the flag indicating that the request should yield incomplete.
193          */
194         SoSimulatorJaxRs.setRequirePolling(true);
195
196         request = Serialization.gsonPretty.toJson(this.createTestRequest());
197         httpDetails = new RestManager().delete(
198                         "http://localhost:6667/serviceInstances/v7/12345/vnfs/12345/vfModules/12345",
199                         "username",
200                         "password", new HashMap<>(), "application/json", request);
201         assertNotNull(httpDetails);
202         assertThat(httpDetails.second).contains("requestSelfLink").doesNotContain("\"COMPLETE\"");
203
204         // now poll for the response
205         String uri = extractUri(httpDetails.second);
206         httpDetails = new RestManager().get(
207                         "http://localhost:6667/orchestrationRequests/v5/" + uri,
208                         "username",
209                         "password", new HashMap<>());
210         assertNotNull(httpDetails);
211         assertThat(httpDetails.second).contains("\"IN_PROGRESS\"").doesNotContain("requestSelfLink");
212
213         // poll again
214         httpDetails = new RestManager().get(
215                         "http://localhost:6667/orchestrationRequests/v5/" + uri,
216                         "username",
217                         "password", new HashMap<>());
218         assertNotNull(httpDetails);
219         assertThat(httpDetails.second).contains("\"COMPLETE\"").doesNotContain("requestSelfLink");
220     }
221
222     private String extractUri(String response) {
223         final String prefix = "\"requestId\": \"";
224
225         int start = response.indexOf(prefix);
226         assertTrue(start >= 0);
227
228         start += prefix.length();
229
230         int end = response.indexOf('"', start);
231         assertTrue(end >= 0);
232
233         return response.substring(start, end);
234     }
235 }