9cc0195d99b2f7fd7b9a27d0cd3c8f660600b1a7
[policy/clamp.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2021 Nordix Foundation.
4  *  Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
5  * ================================================================================
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  * SPDX-License-Identifier: Apache-2.0
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.onap.policy.clamp.controlloop.runtime.instantiation.rest;
23
24 import static org.assertj.core.api.Assertions.assertThat;
25 import static org.junit.jupiter.api.Assertions.assertEquals;
26 import static org.junit.jupiter.api.Assertions.assertNotNull;
27 import static org.junit.jupiter.api.Assertions.assertNull;
28
29 import javax.ws.rs.client.Entity;
30 import javax.ws.rs.client.Invocation;
31 import javax.ws.rs.core.Response;
32 import org.junit.jupiter.api.AfterEach;
33 import org.junit.jupiter.api.BeforeAll;
34 import org.junit.jupiter.api.BeforeEach;
35 import org.junit.jupiter.api.Test;
36 import org.junit.jupiter.api.extension.ExtendWith;
37 import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop;
38 import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
39 import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoops;
40 import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ParticipantProvider;
41 import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ServiceTemplateProvider;
42 import org.onap.policy.clamp.controlloop.models.controlloop.persistence.repository.ControlLoopRepository;
43 import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.ControlLoopOrderStateResponse;
44 import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.ControlLoopPrimedResponse;
45 import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.InstancePropertiesResponse;
46 import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.InstantiationCommand;
47 import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.InstantiationResponse;
48 import org.onap.policy.clamp.controlloop.runtime.instantiation.ControlLoopInstantiationProvider;
49 import org.onap.policy.clamp.controlloop.runtime.instantiation.InstantiationUtils;
50 import org.onap.policy.clamp.controlloop.runtime.main.rest.InstantiationController;
51 import org.onap.policy.clamp.controlloop.runtime.util.CommonTestData;
52 import org.onap.policy.clamp.controlloop.runtime.util.rest.CommonRestController;
53 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
54 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
55 import org.springframework.beans.factory.annotation.Autowired;
56 import org.springframework.boot.test.context.SpringBootTest;
57 import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
58 import org.springframework.boot.web.server.LocalServerPort;
59 import org.springframework.test.context.TestPropertySource;
60 import org.springframework.test.context.junit.jupiter.SpringExtension;
61
62 /**
63  * Class to perform unit test of {@link InstantiationController}}.
64  *
65  */
66 @ExtendWith(SpringExtension.class)
67 @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
68 @TestPropertySource(locations = {"classpath:application_test.properties"})
69 class InstantiationControllerTest extends CommonRestController {
70
71     private static final String ID_NAME = "PMSH_Instance1";
72     private static final String ID_VERSION = "1.2.3";
73
74     private static final String CL_INSTANTIATION_CREATE_JSON = "src/test/resources/rest/controlloops/ControlLoops.json";
75
76     private static final String CL_INSTANTIATION_UPDATE_JSON =
77             "src/test/resources/rest/controlloops/ControlLoopsUpdate.json";
78
79     private static final String CL_INSTANTIATION_CHANGE_STATE_JSON =
80             "src/test/resources/rest/controlloops/PassiveCommand.json";
81
82     private static final String TOSCA_TEMPLATE_YAML =
83             "src/test/resources/rest/servicetemplates/pmsh_multiple_cl_tosca.yaml";
84
85     private static final String INSTANTIATION_ENDPOINT = "instantiation";
86     private static final String INSTANTIATION_COMMAND_ENDPOINT = "instantiation/command";
87     private static final String PRIMING_ENDPOINT = "controlLoopPriming";
88     private static final String INSTANTIATION_PROPERTIES = "instanceProperties";
89     private static final String INSTANTIATION_STATE = "instantiationState";
90
91     private static ToscaServiceTemplate serviceTemplate = new ToscaServiceTemplate();
92
93     @Autowired
94     private ControlLoopRepository controlLoopRepository;
95
96     @Autowired
97     private ServiceTemplateProvider serviceTemplateProvider;
98
99     @Autowired
100     private ControlLoopInstantiationProvider instantiationProvider;
101
102     @Autowired
103     private ParticipantProvider participantProvider;
104
105     @LocalServerPort
106     private int randomServerPort;
107
108     @BeforeAll
109     public static void setUpBeforeClass() throws Exception {
110         serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_TEMPLATE_YAML);
111     }
112
113     @BeforeEach
114     public void populateDb() throws Exception {
115         createEntryInDB();
116     }
117
118     @BeforeEach
119     public void setUpPort() {
120         super.setHttpPrefix(randomServerPort);
121     }
122
123     @AfterEach
124     public void cleanDatabase() throws Exception {
125         deleteEntryInDB();
126     }
127
128     @Test
129     void testSwagger() throws Exception {
130         super.testSwagger(INSTANTIATION_ENDPOINT);
131     }
132
133     @Test
134     void testCreate_Unauthorized() throws Exception {
135         ControlLoops controlLoops =
136                 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Unauthorized");
137
138         assertUnauthorizedPost(INSTANTIATION_ENDPOINT, Entity.json(controlLoops));
139     }
140
141     @Test
142     void testQuery_Unauthorized() throws Exception {
143         assertUnauthorizedGet(INSTANTIATION_ENDPOINT);
144     }
145
146     @Test
147     void testUpdate_Unauthorized() throws Exception {
148         ControlLoops controlLoops =
149                 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_UPDATE_JSON, "Unauthorized");
150
151         assertUnauthorizedPut(INSTANTIATION_ENDPOINT, Entity.json(controlLoops));
152     }
153
154     @Test
155     void testDelete_Unauthorized() throws Exception {
156         assertUnauthorizedDelete(INSTANTIATION_ENDPOINT);
157     }
158
159     @Test
160     void testCommand_Unauthorized() throws Exception {
161         InstantiationCommand instantiationCommand = InstantiationUtils
162                 .getInstantiationCommandFromResource(CL_INSTANTIATION_CHANGE_STATE_JSON, "Unauthorized");
163
164         assertUnauthorizedPut(INSTANTIATION_COMMAND_ENDPOINT, Entity.json(instantiationCommand));
165     }
166
167     @Test
168     void testCreate() throws Exception {
169
170         ControlLoops controlLoopsFromRsc =
171                 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Create");
172
173         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
174         Response resp = invocationBuilder.post(Entity.json(controlLoopsFromRsc));
175         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
176         InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
177         InstantiationUtils.assertInstantiationResponse(instResponse, controlLoopsFromRsc);
178
179         for (ControlLoop controlLoopFromRsc : controlLoopsFromRsc.getControlLoopList()) {
180             ControlLoops controlLoopsFromDb = instantiationProvider
181                     .getControlLoops(controlLoopFromRsc.getKey().getName(), controlLoopFromRsc.getKey().getVersion());
182
183             assertNotNull(controlLoopsFromDb);
184             assertThat(controlLoopsFromDb.getControlLoopList()).hasSize(1);
185             assertEquals(controlLoopFromRsc, controlLoopsFromDb.getControlLoopList().get(0));
186         }
187
188         invocationBuilder =
189                 super.sendRequest(PRIMING_ENDPOINT + "?name=" + "PMSHInstance0Create" + "&version=" + "1.0.1");
190         Response rawresp = invocationBuilder.buildGet().invoke();
191         assertEquals(Response.Status.OK.getStatusCode(), rawresp.getStatus());
192         ControlLoopPrimedResponse primResponse = rawresp.readEntity(ControlLoopPrimedResponse.class);
193         assertEquals(false, primResponse.getPrimedControlLoopsList().get(0).isPrimed());
194     }
195
196     @Test
197     void testCreateBadRequest() throws Exception {
198
199         ControlLoops controlLoopsFromRsc =
200                 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "CreateBadRequest");
201
202         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
203         Response resp = invocationBuilder.post(Entity.json(controlLoopsFromRsc));
204         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
205
206         // testing Bad Request: CL already defined
207         resp = invocationBuilder.post(Entity.json(controlLoopsFromRsc));
208         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus());
209         InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
210         assertNotNull(instResponse.getErrorDetails());
211         assertNull(instResponse.getAffectedControlLoops());
212     }
213
214     @Test
215     void testQuery_NoResultWithThisName() throws Exception {
216         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT + "?name=noResultWithThisName");
217         Response rawresp = invocationBuilder.buildGet().invoke();
218         assertEquals(Response.Status.OK.getStatusCode(), rawresp.getStatus());
219         ControlLoops resp = rawresp.readEntity(ControlLoops.class);
220         assertThat(resp.getControlLoopList()).isEmpty();
221     }
222
223     @Test
224     void testQuery() throws Exception {
225
226         var controlLoops = InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Query");
227         instantiationProvider.createControlLoops(controlLoops);
228
229         for (ControlLoop controlLoopFromRsc : controlLoops.getControlLoopList()) {
230             Invocation.Builder invocationBuilder =
231                     super.sendRequest(INSTANTIATION_ENDPOINT + "?name=" + controlLoopFromRsc.getKey().getName());
232             Response rawresp = invocationBuilder.buildGet().invoke();
233             assertEquals(Response.Status.OK.getStatusCode(), rawresp.getStatus());
234             ControlLoops controlLoopsQuery = rawresp.readEntity(ControlLoops.class);
235             assertNotNull(controlLoopsQuery);
236             assertThat(controlLoopsQuery.getControlLoopList()).hasSize(1);
237             assertEquals(controlLoopFromRsc, controlLoopsQuery.getControlLoopList().get(0));
238         }
239     }
240
241     @Test
242     void testUpdate() throws Exception {
243
244         ControlLoops controlLoopsCreate =
245                 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Update");
246
247         var controlLoops = InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_UPDATE_JSON, "Update");
248         instantiationProvider.createControlLoops(controlLoopsCreate);
249
250         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
251         Response resp = invocationBuilder.put(Entity.json(controlLoops));
252         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
253
254         InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
255         InstantiationUtils.assertInstantiationResponse(instResponse, controlLoops);
256
257         for (ControlLoop controlLoopUpdate : controlLoops.getControlLoopList()) {
258             ControlLoops controlLoopsFromDb = instantiationProvider
259                     .getControlLoops(controlLoopUpdate.getKey().getName(), controlLoopUpdate.getKey().getVersion());
260
261             assertNotNull(controlLoopsFromDb);
262             assertThat(controlLoopsFromDb.getControlLoopList()).hasSize(1);
263             assertEquals(controlLoopUpdate, controlLoopsFromDb.getControlLoopList().get(0));
264         }
265     }
266
267     @Test
268     void testDelete_NoResultWithThisName() throws Exception {
269         Invocation.Builder invocationBuilder =
270                 super.sendRequest(INSTANTIATION_ENDPOINT + "?name=noResultWithThisName&version=1.0.1");
271         Response resp = invocationBuilder.delete();
272         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), resp.getStatus());
273         InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
274         assertNotNull(instResponse.getErrorDetails());
275         assertNull(instResponse.getAffectedControlLoops());
276     }
277
278     @Test
279     void testDelete() throws Exception {
280
281         ControlLoops controlLoopsFromRsc =
282                 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Delete");
283
284         instantiationProvider.createControlLoops(controlLoopsFromRsc);
285
286         for (ControlLoop controlLoopFromRsc : controlLoopsFromRsc.getControlLoopList()) {
287             Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT + "?name="
288                     + controlLoopFromRsc.getKey().getName() + "&version=" + controlLoopFromRsc.getKey().getVersion());
289             Response resp = invocationBuilder.delete();
290             assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
291             InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
292             InstantiationUtils.assertInstantiationResponse(instResponse, controlLoopFromRsc);
293
294             ControlLoops controlLoopsFromDb = instantiationProvider
295                     .getControlLoops(controlLoopFromRsc.getKey().getName(), controlLoopFromRsc.getKey().getVersion());
296             assertThat(controlLoopsFromDb.getControlLoopList()).isEmpty();
297         }
298     }
299
300     @Test
301     void testDeleteBadRequest() throws Exception {
302
303         ControlLoops controlLoopsFromRsc =
304                 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "DelBadRequest");
305
306         instantiationProvider.createControlLoops(controlLoopsFromRsc);
307
308         for (ControlLoop controlLoopFromRsc : controlLoopsFromRsc.getControlLoopList()) {
309             Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT + "?name="
310                     + controlLoopFromRsc.getKey().getName());
311             Response resp = invocationBuilder.delete();
312             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus());
313         }
314     }
315
316     @Test
317     void testCreateInstanceProperties() throws Exception {
318         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_PROPERTIES);
319         Response resp = invocationBuilder.post(Entity.json(serviceTemplate));
320         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
321         var instancePropertyList = resp.readEntity(InstancePropertiesResponse.class);
322         assertNull(instancePropertyList.getErrorDetails());
323         var id = new ToscaConceptIdentifier(ID_NAME, ID_VERSION);
324         assertEquals(id, instancePropertyList.getAffectedInstanceProperties().get(0));
325
326         invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
327         resp = invocationBuilder.get();
328         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
329         var controlLoopsGet = resp.readEntity(ControlLoops.class);
330         assertThat(controlLoopsGet.getControlLoopList()).hasSize(1);
331     }
332
333     @Test
334     void testDeleteInstanceProperties() throws Exception {
335         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_PROPERTIES);
336         Response resp = invocationBuilder.post(Entity.json(serviceTemplate));
337         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
338
339         invocationBuilder = super.sendRequest(INSTANTIATION_PROPERTIES + "?name=" + ID_NAME + "&version=" + ID_VERSION);
340         resp = invocationBuilder.delete();
341         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
342         var instanceResponse = resp.readEntity(InstantiationResponse.class);
343         assertEquals(ID_NAME, instanceResponse.getAffectedControlLoops().get(0).getName());
344         ControlLoops controlLoopsGet = instantiationProvider.getControlLoops(ID_NAME, ID_VERSION);
345         assertThat(controlLoopsGet.getControlLoopList()).isEmpty();
346     }
347
348     @Test
349     void testDeleteInstancePropertiesBadRequest() throws Exception {
350         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_PROPERTIES);
351         Response resp = invocationBuilder.post(Entity.json(serviceTemplate));
352         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
353
354         invocationBuilder = super.sendRequest(INSTANTIATION_PROPERTIES + "?name=" + ID_NAME);
355         resp = invocationBuilder.delete();
356         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus());
357     }
358
359     @Test
360     void testDeleteInstancePropertiesPassiveMode() throws Exception {
361         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_PROPERTIES);
362         Response resp = invocationBuilder.post(Entity.json(serviceTemplate));
363         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
364
365         var controlLoops = InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Command");
366         instantiationProvider.createControlLoops(controlLoops);
367
368         var participants = CommonTestData.createParticipants();
369         for (var participant : participants) {
370             participantProvider.saveParticipant(participant);
371         }
372
373         InstantiationCommand command =
374             InstantiationUtils.getInstantiationCommandFromResource(CL_INSTANTIATION_CHANGE_STATE_JSON, "Command");
375
376         invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
377         resp = invocationBuilder.put(Entity.json(command));
378         assertEquals(Response.Status.ACCEPTED.getStatusCode(), resp.getStatus());
379         InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
380         InstantiationUtils.assertInstantiationResponse(instResponse, command);
381
382         // check passive state on DB and delete properties
383         for (ToscaConceptIdentifier toscaConceptIdentifier : command.getControlLoopIdentifierList()) {
384             ControlLoops controlLoopsGet = instantiationProvider.getControlLoops(toscaConceptIdentifier.getName(),
385                 toscaConceptIdentifier.getVersion());
386             assertThat(controlLoopsGet.getControlLoopList()).hasSize(1);
387             assertEquals(command.getOrderedState(), controlLoopsGet.getControlLoopList().get(0).getOrderedState());
388
389             invocationBuilder = super.sendRequest(INSTANTIATION_PROPERTIES + "?name="
390                 + toscaConceptIdentifier.getName() + "&version=" + toscaConceptIdentifier.getVersion());
391             resp = invocationBuilder.delete();
392             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus());
393         }
394     }
395
396     @Test
397     void testCommand_NotFound1() throws Exception {
398         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
399         Response resp = invocationBuilder.put(Entity.json(new InstantiationCommand()));
400         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus());
401     }
402
403     @Test
404     void testCommand_NotFound2() throws Exception {
405         InstantiationCommand command =
406                 InstantiationUtils.getInstantiationCommandFromResource(CL_INSTANTIATION_CHANGE_STATE_JSON, "Command");
407         command.setOrderedState(null);
408
409         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
410         Response resp = invocationBuilder.put(Entity.json(command));
411         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus());
412     }
413
414     @Test
415     void testCommand() throws Exception {
416         var controlLoops = InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Command");
417         instantiationProvider.createControlLoops(controlLoops);
418
419         var participants = CommonTestData.createParticipants();
420         for (var participant : participants) {
421             participantProvider.saveParticipant(participant);
422         }
423
424         InstantiationCommand command =
425                 InstantiationUtils.getInstantiationCommandFromResource(CL_INSTANTIATION_CHANGE_STATE_JSON, "Command");
426
427         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
428         Response resp = invocationBuilder.put(Entity.json(command));
429         assertEquals(Response.Status.ACCEPTED.getStatusCode(), resp.getStatus());
430         InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
431         InstantiationUtils.assertInstantiationResponse(instResponse, command);
432
433         // check passive state on DB
434         for (ToscaConceptIdentifier toscaConceptIdentifier : command.getControlLoopIdentifierList()) {
435             ControlLoops controlLoopsGet = instantiationProvider.getControlLoops(toscaConceptIdentifier.getName(),
436                     toscaConceptIdentifier.getVersion());
437             assertThat(controlLoopsGet.getControlLoopList()).hasSize(1);
438             assertEquals(command.getOrderedState(), controlLoopsGet.getControlLoopList().get(0).getOrderedState());
439         }
440     }
441
442     @Test
443     void testIntanceProperties() throws Exception {
444         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_PROPERTIES);
445         Response resp = invocationBuilder.post(Entity.json(serviceTemplate));
446         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
447         var instancePropertyList = resp.readEntity(InstancePropertiesResponse.class);
448         assertNull(instancePropertyList.getErrorDetails());
449         var id = new ToscaConceptIdentifier(ID_NAME, ID_VERSION);
450         assertEquals(id, instancePropertyList.getAffectedInstanceProperties().get(0));
451
452         invocationBuilder = super.sendRequest(INSTANTIATION_STATE + "?name=" + ID_NAME + "&version=" + ID_VERSION);
453         resp = invocationBuilder.buildGet().invoke();
454         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
455         var instanceOrderState = resp.readEntity(ControlLoopOrderStateResponse.class);
456         assertEquals(ControlLoopOrderedState.UNINITIALISED, instanceOrderState.getOrderedState());
457         assertEquals(ID_NAME, instanceOrderState.getControlLoopIdentifierList().get(0).getName());
458         ControlLoops controlLoopsGet = instantiationProvider.getControlLoops(ID_NAME, ID_VERSION);
459         assertThat(controlLoopsGet.getControlLoopList()).hasSize(1);
460
461         invocationBuilder = super.sendRequest(INSTANTIATION_PROPERTIES + "?name=" + ID_NAME + "&version=" + ID_VERSION);
462         resp = invocationBuilder.delete();
463         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
464         var instanceResponse = resp.readEntity(InstantiationResponse.class);
465         assertEquals(ID_NAME, instanceResponse.getAffectedControlLoops().get(0).getName());
466         controlLoopsGet = instantiationProvider.getControlLoops(ID_NAME, ID_VERSION);
467         assertThat(controlLoopsGet.getControlLoopList()).isEmpty();
468     }
469
470     @Test
471     void testChangeOrderStateFromUninitializedPassiveMode() throws Exception {
472         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_PROPERTIES);
473         Response resp = invocationBuilder.post(Entity.json(serviceTemplate));
474         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
475
476         var controlLoops = InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON,
477             "CommandPassive");
478         instantiationProvider.createControlLoops(controlLoops);
479
480         var participants = CommonTestData.createParticipants();
481         for (var participant : participants) {
482             participantProvider.saveParticipant(participant);
483         }
484
485         InstantiationCommand command =
486             InstantiationUtils.getInstantiationCommandFromResource(CL_INSTANTIATION_CHANGE_STATE_JSON,
487                 "CommandPassive");
488
489         invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
490         resp = invocationBuilder.put(Entity.json(command));
491         assertEquals(Response.Status.ACCEPTED.getStatusCode(), resp.getStatus());
492         InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
493         InstantiationUtils.assertInstantiationResponse(instResponse, command);
494     }
495
496     @Test
497     void testChangeOrderStateWithoutRegisteredParticipants() throws Exception {
498         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_PROPERTIES);
499         Response resp = invocationBuilder.post(Entity.json(serviceTemplate));
500         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
501
502         var controlLoops = InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON,
503             "CommandPassive");
504         instantiationProvider.createControlLoops(controlLoops);
505
506         InstantiationCommand command =
507             InstantiationUtils.getInstantiationCommandFromResource(CL_INSTANTIATION_CHANGE_STATE_JSON,
508                 "CommandPassive");
509
510         invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
511         resp = invocationBuilder.put(Entity.json(command));
512         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus());
513     }
514
515     private synchronized void deleteEntryInDB() throws Exception {
516         controlLoopRepository.deleteAll();
517         var list = serviceTemplateProvider.getAllServiceTemplates();
518         if (!list.isEmpty()) {
519             serviceTemplateProvider.deleteServiceTemplate(list.get(0).getName(), list.get(0).getVersion());
520         }
521     }
522
523     private synchronized void createEntryInDB() throws Exception {
524         deleteEntryInDB();
525         serviceTemplateProvider.createServiceTemplate(serviceTemplate);
526     }
527 }