2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
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;
31 import java.util.HashMap;
32 import java.util.Properties;
33 import java.util.UUID;
35 import org.drools.core.WorkingMemory;
37 import org.junit.AfterClass;
38 import org.junit.BeforeClass;
39 import org.junit.Test;
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;
57 import org.slf4j.Logger;
58 import org.slf4j.LoggerFactory;
60 public class AppcLcmOperationTest {
61 private static Logger logger = LoggerFactory.getLogger(AppcLcmOperationTest.class);
63 public static Policy policy;
64 public static VirtualControlLoopEvent event;
65 public static Transaction transaction;
66 public static AppcLcmOperation operation;
72 public static void start() {
73 PolicyEngineConstants.getManager().configure(new Properties());
74 PolicyEngineConstants.getManager().start();
76 policy = new Policy();
77 policy.setActor("APPCLCM");
78 policy.setTarget(new Target(TargetType.VM));
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",
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");
106 WorkingMemory wm = mock(WorkingMemory.class);
107 transaction = new Transaction(wm, "clvusptest", event.getRequestId(), null);
111 public static void cleanup() {
112 transaction.cleanup();
113 PolicyEngineConstants.getManager().stop();
117 public void getVmRestartRequestTest() throws ControlLoopException {
119 policy.setRecipe("RESTART");
120 policy.getTarget().setType(TargetType.VM);
121 operation = new AppcLcmOperation(transaction, policy, event, 1);
123 Object request = operation.getRequest();
124 assertTrue(request instanceof AppcLcmDmaapWrapper);
126 AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) request;
127 assertEquals("request", dmaapRequest.getType());
128 assertEquals("restart", dmaapRequest.getRpcName());
129 assertNotNull(dmaapRequest.getBody());
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());
142 logger.info("vm restart request: {}", Serialization.gson.toJson(request, AppcLcmDmaapWrapper.class));
147 public void getVnfRestartRequestTest() throws ControlLoopException {
149 policy.setRecipe("RESTART");
150 policy.getTarget().setType(TargetType.VNF);
151 operation = new AppcLcmOperation(transaction, policy, event, 1);
153 Object request = operation.getRequest();
154 assertTrue(request instanceof AppcLcmDmaapWrapper);
156 AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) request;
157 assertEquals("request", dmaapRequest.getType());
158 assertEquals("restart", dmaapRequest.getRpcName());
159 assertNotNull(dmaapRequest.getBody());
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());
172 logger.info("vnf restart request: {}", Serialization.gson.toJson(request, AppcLcmDmaapWrapper.class));
177 public void getVmRebuildRequestTest() throws ControlLoopException {
179 policy.setRecipe("REBUILD");
180 policy.getTarget().setType(TargetType.VM);
181 operation = new AppcLcmOperation(transaction, policy, event, 1);
183 Object request = operation.getRequest();
184 assertTrue(request instanceof AppcLcmDmaapWrapper);
186 AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) request;
187 assertEquals("request", dmaapRequest.getType());
188 assertEquals("rebuild", dmaapRequest.getRpcName());
189 assertNotNull(dmaapRequest.getBody());
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());
202 logger.info("vm rebuild request: {}", Serialization.gson.toJson(request, AppcLcmDmaapWrapper.class));
207 public void getVnfRebuildRequestTest() throws ControlLoopException {
209 policy.setRecipe("REBUILD");
210 policy.getTarget().setType(TargetType.VNF);
211 operation = new AppcLcmOperation(transaction, policy, event, 1);
213 Object request = operation.getRequest();
214 assertTrue(request instanceof AppcLcmDmaapWrapper);
216 AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) request;
217 assertEquals("request", dmaapRequest.getType());
218 assertEquals("rebuild", dmaapRequest.getRpcName());
219 assertNotNull(dmaapRequest.getBody());
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());
232 logger.info("vnf rebuild request: {}", Serialization.gson.toJson(request, AppcLcmDmaapWrapper.class));
237 public void getVmMigrateRequestTest() throws ControlLoopException {
239 policy.setRecipe("MIGRATE");
240 policy.getTarget().setType(TargetType.VM);
241 operation = new AppcLcmOperation(transaction, policy, event, 1);
243 Object request = operation.getRequest();
244 assertTrue(request instanceof AppcLcmDmaapWrapper);
246 AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) request;
247 assertEquals("request", dmaapRequest.getType());
248 assertEquals("migrate", dmaapRequest.getRpcName());
249 assertNotNull(dmaapRequest.getBody());
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());
262 logger.info("vm migrate request: {}", Serialization.gson.toJson(request, AppcLcmDmaapWrapper.class));
267 public void getVnfMigrateRequestTest() throws ControlLoopException {
269 policy.setRecipe("MIGRATE");
270 policy.getTarget().setType(TargetType.VNF);
271 operation = new AppcLcmOperation(transaction, policy, event, 1);
273 Object request = operation.getRequest();
274 assertTrue(request instanceof AppcLcmDmaapWrapper);
276 AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) request;
277 assertEquals("request", dmaapRequest.getType());
278 assertEquals("migrate", dmaapRequest.getRpcName());
279 assertNotNull(dmaapRequest.getBody());
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());
292 logger.info("vnf migrate request: {}", Serialization.gson.toJson(request, AppcLcmDmaapWrapper.class));
297 public void getVmEvacuateRequestTest() throws ControlLoopException {
299 policy.setRecipe("EVACUATE");
300 policy.getTarget().setType(TargetType.VM);
301 operation = new AppcLcmOperation(transaction, policy, event, 1);
303 Object request = operation.getRequest();
304 assertTrue(request instanceof AppcLcmDmaapWrapper);
306 AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) request;
307 assertEquals("request", dmaapRequest.getType());
308 assertEquals("evacuate", dmaapRequest.getRpcName());
309 assertNotNull(dmaapRequest.getBody());
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());
322 logger.info("vm evacuate request: {}", Serialization.gson.toJson(request, AppcLcmDmaapWrapper.class));
327 public void getVnfEvacuateRequestTest() throws ControlLoopException {
329 policy.setRecipe("EVACUATE");
330 policy.getTarget().setType(TargetType.VNF);
331 operation = new AppcLcmOperation(transaction, policy, event, 1);
333 Object request = operation.getRequest();
334 assertTrue(request instanceof AppcLcmDmaapWrapper);
336 AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) request;
337 assertEquals("request", dmaapRequest.getType());
338 assertEquals("evacuate", dmaapRequest.getRpcName());
339 assertNotNull(dmaapRequest.getBody());
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());
352 logger.info("vnf evacuate request: {}", Serialization.gson.toJson(request, AppcLcmDmaapWrapper.class));
357 public void getVmRebootRequestTest() throws ControlLoopException {
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);
365 Object request = operation.getRequest();
366 assertTrue(request instanceof AppcLcmDmaapWrapper);
368 AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) request;
369 assertEquals("request", dmaapRequest.getType());
370 assertEquals("reboot", dmaapRequest.getRpcName());
371 assertNotNull(dmaapRequest.getBody());
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());
384 logger.info("vm reboot request: {}", Serialization.gson.toJson(request, AppcLcmDmaapWrapper.class));
389 public void getVnfRebootRequestTest() throws ControlLoopException {
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);
397 Object request = operation.getRequest();
398 assertTrue(request instanceof AppcLcmDmaapWrapper);
400 AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) request;
401 assertEquals("request", dmaapRequest.getType());
402 assertEquals("reboot", dmaapRequest.getRpcName());
403 assertNotNull(dmaapRequest.getBody());
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());
416 logger.info("vnf reboot request: {}", Serialization.gson.toJson(request, AppcLcmDmaapWrapper.class));
421 public void getVnfStartRequestTest() throws ControlLoopException {
423 policy.setRecipe("START");
424 policy.getTarget().setType(TargetType.VNF);
425 operation = new AppcLcmOperation(transaction, policy, event, 1);
427 Object request = operation.getRequest();
428 assertTrue(request instanceof AppcLcmDmaapWrapper);
430 AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) request;
431 assertEquals("request", dmaapRequest.getType());
432 assertEquals("start", dmaapRequest.getRpcName());
433 assertNotNull(dmaapRequest.getBody());
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());
446 logger.info("vnf start request: {}", Serialization.gson.toJson(request, AppcLcmDmaapWrapper.class));
451 public void getVmStartRequestTest() throws ControlLoopException {
453 policy.setRecipe("START");
454 policy.getTarget().setType(TargetType.VM);
455 operation = new AppcLcmOperation(transaction, policy, event, 1);
457 Object request = operation.getRequest();
458 assertTrue(request instanceof AppcLcmDmaapWrapper);
460 AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) request;
461 assertEquals("request", dmaapRequest.getType());
462 assertEquals("start", dmaapRequest.getRpcName());
463 assertNotNull(dmaapRequest.getBody());
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());
476 logger.info("vm start request: {}", Serialization.gson.toJson(request, AppcLcmDmaapWrapper.class));
481 public void getVnfStopRequestTest() throws ControlLoopException {
483 policy.setRecipe("STOP");
484 policy.getTarget().setType(TargetType.VNF);
485 operation = new AppcLcmOperation(transaction, policy, event, 1);
487 Object request = operation.getRequest();
488 assertTrue(request instanceof AppcLcmDmaapWrapper);
490 AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) request;
491 assertEquals("request", dmaapRequest.getType());
492 assertEquals("stop", dmaapRequest.getRpcName());
493 assertNotNull(dmaapRequest.getBody());
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());
506 logger.info("vnf stop request: {}", Serialization.gson.toJson(request, AppcLcmDmaapWrapper.class));
511 public void getVmStopRequestTest() throws ControlLoopException {
513 policy.setRecipe("STOP");
514 policy.getTarget().setType(TargetType.VM);
515 operation = new AppcLcmOperation(transaction, policy, event, 1);
517 Object request = operation.getRequest();
518 assertTrue(request instanceof AppcLcmDmaapWrapper);
520 AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) request;
521 assertEquals("request", dmaapRequest.getType());
523 assertEquals("stop", dmaapRequest.getRpcName());
524 assertNotNull(dmaapRequest.getBody());
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());
537 logger.info("vm stop request: {}", Serialization.gson.toJson(request, AppcLcmDmaapWrapper.class));
541 /* ===================================================================== */
544 * these tests are for ensuring the incoming response messages process
545 * properly and translate to the expected policy result
549 public void incomingVmSuccessMessageTest() {
550 policy.setRecipe("RESTART");
551 policy.getTarget().setType(TargetType.VM);
552 operation = new AppcLcmOperation(transaction, policy, event, 1);
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);
557 operation.incomingMessage(restartResponse);
558 assertEquals(operation.getResult(), PolicyResult.SUCCESS);
562 public void incomingVnfSuccessMessageTest() {
563 policy.setRecipe("RESTART");
564 policy.getTarget().setType(TargetType.VNF);
565 operation = new AppcLcmOperation(transaction, policy, event, 1);
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);
570 /* Send in several partial success messages */
571 for (int i = 0; i < 5; i++) {
572 operation.incomingMessage(restartResponse);
573 assertEquals(operation.getResult(), null);
576 /* Send in an operation success */
577 restartResponse.getBody().getOutput().getStatus().setCode(400);
578 operation.incomingMessage(restartResponse);
579 assertEquals(operation.getResult(), PolicyResult.SUCCESS);
583 public void incomingVmFailureMessageTest() {
584 policy.setRecipe("RESTART");
585 policy.getTarget().setType(TargetType.VM);
586 operation = new AppcLcmOperation(transaction, policy, event, 1);
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);
591 operation.incomingMessage(restartResponse);
592 assertEquals(operation.getResult(), PolicyResult.FAILURE);
596 public void incomingAllVnfFailureMessageTest() {
597 policy.setRecipe("RESTART");
598 policy.getTarget().setType(TargetType.VNF);
599 operation = new AppcLcmOperation(transaction, policy, event, 1);
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);
604 /* Send in ALL failure messages */
605 for (int i = 0; i < 5; i++) {
606 operation.incomingMessage(restartResponse);
607 assertEquals(operation.getResult(), null);
610 /* Send in an operation failure */
611 restartResponse.getBody().getOutput().getStatus().setCode(401);
612 operation.incomingMessage(restartResponse);
614 /* Because every VM failed in the VNF, it should be failure result */
615 assertEquals(operation.getResult(), PolicyResult.FAILURE);
619 public void incomingPartialVnfFailureMessageTest() {
620 policy.setRecipe("RESTART");
621 policy.getTarget().setType(TargetType.VNF);
622 operation = new AppcLcmOperation(transaction, policy, event, 1);
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);
627 /* Send in several partial success messages */
628 for (int i = 0; i < 5; i++) {
629 operation.incomingMessage(restartResponse);
630 assertEquals(operation.getResult(), null);
633 /* Change status to partial failure */
634 restartResponse.getBody().getOutput().getStatus().setCode(501);
636 /* Send in several partial failures messages */
637 for (int i = 0; i < 5; i++) {
638 operation.incomingMessage(restartResponse);
639 assertEquals(operation.getResult(), null);
642 /* Send in an operation failure */
643 restartResponse.getBody().getOutput().getStatus().setCode(401);
644 operation.incomingMessage(restartResponse);
647 * Only a subset of VMs failed in the VNF so the
648 * result will be failure_exception
650 assertEquals(operation.getResult(), PolicyResult.FAILURE_EXCEPTION);
653 /* ===================================================================== */
656 * these tests are for validating the A&AI subtag and target in an onset
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());
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");
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());
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());
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());