Add m2 model, including the LCM application
[policy/drools-applications.git] / controlloop / m2 / appclcm / src / test / java / appclcm / AppcLcmOperationTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * m2/appclcm
4  * ================================================================================
5  * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package appclcm;
22
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertFalse;
25 import static org.junit.Assert.assertNotNull;
26 import static org.junit.Assert.assertNull;
27 import static org.junit.Assert.assertTrue;
28 import static org.junit.Assert.fail;
29 import static org.mockito.Mockito.mock;
30
31 import java.util.HashMap;
32 import java.util.Properties;
33 import java.util.UUID;
34
35 import org.drools.core.WorkingMemory;
36
37 import org.junit.AfterClass;
38 import org.junit.BeforeClass;
39 import org.junit.Test;
40
41 import org.onap.policy.appclcm.AppcLcmDmaapWrapper;
42 import org.onap.policy.appclcm.AppcLcmInput;
43 import org.onap.policy.appclcm.util.Serialization;
44 import org.onap.policy.controlloop.ControlLoopEventStatus;
45 import org.onap.policy.controlloop.ControlLoopException;
46 import org.onap.policy.controlloop.ControlLoopTargetType;
47 import org.onap.policy.controlloop.VirtualControlLoopEvent;
48 import org.onap.policy.controlloop.policy.Policy;
49 import org.onap.policy.controlloop.policy.PolicyResult;
50 import org.onap.policy.controlloop.policy.Target;
51 import org.onap.policy.controlloop.policy.TargetType;
52 import org.onap.policy.drools.m2.lock.LockAdjunct;
53 import org.onap.policy.drools.system.PolicyEngineConstants;
54 import org.onap.policy.m2.appclcm.AppcLcmOperation;
55 import org.onap.policy.m2.base.Transaction;
56
57 import org.slf4j.Logger;
58 import org.slf4j.LoggerFactory;
59
60 public class AppcLcmOperationTest {
61     private static Logger logger = LoggerFactory.getLogger(AppcLcmOperationTest.class);
62
63     public static Policy policy;
64     public static VirtualControlLoopEvent event;
65     public static Transaction transaction;
66     public static AppcLcmOperation operation;
67
68     /**
69      * Class-level setup.
70      */
71     @BeforeClass
72     public static void start() {
73         PolicyEngineConstants.getManager().configure(new Properties());
74         PolicyEngineConstants.getManager().start();
75
76         policy = new Policy();
77         policy.setActor("APPCLCM");
78         policy.setTarget(new Target(TargetType.VM));
79
80         event = new VirtualControlLoopEvent();
81         event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
82         event.setRequestId(UUID.randomUUID());
83         event.setTarget("vserver.vserver-name");
84         event.setTargetType(ControlLoopTargetType.VM);
85         event.getAai().put("vserver.is-closed-loop-disabled", "false");
86         event.getAai().put("complex.state", "NJ");
87         event.getAai().put("vserver.l-interface.interface-name", "89ee9ee6-1e96-4063-b690-aa5ca9f73b32");
88         event.getAai().put("vserver.l-interface.l3-interface-ipv4-address-list.l3-inteface-ipv4-address",
89             "135.144.3.49");
90         event.getAai().put("vserver.l-interface.l3-interface-ipv6-address-list.l3-inteface-ipv6-address", null);
91         event.getAai().put("vserver.in-maint", "N");
92         event.getAai().put("complex.city", "AAIDefault");
93         event.getAai().put("vserver.vserver-id", "aa7a24f9-8791-491f-b31a-c8ba5ad9e2aa");
94         event.getAai().put("vserver.l-interface.network-name", "vUSP_DPA3_OAM_3750");
95         event.getAai().put("vserver.vserver-name", "ctsf0002vm013");
96         event.getAai().put("generic-vnf.vnf-name", "ctsf0002v");
97         event.getAai().put("generic-vnf.vnf-id", "0f551f1b-e4e5-4ce2-84da-eda916e06e1c");
98         event.getAai().put("generic-vnf.service-id", "e433710f-9217-458d-a79d-1c7aff376d89");
99         event.getAai().put("vserver.selflink", "https://compute-aic.dpa3.cci.att.com:8774/v2/d0719b845a804b368f8ac0bba39e188b/servers/aa7a24f9-8791-491f-b31a-c8ba5ad9e2aa");
100         event.getAai().put("generic-vnf.vnf-type", "vUSP - vCTS");
101         event.getAai().put("tenant.tenant-id", "d0719b845a804b368f8ac0bba39e188b");
102         event.getAai().put("cloud-region.identity-url", "https://compute-aic.dpa3.cci.att.com:8774/");
103         event.getAai().put("vserver.prov-status", "PROV");
104         event.getAai().put("complex.physical-location-id", "LSLEILAA");
105
106         WorkingMemory wm = mock(WorkingMemory.class);
107         transaction = new Transaction(wm, "clvusptest", event.getRequestId(), null);
108     }
109
110     @AfterClass
111     public static void cleanup() {
112         transaction.cleanup();
113         PolicyEngineConstants.getManager().stop();
114     }
115
116     @Test
117     public void getVmRestartRequestTest() throws ControlLoopException {
118
119         policy.setRecipe("RESTART");
120         policy.getTarget().setType(TargetType.VM);
121         operation = new AppcLcmOperation(transaction, policy, event, 1);
122
123         Object request = operation.getRequest();
124         assertTrue(request instanceof AppcLcmDmaapWrapper);
125
126         AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) request;
127         assertEquals("request", dmaapRequest.getType());
128         assertEquals("restart", dmaapRequest.getRpcName());
129         assertNotNull(dmaapRequest.getBody());
130
131         AppcLcmInput appcRequest = dmaapRequest.getBody().getInput();
132         assertNotNull(appcRequest.getCommonHeader());
133         assertEquals("2.00", appcRequest.getCommonHeader().getApiVer());
134         assertEquals("POLICY", appcRequest.getCommonHeader().getOriginatorId());
135         assertNotNull(appcRequest.getAction());
136         assertEquals("Restart", appcRequest.getAction());
137         assertNotNull(appcRequest.getActionIdentifiers());
138         assertEquals(event.getAai().get("generic-vnf.vnf-id"), appcRequest.getActionIdentifiers().get("vnf-id"));
139         assertEquals(event.getAai().get("vserver.vserver-id"), appcRequest.getActionIdentifiers().get("vserver-id"));
140         assertNotNull(appcRequest.getPayload());
141
142         logger.info("vm restart request: {}", Serialization.gson.toJson(request, AppcLcmDmaapWrapper.class));
143
144     }
145
146     @Test
147     public void getVnfRestartRequestTest() throws ControlLoopException {
148
149         policy.setRecipe("RESTART");
150         policy.getTarget().setType(TargetType.VNF);
151         operation = new AppcLcmOperation(transaction, policy, event, 1);
152
153         Object request = operation.getRequest();
154         assertTrue(request instanceof AppcLcmDmaapWrapper);
155
156         AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) request;
157         assertEquals("request", dmaapRequest.getType());
158         assertEquals("restart", dmaapRequest.getRpcName());
159         assertNotNull(dmaapRequest.getBody());
160
161         AppcLcmInput appcRequest = dmaapRequest.getBody().getInput();
162         assertNotNull(appcRequest.getCommonHeader());
163         assertEquals("2.00", appcRequest.getCommonHeader().getApiVer());
164         assertEquals("POLICY", appcRequest.getCommonHeader().getOriginatorId());
165         assertNotNull(appcRequest.getAction());
166         assertEquals("Restart", appcRequest.getAction());
167         assertNotNull(appcRequest.getActionIdentifiers());
168         assertEquals(event.getAai().get("generic-vnf.vnf-id"), appcRequest.getActionIdentifiers().get("vnf-id"));
169         assertEquals(appcRequest.getActionIdentifiers().get("vserver-id"), null);
170         assertNull(appcRequest.getPayload());
171
172         logger.info("vnf restart request: {}", Serialization.gson.toJson(request, AppcLcmDmaapWrapper.class));
173
174     }
175
176     @Test
177     public void getVmRebuildRequestTest() throws ControlLoopException {
178
179         policy.setRecipe("REBUILD");
180         policy.getTarget().setType(TargetType.VM);
181         operation = new AppcLcmOperation(transaction, policy, event, 1);
182
183         Object request = operation.getRequest();
184         assertTrue(request instanceof AppcLcmDmaapWrapper);
185
186         AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) request;
187         assertEquals("request", dmaapRequest.getType());
188         assertEquals("rebuild", dmaapRequest.getRpcName());
189         assertNotNull(dmaapRequest.getBody());
190
191         AppcLcmInput appcRequest = dmaapRequest.getBody().getInput();
192         assertNotNull(appcRequest.getCommonHeader());
193         assertEquals("2.00", appcRequest.getCommonHeader().getApiVer());
194         assertEquals("POLICY", appcRequest.getCommonHeader().getOriginatorId());
195         assertNotNull(appcRequest.getAction());
196         assertEquals("Rebuild", appcRequest.getAction());
197         assertNotNull(appcRequest.getActionIdentifiers());
198         assertEquals(event.getAai().get("generic-vnf.vnf-id"), appcRequest.getActionIdentifiers().get("vnf-id"));
199         assertEquals(event.getAai().get("vserver.vserver-id"), appcRequest.getActionIdentifiers().get("vserver-id"));
200         assertNotNull(appcRequest.getPayload());
201
202         logger.info("vm rebuild request: {}", Serialization.gson.toJson(request, AppcLcmDmaapWrapper.class));
203
204     }
205
206     @Test
207     public void getVnfRebuildRequestTest() throws ControlLoopException {
208
209         policy.setRecipe("REBUILD");
210         policy.getTarget().setType(TargetType.VNF);
211         operation = new AppcLcmOperation(transaction, policy, event, 1);
212
213         Object request = operation.getRequest();
214         assertTrue(request instanceof AppcLcmDmaapWrapper);
215
216         AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) request;
217         assertEquals("request", dmaapRequest.getType());
218         assertEquals("rebuild", dmaapRequest.getRpcName());
219         assertNotNull(dmaapRequest.getBody());
220
221         AppcLcmInput appcRequest = dmaapRequest.getBody().getInput();
222         assertNotNull(appcRequest.getCommonHeader());
223         assertEquals("2.00", appcRequest.getCommonHeader().getApiVer());
224         assertEquals("POLICY", appcRequest.getCommonHeader().getOriginatorId());
225         assertNotNull(appcRequest.getAction());
226         assertEquals("Rebuild", appcRequest.getAction());
227         assertNotNull(appcRequest.getActionIdentifiers());
228         assertEquals(event.getAai().get("generic-vnf.vnf-id"), appcRequest.getActionIdentifiers().get("vnf-id"));
229         assertEquals(appcRequest.getActionIdentifiers().get("vserver-id"), null);
230         assertNull(appcRequest.getPayload());
231
232         logger.info("vnf rebuild request: {}", Serialization.gson.toJson(request, AppcLcmDmaapWrapper.class));
233
234     }
235
236     @Test
237     public void getVmMigrateRequestTest() throws ControlLoopException {
238
239         policy.setRecipe("MIGRATE");
240         policy.getTarget().setType(TargetType.VM);
241         operation = new AppcLcmOperation(transaction, policy, event, 1);
242
243         Object request = operation.getRequest();
244         assertTrue(request instanceof AppcLcmDmaapWrapper);
245
246         AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) request;
247         assertEquals("request", dmaapRequest.getType());
248         assertEquals("migrate", dmaapRequest.getRpcName());
249         assertNotNull(dmaapRequest.getBody());
250
251         AppcLcmInput appcRequest = dmaapRequest.getBody().getInput();
252         assertNotNull(appcRequest.getCommonHeader());
253         assertEquals("2.00", appcRequest.getCommonHeader().getApiVer());
254         assertEquals("POLICY", appcRequest.getCommonHeader().getOriginatorId());
255         assertNotNull(appcRequest.getAction());
256         assertEquals("Migrate", appcRequest.getAction());
257         assertNotNull(appcRequest.getActionIdentifiers());
258         assertEquals(event.getAai().get("generic-vnf.vnf-id"), appcRequest.getActionIdentifiers().get("vnf-id"));
259         assertEquals(event.getAai().get("vserver.vserver-id"), appcRequest.getActionIdentifiers().get("vserver-id"));
260         assertNotNull(appcRequest.getPayload());
261
262         logger.info("vm migrate request: {}", Serialization.gson.toJson(request, AppcLcmDmaapWrapper.class));
263
264     }
265
266     @Test
267     public void getVnfMigrateRequestTest() throws ControlLoopException {
268
269         policy.setRecipe("MIGRATE");
270         policy.getTarget().setType(TargetType.VNF);
271         operation = new AppcLcmOperation(transaction, policy, event, 1);
272
273         Object request = operation.getRequest();
274         assertTrue(request instanceof AppcLcmDmaapWrapper);
275
276         AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) request;
277         assertEquals("request", dmaapRequest.getType());
278         assertEquals("migrate", dmaapRequest.getRpcName());
279         assertNotNull(dmaapRequest.getBody());
280
281         AppcLcmInput appcRequest = dmaapRequest.getBody().getInput();
282         assertNotNull(appcRequest.getCommonHeader());
283         assertEquals("2.00", appcRequest.getCommonHeader().getApiVer());
284         assertEquals("POLICY", appcRequest.getCommonHeader().getOriginatorId());
285         assertNotNull(appcRequest.getAction());
286         assertEquals("Migrate", appcRequest.getAction());
287         assertNotNull(appcRequest.getActionIdentifiers());
288         assertEquals(event.getAai().get("generic-vnf.vnf-id"), appcRequest.getActionIdentifiers().get("vnf-id"));
289         assertEquals(appcRequest.getActionIdentifiers().get("vserver-id"), null);
290         assertNull(appcRequest.getPayload());
291
292         logger.info("vnf migrate request: {}", Serialization.gson.toJson(request, AppcLcmDmaapWrapper.class));
293
294     }
295
296     @Test
297     public void getVmEvacuateRequestTest() throws ControlLoopException {
298
299         policy.setRecipe("EVACUATE");
300         policy.getTarget().setType(TargetType.VM);
301         operation = new AppcLcmOperation(transaction, policy, event, 1);
302
303         Object request = operation.getRequest();
304         assertTrue(request instanceof AppcLcmDmaapWrapper);
305
306         AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) request;
307         assertEquals("request", dmaapRequest.getType());
308         assertEquals("evacuate", dmaapRequest.getRpcName());
309         assertNotNull(dmaapRequest.getBody());
310
311         AppcLcmInput appcRequest = dmaapRequest.getBody().getInput();
312         assertNotNull(appcRequest.getCommonHeader());
313         assertEquals("2.00", appcRequest.getCommonHeader().getApiVer());
314         assertEquals("POLICY", appcRequest.getCommonHeader().getOriginatorId());
315         assertNotNull(appcRequest.getAction());
316         assertEquals("Evacuate", appcRequest.getAction());
317         assertNotNull(appcRequest.getActionIdentifiers());
318         assertEquals(event.getAai().get("generic-vnf.vnf-id"), appcRequest.getActionIdentifiers().get("vnf-id"));
319         assertEquals(event.getAai().get("vserver.vserver-id"), appcRequest.getActionIdentifiers().get("vserver-id"));
320         assertNotNull(appcRequest.getPayload());
321
322         logger.info("vm evacuate request: {}", Serialization.gson.toJson(request, AppcLcmDmaapWrapper.class));
323
324     }
325
326     @Test
327     public void getVnfEvacuateRequestTest() throws ControlLoopException {
328
329         policy.setRecipe("EVACUATE");
330         policy.getTarget().setType(TargetType.VNF);
331         operation = new AppcLcmOperation(transaction, policy, event, 1);
332
333         Object request = operation.getRequest();
334         assertTrue(request instanceof AppcLcmDmaapWrapper);
335
336         AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) request;
337         assertEquals("request", dmaapRequest.getType());
338         assertEquals("evacuate", dmaapRequest.getRpcName());
339         assertNotNull(dmaapRequest.getBody());
340
341         AppcLcmInput appcRequest = dmaapRequest.getBody().getInput();
342         assertNotNull(appcRequest.getCommonHeader());
343         assertEquals("2.00", appcRequest.getCommonHeader().getApiVer());
344         assertEquals("POLICY", appcRequest.getCommonHeader().getOriginatorId());
345         assertNotNull(appcRequest.getAction());
346         assertEquals("Evacuate", appcRequest.getAction());
347         assertNotNull(appcRequest.getActionIdentifiers());
348         assertEquals(event.getAai().get("generic-vnf.vnf-id"), appcRequest.getActionIdentifiers().get("vnf-id"));
349         assertEquals(appcRequest.getActionIdentifiers().get("vserver-id"), null);
350         assertNull(appcRequest.getPayload());
351
352         logger.info("vnf evacuate request: {}", Serialization.gson.toJson(request, AppcLcmDmaapWrapper.class));
353
354     }
355
356     @Test
357     public void getVmRebootRequestTest() throws ControlLoopException {
358
359         policy.setRecipe("REBOOT");
360         policy.getTarget().setType(TargetType.VM);
361         policy.setPayload(new HashMap<String, String>());
362         policy.getPayload().put("type", "HARD");
363         operation = new AppcLcmOperation(transaction, policy, event, 1);
364
365         Object request = operation.getRequest();
366         assertTrue(request instanceof AppcLcmDmaapWrapper);
367
368         AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) request;
369         assertEquals("request", dmaapRequest.getType());
370         assertEquals("reboot", dmaapRequest.getRpcName());
371         assertNotNull(dmaapRequest.getBody());
372
373         AppcLcmInput appcRequest = dmaapRequest.getBody().getInput();
374         assertNotNull(appcRequest.getCommonHeader());
375         assertEquals("2.00", appcRequest.getCommonHeader().getApiVer());
376         assertEquals("POLICY", appcRequest.getCommonHeader().getOriginatorId());
377         assertNotNull(appcRequest.getAction());
378         assertEquals("Reboot", appcRequest.getAction());
379         assertNotNull(appcRequest.getActionIdentifiers());
380         assertEquals(event.getAai().get("generic-vnf.vnf-id"), appcRequest.getActionIdentifiers().get("vnf-id"));
381         assertEquals(event.getAai().get("vserver.vserver-id"), appcRequest.getActionIdentifiers().get("vserver-id"));
382         assertNotNull(appcRequest.getPayload());
383
384         logger.info("vm reboot request: {}", Serialization.gson.toJson(request, AppcLcmDmaapWrapper.class));
385
386     }
387
388     @Test
389     public void getVnfRebootRequestTest() throws ControlLoopException {
390
391         policy.setRecipe("REBOOT");
392         policy.getTarget().setType(TargetType.VNF);
393         policy.setPayload(new HashMap<String, String>());
394         policy.getPayload().put("type", "HARD");
395         operation = new AppcLcmOperation(transaction, policy, event, 1);
396
397         Object request = operation.getRequest();
398         assertTrue(request instanceof AppcLcmDmaapWrapper);
399
400         AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) request;
401         assertEquals("request", dmaapRequest.getType());
402         assertEquals("reboot", dmaapRequest.getRpcName());
403         assertNotNull(dmaapRequest.getBody());
404
405         AppcLcmInput appcRequest = dmaapRequest.getBody().getInput();
406         assertNotNull(appcRequest.getCommonHeader());
407         assertEquals("2.00", appcRequest.getCommonHeader().getApiVer());
408         assertEquals("POLICY", appcRequest.getCommonHeader().getOriginatorId());
409         assertNotNull(appcRequest.getAction());
410         assertEquals("Reboot", appcRequest.getAction());
411         assertNotNull(appcRequest.getActionIdentifiers());
412         assertEquals(event.getAai().get("generic-vnf.vnf-id"), appcRequest.getActionIdentifiers().get("vnf-id"));
413         assertEquals(appcRequest.getActionIdentifiers().get("vserver-id"), null);
414         assertNotNull(appcRequest.getPayload());
415
416         logger.info("vnf reboot request: {}", Serialization.gson.toJson(request, AppcLcmDmaapWrapper.class));
417
418     }
419
420     @Test
421     public void getVnfStartRequestTest() throws ControlLoopException {
422
423         policy.setRecipe("START");
424         policy.getTarget().setType(TargetType.VNF);
425         operation = new AppcLcmOperation(transaction, policy, event, 1);
426
427         Object request = operation.getRequest();
428         assertTrue(request instanceof AppcLcmDmaapWrapper);
429
430         AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) request;
431         assertEquals("request", dmaapRequest.getType());
432         assertEquals("start", dmaapRequest.getRpcName());
433         assertNotNull(dmaapRequest.getBody());
434
435         AppcLcmInput appcRequest = dmaapRequest.getBody().getInput();
436         assertNotNull(appcRequest.getCommonHeader());
437         assertEquals("2.00", appcRequest.getCommonHeader().getApiVer());
438         assertEquals("POLICY", appcRequest.getCommonHeader().getOriginatorId());
439         assertNotNull(appcRequest.getAction());
440         assertEquals("Start", appcRequest.getAction());
441         assertNotNull(appcRequest.getActionIdentifiers());
442         assertEquals(event.getAai().get("generic-vnf.vnf-id"), appcRequest.getActionIdentifiers().get("vnf-id"));
443         assertEquals(appcRequest.getActionIdentifiers().get("vserver-id"), null);
444         assertNull(appcRequest.getPayload());
445
446         logger.info("vnf start request: {}", Serialization.gson.toJson(request, AppcLcmDmaapWrapper.class));
447
448     }
449
450     @Test
451     public void getVmStartRequestTest() throws ControlLoopException {
452
453         policy.setRecipe("START");
454         policy.getTarget().setType(TargetType.VM);
455         operation = new AppcLcmOperation(transaction, policy, event, 1);
456
457         Object request = operation.getRequest();
458         assertTrue(request instanceof AppcLcmDmaapWrapper);
459
460         AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) request;
461         assertEquals("request", dmaapRequest.getType());
462         assertEquals("start", dmaapRequest.getRpcName());
463         assertNotNull(dmaapRequest.getBody());
464
465         AppcLcmInput appcRequest = dmaapRequest.getBody().getInput();
466         assertNotNull(appcRequest.getCommonHeader());
467         assertEquals("2.00", appcRequest.getCommonHeader().getApiVer());
468         assertEquals("POLICY", appcRequest.getCommonHeader().getOriginatorId());
469         assertNotNull(appcRequest.getAction());
470         assertEquals("Start", appcRequest.getAction());
471         assertNotNull(appcRequest.getActionIdentifiers());
472         assertEquals(event.getAai().get("generic-vnf.vnf-id"), appcRequest.getActionIdentifiers().get("vnf-id"));
473         assertEquals(event.getAai().get("vserver.vserver-id"), appcRequest.getActionIdentifiers().get("vserver-id"));
474         assertNotNull(appcRequest.getPayload());
475
476         logger.info("vm start request: {}", Serialization.gson.toJson(request, AppcLcmDmaapWrapper.class));
477
478     }
479
480     @Test
481     public void getVnfStopRequestTest() throws ControlLoopException {
482
483         policy.setRecipe("STOP");
484         policy.getTarget().setType(TargetType.VNF);
485         operation = new AppcLcmOperation(transaction, policy, event, 1);
486
487         Object request = operation.getRequest();
488         assertTrue(request instanceof AppcLcmDmaapWrapper);
489
490         AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) request;
491         assertEquals("request", dmaapRequest.getType());
492         assertEquals("stop", dmaapRequest.getRpcName());
493         assertNotNull(dmaapRequest.getBody());
494
495         AppcLcmInput appcRequest = dmaapRequest.getBody().getInput();
496         assertNotNull(appcRequest.getCommonHeader());
497         assertEquals("2.00", appcRequest.getCommonHeader().getApiVer());
498         assertEquals("POLICY", appcRequest.getCommonHeader().getOriginatorId());
499         assertNotNull(appcRequest.getAction());
500         assertEquals("Stop", appcRequest.getAction());
501         assertNotNull(appcRequest.getActionIdentifiers());
502         assertEquals(event.getAai().get("generic-vnf.vnf-id"), appcRequest.getActionIdentifiers().get("vnf-id"));
503         assertEquals(appcRequest.getActionIdentifiers().get("vserver-id"), null);
504         assertNull(appcRequest.getPayload());
505
506         logger.info("vnf stop request: {}", Serialization.gson.toJson(request, AppcLcmDmaapWrapper.class));
507
508     }
509
510     @Test
511     public void getVmStopRequestTest() throws ControlLoopException {
512
513         policy.setRecipe("STOP");
514         policy.getTarget().setType(TargetType.VM);
515         operation = new AppcLcmOperation(transaction, policy, event, 1);
516
517         Object request = operation.getRequest();
518         assertTrue(request instanceof AppcLcmDmaapWrapper);
519
520         AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) request;
521         assertEquals("request", dmaapRequest.getType());
522
523         assertEquals("stop", dmaapRequest.getRpcName());
524         assertNotNull(dmaapRequest.getBody());
525
526         AppcLcmInput appcRequest = dmaapRequest.getBody().getInput();
527         assertNotNull(appcRequest.getCommonHeader());
528         assertEquals("2.00", appcRequest.getCommonHeader().getApiVer());
529         assertEquals("POLICY", appcRequest.getCommonHeader().getOriginatorId());
530         assertNotNull(appcRequest.getAction());
531         assertEquals("Stop", appcRequest.getAction());
532         assertNotNull(appcRequest.getActionIdentifiers());
533         assertEquals(event.getAai().get("generic-vnf.vnf-id"), appcRequest.getActionIdentifiers().get("vnf-id"));
534         assertEquals(event.getAai().get("vserver.vserver-id"), appcRequest.getActionIdentifiers().get("vserver-id"));
535         assertNotNull(appcRequest.getPayload());
536
537         logger.info("vm stop request: {}", Serialization.gson.toJson(request, AppcLcmDmaapWrapper.class));
538
539     }
540
541     /* ===================================================================== */
542
543     /*
544      * these tests are for ensuring the incoming response messages process
545      * properly and translate to the expected policy result
546      */
547
548     @Test
549     public void incomingVmSuccessMessageTest() {
550         policy.setRecipe("RESTART");
551         policy.getTarget().setType(TargetType.VM);
552         operation = new AppcLcmOperation(transaction, policy, event, 1);
553
554         String lcmRespJson = "{\"version\": \"2.0\",\"rpc-name\": \"Restart\",\"correlation-id\": \"baf5ba32-6b8c-430c-a91b-02d2c0ba3064-1\",\"type\": \"response\",\"body\": {\"output\": {\"status\": {\"code\": 400,\"message\": \"Restart Successful\"},\"common-header\": {\"timestamp\": \"2017-07-18T16:52:06.186Z\",\"api-ver\": \"2.01\",\"request-id\": \"baf5ba32-6b8c-430c-a91b-02d2c0ba3064\",\"sub-request-id\": \"1\",\"flags\": {\"ttl\": 600}},\"payload\": \"{\\\"vm-id\\\":\\\"http://135.25.246.131:8774/v2/81fc2bc61f974de1b5a49e8c2ec090bb/servers/75dce20c-97f9-454d-abcc-aa904a33df5a\\\",\\\"tenant-id\\\":\\\"test2\\\"}\"}}}";
555         AppcLcmDmaapWrapper restartResponse = Serialization.gson.fromJson(lcmRespJson, AppcLcmDmaapWrapper.class);
556
557         operation.incomingMessage(restartResponse);
558         assertEquals(operation.getResult(), PolicyResult.SUCCESS);
559     }
560
561     @Test
562     public void incomingVnfSuccessMessageTest() {
563         policy.setRecipe("RESTART");
564         policy.getTarget().setType(TargetType.VNF);
565         operation = new AppcLcmOperation(transaction, policy, event, 1);
566
567         String lcmRespJson = "{\"version\": \"2.0\",\"rpc-name\": \"Restart\",\"correlation-id\": \"baf5ba32-6b8c-430c-a91b-02d2c0ba3064-1\",\"type\": \"response\",\"body\": {\"output\": {\"status\": {\"code\": 500,\"message\": \"Restart Successful\"},\"common-header\": {\"timestamp\": \"2017-07-18T16:52:06.186Z\",\"api-ver\": \"2.01\",\"request-id\": \"baf5ba32-6b8c-430c-a91b-02d2c0ba3064\",\"sub-request-id\": \"1\",\"flags\": {\"ttl\": 600}},\"payload\": \"{\\\"vm-id\\\":\\\"http://135.25.246.131:8774/v2/81fc2bc61f974de1b5a49e8c2ec090bb/servers/75dce20c-97f9-454d-abcc-aa904a33df5a\\\",\\\"tenant-id\\\":\\\"test2\\\"}\"}}}";
568         AppcLcmDmaapWrapper restartResponse = Serialization.gson.fromJson(lcmRespJson, AppcLcmDmaapWrapper.class);
569
570         /* Send in several partial success messages */
571         for (int i = 0; i < 5; i++) {
572             operation.incomingMessage(restartResponse);
573             assertEquals(operation.getResult(), null);
574         }
575
576         /* Send in an operation success */
577         restartResponse.getBody().getOutput().getStatus().setCode(400);
578         operation.incomingMessage(restartResponse);
579         assertEquals(operation.getResult(), PolicyResult.SUCCESS);
580     }
581
582     @Test
583     public void incomingVmFailureMessageTest() {
584         policy.setRecipe("RESTART");
585         policy.getTarget().setType(TargetType.VM);
586         operation = new AppcLcmOperation(transaction, policy, event, 1);
587
588         String lcmRespJson = "{\"version\": \"2.0\",\"rpc-name\": \"Restart\",\"correlation-id\": \"baf5ba32-6b8c-430c-a91b-02d2c0ba3064-1\",\"type\": \"response\",\"body\": {\"output\": {\"status\": {\"code\": 401,\"message\": \"Restart Successful\"},\"common-header\": {\"timestamp\": \"2017-07-18T16:52:06.186Z\",\"api-ver\": \"2.01\",\"request-id\": \"baf5ba32-6b8c-430c-a91b-02d2c0ba3064\",\"sub-request-id\": \"1\",\"flags\": {\"ttl\": 600}},\"payload\": \"{\\\"vm-id\\\":\\\"http://135.25.246.131:8774/v2/81fc2bc61f974de1b5a49e8c2ec090bb/servers/75dce20c-97f9-454d-abcc-aa904a33df5a\\\",\\\"tenant-id\\\":\\\"test2\\\"}\"}}}";
589         AppcLcmDmaapWrapper restartResponse = Serialization.gson.fromJson(lcmRespJson, AppcLcmDmaapWrapper.class);
590
591         operation.incomingMessage(restartResponse);
592         assertEquals(operation.getResult(), PolicyResult.FAILURE);
593     }
594
595     @Test
596     public void incomingAllVnfFailureMessageTest() {
597         policy.setRecipe("RESTART");
598         policy.getTarget().setType(TargetType.VNF);
599         operation = new AppcLcmOperation(transaction, policy, event, 1);
600
601         String lcmRespJson = "{\"version\": \"2.0\",\"rpc-name\": \"Restart\",\"correlation-id\": \"baf5ba32-6b8c-430c-a91b-02d2c0ba3064-1\",\"type\": \"response\",\"body\": {\"output\": {\"status\": {\"code\": 501,\"message\": \"Restart Successful\"},\"common-header\": {\"timestamp\": \"2017-07-18T16:52:06.186Z\",\"api-ver\": \"2.01\",\"request-id\": \"baf5ba32-6b8c-430c-a91b-02d2c0ba3064\",\"sub-request-id\": \"1\",\"flags\": {\"ttl\": 600}},\"payload\": \"{\\\"vm-id\\\":\\\"http://135.25.246.131:8774/v2/81fc2bc61f974de1b5a49e8c2ec090bb/servers/75dce20c-97f9-454d-abcc-aa904a33df5a\\\",\\\"tenant-id\\\":\\\"test2\\\"}\"}}}";
602         AppcLcmDmaapWrapper restartResponse = Serialization.gson.fromJson(lcmRespJson, AppcLcmDmaapWrapper.class);
603
604         /* Send in ALL failure messages */
605         for (int i = 0; i < 5; i++) {
606             operation.incomingMessage(restartResponse);
607             assertEquals(operation.getResult(), null);
608         }
609
610         /* Send in an operation failure */
611         restartResponse.getBody().getOutput().getStatus().setCode(401);
612         operation.incomingMessage(restartResponse);
613
614         /* Because every VM failed in the VNF, it should be failure result */
615         assertEquals(operation.getResult(), PolicyResult.FAILURE);
616     }
617
618     @Test
619     public void incomingPartialVnfFailureMessageTest() {
620         policy.setRecipe("RESTART");
621         policy.getTarget().setType(TargetType.VNF);
622         operation = new AppcLcmOperation(transaction, policy, event, 1);
623
624         String lcmRespJson = "{\"version\": \"2.0\",\"rpc-name\": \"Restart\",\"correlation-id\": \"baf5ba32-6b8c-430c-a91b-02d2c0ba3064-1\",\"type\": \"response\",\"body\": {\"output\": {\"status\": {\"code\": 500,\"message\": \"Restart Successful\"},\"common-header\": {\"timestamp\": \"2017-07-18T16:52:06.186Z\",\"api-ver\": \"2.01\",\"request-id\": \"baf5ba32-6b8c-430c-a91b-02d2c0ba3064\",\"sub-request-id\": \"1\",\"flags\": {\"ttl\": 600}},\"payload\": \"{\\\"vm-id\\\":\\\"http://135.25.246.131:8774/v2/81fc2bc61f974de1b5a49e8c2ec090bb/servers/75dce20c-97f9-454d-abcc-aa904a33df5a\\\",\\\"tenant-id\\\":\\\"test2\\\"}\"}}}";
625         AppcLcmDmaapWrapper restartResponse = Serialization.gson.fromJson(lcmRespJson, AppcLcmDmaapWrapper.class);
626
627         /* Send in several partial success messages */
628         for (int i = 0; i < 5; i++) {
629             operation.incomingMessage(restartResponse);
630             assertEquals(operation.getResult(), null);
631         }
632
633         /* Change status to partial failure */
634         restartResponse.getBody().getOutput().getStatus().setCode(501);
635
636         /* Send in several partial failures messages */
637         for (int i = 0; i < 5; i++) {
638             operation.incomingMessage(restartResponse);
639             assertEquals(operation.getResult(), null);
640         }
641
642         /* Send in an operation failure */
643         restartResponse.getBody().getOutput().getStatus().setCode(401);
644         operation.incomingMessage(restartResponse);
645
646         /*
647          * Only a subset of VMs failed in the VNF so the
648          * result will be failure_exception
649          */
650         assertEquals(operation.getResult(), PolicyResult.FAILURE_EXCEPTION);
651     }
652
653     /* ===================================================================== */
654
655     /*
656      * these tests are for validating the A&AI subtag and target in an onset
657      */
658
659     @Test
660     public void validAaiSubtagTest() {
661         transaction.setNotificationMessage(null);
662         VirtualControlLoopEvent validEvent = new VirtualControlLoopEvent();
663         validEvent.setTarget("vserver.vserver-name");
664         validEvent.getAai().put(AppcLcmOperation.DCAE_CLOSEDLOOP_DISABLED_FIELD, "false");
665         validEvent.getAai().put(validEvent.getTarget(), "VM001");
666         assertTrue(AppcLcmOperation.isAaiValid(transaction, validEvent));
667         assertNull(transaction.getNotificationMessage());
668     }
669
670     @Test
671     public void noAaiSubtagTest() {
672         transaction.setNotificationMessage(null);
673         VirtualControlLoopEvent noAaiTag = new VirtualControlLoopEvent();
674         noAaiTag.setAai(null);
675         assertFalse(AppcLcmOperation.isAaiValid(transaction, noAaiTag));
676         assertEquals(transaction.getNotificationMessage(), "No A&AI Subtag");
677     }
678
679     @Test
680     public void noClosedLoopDisabledInAaiTest() {
681         transaction.setNotificationMessage(null);
682         VirtualControlLoopEvent invalidEvent = new VirtualControlLoopEvent();
683         assertFalse(AppcLcmOperation.isAaiValid(transaction, invalidEvent));
684         assertEquals(AppcLcmOperation.DCAE_CLOSEDLOOP_DISABLED_FIELD
685                      + " information missing", transaction.getNotificationMessage());
686     }
687
688     @Test
689     public void closedLoopDisabledInAaiTest() {
690         transaction.setNotificationMessage(null);
691         VirtualControlLoopEvent invalidEvent = new VirtualControlLoopEvent();
692         invalidEvent.getAai().put(AppcLcmOperation.DCAE_CLOSEDLOOP_DISABLED_FIELD, "true");
693         assertFalse(AppcLcmOperation.isAaiValid(transaction, invalidEvent));
694         assertEquals(AppcLcmOperation.DCAE_CLOSEDLOOP_DISABLED_FIELD
695                      + " is set to true", transaction.getNotificationMessage());
696     }
697
698     @Test
699     public void targetMismatchInAaiTest() {
700         transaction.setNotificationMessage(null);
701         VirtualControlLoopEvent validEvent = new VirtualControlLoopEvent();
702         validEvent.setTarget("vserver.vserver-name");
703         validEvent.getAai().put(AppcLcmOperation.DCAE_CLOSEDLOOP_DISABLED_FIELD, "false");
704         assertFalse(AppcLcmOperation.isAaiValid(transaction, validEvent));
705         assertEquals("target field invalid - must have corresponding AAI value",
706                      transaction.getNotificationMessage());
707     }
708 }