9244c7ad77b634c39634236f89defb131d9cc7bc
[policy/clamp.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2021 Nordix Foundation.
4  * ================================================================================
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.clamp.controlloop.runtime.instantiation.rest;
22
23 import static org.assertj.core.api.Assertions.assertThat;
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertNotNull;
26 import static org.junit.Assert.assertNull;
27
28 import javax.ws.rs.client.Entity;
29 import javax.ws.rs.client.Invocation;
30 import javax.ws.rs.core.Response;
31 import org.junit.AfterClass;
32 import org.junit.BeforeClass;
33 import org.junit.Test;
34 import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop;
35 import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoops;
36 import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.InstantiationCommand;
37 import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.InstantiationResponse;
38 import org.onap.policy.clamp.controlloop.runtime.instantiation.ControlLoopInstantiationProvider;
39 import org.onap.policy.clamp.controlloop.runtime.instantiation.InstantiationUtils;
40 import org.onap.policy.clamp.controlloop.runtime.util.rest.CommonRestController;
41 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
42
43 /**
44  * Class to perform unit test of {@link InstantiationController}}.
45  *
46  */
47 public class InstantiationControllerTest extends CommonRestController {
48
49     private static final String CL_INSTANTIATION_CREATE_JSON = "src/test/resources/rest/controlloops/ControlLoops.json";
50
51     private static final String CL_INSTANTIATION_UPDATE_JSON =
52             "src/test/resources/rest/controlloops/ControlLoopsUpdate.json";
53
54     private static final String CL_INSTANTIATION_CHANGE_STATE_JSON =
55             "src/test/resources/rest/controlloops/PassiveCommand.json";
56
57     private static final String INSTANTIATION_ENDPOINT = "instantiation";
58
59     private static final String INSTANTIATION_COMMAND_ENDPOINT = "instantiation/command";
60
61     /**
62      * starts Main and inserts a commissioning template.
63      *
64      * @throws Exception if an error occurs
65      */
66     @BeforeClass
67     public static void setUpBeforeClass() throws Exception {
68         CommonRestController.setUpBeforeClass("InstApi");
69
70         ControlLoops controlLoops =
71                 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Command");
72         try (ControlLoopInstantiationProvider instantiationProvider =
73                 new ControlLoopInstantiationProvider(getParameters())) {
74             instantiationProvider.createControlLoops(controlLoops);
75         }
76     }
77
78     @AfterClass
79     public static void teardownAfterClass() {
80         CommonRestController.teardownAfterClass();
81     }
82
83     @Test
84     public void testSwagger() throws Exception {
85         super.testSwagger(INSTANTIATION_ENDPOINT);
86     }
87
88     @Test
89     public void testCreate_Unauthorized() throws Exception {
90         ControlLoops controlLoops =
91                 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Unauthorized");
92
93         assertUnauthorizedPost(INSTANTIATION_ENDPOINT, Entity.json(controlLoops));
94     }
95
96     @Test
97     public void testQuery_Unauthorized() throws Exception {
98         assertUnauthorizedGet(INSTANTIATION_ENDPOINT);
99     }
100
101     @Test
102     public void testUpdate_Unauthorized() throws Exception {
103         ControlLoops controlLoops =
104                 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_UPDATE_JSON, "Unauthorized");
105
106         assertUnauthorizedPut(INSTANTIATION_ENDPOINT, Entity.json(controlLoops));
107     }
108
109     @Test
110     public void testDelete_Unauthorized() throws Exception {
111         assertUnauthorizedDelete(INSTANTIATION_ENDPOINT);
112     }
113
114     @Test
115     public void testComand_Unauthorized() throws Exception {
116         InstantiationCommand instantiationCommand = InstantiationUtils
117                 .getInstantiationCommandFromResource(CL_INSTANTIATION_CHANGE_STATE_JSON, "Unauthorized");
118
119         assertUnauthorizedPut(INSTANTIATION_COMMAND_ENDPOINT, Entity.json(instantiationCommand));
120     }
121
122     @Test
123     public void testCreate() throws Exception {
124         ControlLoops controlLoopsFromRsc =
125                 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Create");
126
127         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
128         Response resp = invocationBuilder.post(Entity.json(controlLoopsFromRsc));
129         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
130         InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
131         InstantiationUtils.assertInstantiationResponse(instResponse, controlLoopsFromRsc);
132
133         try (ControlLoopInstantiationProvider instantiationProvider =
134                 new ControlLoopInstantiationProvider(getParameters())) {
135             for (ControlLoop controlLoopFromRsc : controlLoopsFromRsc.getControlLoopList()) {
136                 ControlLoops controlLoopsFromDb = instantiationProvider.getControlLoops(
137                         controlLoopFromRsc.getKey().getName(), controlLoopFromRsc.getKey().getVersion());
138
139                 assertNotNull(controlLoopsFromDb);
140                 assertThat(controlLoopsFromDb.getControlLoopList()).hasSize(1);
141                 assertEquals(controlLoopFromRsc, controlLoopsFromDb.getControlLoopList().get(0));
142             }
143         }
144     }
145
146     @Test
147     public void testCreateBadRequest() throws Exception {
148         ControlLoops controlLoopsFromRsc =
149                 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "CreateBadRequest");
150
151         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
152         Response resp = invocationBuilder.post(Entity.json(controlLoopsFromRsc));
153         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
154
155         // testing Bad Request: CL already defined
156         resp = invocationBuilder.post(Entity.json(controlLoopsFromRsc));
157         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus());
158         InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
159         assertNotNull(instResponse.getErrorDetails());
160         assertNull(instResponse.getAffectedControlLoops());
161     }
162
163     @Test
164     public void testQuery_NoResultWithThisName() throws Exception {
165         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT + "?name=noResultWithThisName");
166         Response rawresp = invocationBuilder.buildGet().invoke();
167         assertEquals(Response.Status.OK.getStatusCode(), rawresp.getStatus());
168         ControlLoops resp = rawresp.readEntity(ControlLoops.class);
169         assertThat(resp.getControlLoopList()).isEmpty();
170     }
171
172     @Test
173     public void testQuery() throws Exception {
174         // inserts a ControlLoops to DB
175         ControlLoops controlLoops =
176                 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Query");
177         try (ControlLoopInstantiationProvider instantiationProvider =
178                 new ControlLoopInstantiationProvider(getParameters())) {
179             instantiationProvider.createControlLoops(controlLoops);
180         }
181
182         for (ControlLoop controlLoopFromRsc : controlLoops.getControlLoopList()) {
183             Invocation.Builder invocationBuilder =
184                     super.sendRequest(INSTANTIATION_ENDPOINT + "?name=" + controlLoopFromRsc.getKey().getName());
185             Response rawresp = invocationBuilder.buildGet().invoke();
186             assertEquals(Response.Status.OK.getStatusCode(), rawresp.getStatus());
187             ControlLoops controlLoopsQuery = rawresp.readEntity(ControlLoops.class);
188             assertNotNull(controlLoopsQuery);
189             assertThat(controlLoopsQuery.getControlLoopList()).hasSize(1);
190             assertEquals(controlLoopFromRsc, controlLoopsQuery.getControlLoopList().get(0));
191         }
192     }
193
194     @Test
195     public void testUpdate() throws Exception {
196         ControlLoops controlLoopsCreate =
197                 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Update");
198
199         ControlLoops controlLoops =
200                 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_UPDATE_JSON, "Update");
201
202         try (ControlLoopInstantiationProvider instantiationProvider =
203                 new ControlLoopInstantiationProvider(getParameters())) {
204             instantiationProvider.createControlLoops(controlLoopsCreate);
205
206             Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
207             Response resp = invocationBuilder.put(Entity.json(controlLoops));
208             assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
209
210             InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
211             InstantiationUtils.assertInstantiationResponse(instResponse, controlLoops);
212
213             for (ControlLoop controlLoopUpdate : controlLoops.getControlLoopList()) {
214                 ControlLoops controlLoopsFromDb = instantiationProvider
215                         .getControlLoops(controlLoopUpdate.getKey().getName(), controlLoopUpdate.getKey().getVersion());
216
217                 assertNotNull(controlLoopsFromDb);
218                 assertThat(controlLoopsFromDb.getControlLoopList()).hasSize(1);
219                 assertEquals(controlLoopUpdate, controlLoopsFromDb.getControlLoopList().get(0));
220             }
221         }
222     }
223
224     @Test
225     public void testDelete_NoResultWithThisName() throws Exception {
226         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT + "?name=noResultWithThisName");
227         Response resp = invocationBuilder.delete();
228         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), resp.getStatus());
229         InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
230         assertNotNull(instResponse.getErrorDetails());
231         assertNull(instResponse.getAffectedControlLoops());
232     }
233
234     @Test
235     public void testDelete() throws Exception {
236         ControlLoops controlLoopsFromRsc =
237                 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Delete");
238         try (ControlLoopInstantiationProvider instantiationProvider =
239                 new ControlLoopInstantiationProvider(getParameters())) {
240             instantiationProvider.createControlLoops(controlLoopsFromRsc);
241
242             for (ControlLoop controlLoopFromRsc : controlLoopsFromRsc.getControlLoopList()) {
243                 Invocation.Builder invocationBuilder =
244                         super.sendRequest(INSTANTIATION_ENDPOINT + "?name=" + controlLoopFromRsc.getKey().getName()
245                                 + "&version=" + controlLoopFromRsc.getKey().getVersion());
246                 Response resp = invocationBuilder.delete();
247                 assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
248                 InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
249                 InstantiationUtils.assertInstantiationResponse(instResponse, controlLoopFromRsc);
250
251                 ControlLoops controlLoopsFromDb = instantiationProvider.getControlLoops(
252                         controlLoopFromRsc.getKey().getName(), controlLoopFromRsc.getKey().getVersion());
253                 assertThat(controlLoopsFromDb.getControlLoopList()).isEmpty();
254             }
255         }
256     }
257
258     @Test
259     public void testDeleteBadRequest() throws Exception {
260         ControlLoops controlLoopsFromRsc =
261                 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "DelBadRequest");
262         try (ControlLoopInstantiationProvider instantiationProvider =
263                 new ControlLoopInstantiationProvider(getParameters())) {
264             instantiationProvider.createControlLoops(controlLoopsFromRsc);
265
266             for (ControlLoop controlLoopFromRsc : controlLoopsFromRsc.getControlLoopList()) {
267                 Invocation.Builder invocationBuilder =
268                         super.sendRequest(INSTANTIATION_ENDPOINT + "?name=" + controlLoopFromRsc.getKey().getName());
269                 Response resp = invocationBuilder.delete();
270                 // should be BAD_REQUEST
271                 assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), resp.getStatus());
272             }
273         }
274     }
275
276     @Test
277     public void testComand_NotFound1() throws Exception {
278         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
279         Response resp = invocationBuilder.put(Entity.json(new InstantiationCommand()));
280         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus());
281     }
282
283     @Test
284     public void testComand_NotFound2() throws Exception {
285         InstantiationCommand command =
286                 InstantiationUtils.getInstantiationCommandFromResource(CL_INSTANTIATION_CHANGE_STATE_JSON, "Command");
287         command.setOrderedState(null);
288
289         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
290         Response resp = invocationBuilder.put(Entity.json(command));
291         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus());
292     }
293
294     @Test
295     public void testCommand() throws Exception {
296         InstantiationCommand command =
297                 InstantiationUtils.getInstantiationCommandFromResource(CL_INSTANTIATION_CHANGE_STATE_JSON, "Command");
298
299         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
300         Response resp = invocationBuilder.put(Entity.json(command));
301         assertEquals(Response.Status.ACCEPTED.getStatusCode(), resp.getStatus());
302         InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
303         InstantiationUtils.assertInstantiationResponse(instResponse, command);
304
305         // check passive state on DB
306         try (ControlLoopInstantiationProvider instantiationProvider =
307                 new ControlLoopInstantiationProvider(getParameters())) {
308             for (ToscaConceptIdentifier toscaConceptIdentifier : command.getControlLoopIdentifierList()) {
309                 ControlLoops controlLoopsGet = instantiationProvider.getControlLoops(toscaConceptIdentifier.getName(),
310                         toscaConceptIdentifier.getVersion());
311                 assertThat(controlLoopsGet.getControlLoopList()).hasSize(1);
312                 assertEquals(command.getOrderedState(), controlLoopsGet.getControlLoopList().get(0).getOrderedState());
313             }
314         }
315     }
316 }