2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017-2018 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=========================================================
21 package org.onap.policy.controlloop.eventmanager;
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertNotNull;
25 import static org.junit.Assert.assertNull;
26 import static org.junit.Assert.assertTrue;
27 import static org.junit.Assert.fail;
30 import java.io.FileInputStream;
31 import java.io.IOException;
32 import java.io.InputStream;
33 import java.nio.charset.StandardCharsets;
34 import java.time.Instant;
35 import java.util.HashMap;
36 import java.util.UUID;
38 import org.apache.commons.io.IOUtils;
39 import org.junit.AfterClass;
40 import org.junit.BeforeClass;
41 import org.junit.Test;
42 import org.onap.policy.aai.AaiGetVnfResponse;
43 import org.onap.policy.aai.AaiGetVserverResponse;
44 import org.onap.policy.aai.RelatedToProperty;
45 import org.onap.policy.aai.RelatedToPropertyItem;
46 import org.onap.policy.aai.Relationship;
47 import org.onap.policy.aai.RelationshipData;
48 import org.onap.policy.aai.RelationshipDataItem;
49 import org.onap.policy.aai.RelationshipList;
50 import org.onap.policy.aai.util.AaiException;
51 import org.onap.policy.controlloop.ControlLoopEventStatus;
52 import org.onap.policy.controlloop.ControlLoopException;
53 import org.onap.policy.controlloop.ControlLoopNotificationType;
54 import org.onap.policy.controlloop.Util;
55 import org.onap.policy.controlloop.VirtualControlLoopEvent;
56 import org.onap.policy.controlloop.VirtualControlLoopNotification;
57 import org.onap.policy.controlloop.eventmanager.ControlLoopEventManager.NEW_EVENT_STATUS;
58 import org.onap.policy.controlloop.policy.ControlLoopPolicy;
59 import org.onap.policy.controlloop.policy.PolicyResult;
60 import org.onap.policy.drools.http.server.HttpServletServer;
61 import org.onap.policy.drools.system.PolicyEngine;
62 import org.onap.policy.guard.GuardResult;
63 import org.onap.policy.guard.PolicyGuard;
64 import org.onap.policy.guard.PolicyGuard.LockResult;
65 import org.onap.policy.guard.TargetLock;
66 import org.slf4j.Logger;
67 import org.slf4j.LoggerFactory;
69 public class ControlLoopEventManagerTest {
70 private static final Logger logger = LoggerFactory.getLogger(ControlLoopEventManagerTest.class);
72 private static VirtualControlLoopEvent onset;
75 onset = new VirtualControlLoopEvent();
76 onset.setClosedLoopControlName("ControlLoop-vUSP");
77 onset.setRequestId(UUID.randomUUID());
78 onset.setTarget("VM_NAME");
79 onset.setClosedLoopAlarmStart(Instant.now());
80 onset.setAai(new HashMap<String, String>());
81 onset.getAai().put("cloud-region.identity-url", "foo");
82 onset.getAai().put("vserver.selflink", "bar");
83 onset.getAai().put("generic-vnf.vnf-id", "83f674e8-7555-44d7-9a39-bdc3770b0491");
84 onset.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
91 public static void setUpSimulator() {
93 org.onap.policy.simulators.Util.buildAaiSim();
94 } catch (Exception e) {
97 PolicyEngine.manager.setEnvironmentProperty("aai.username", "AAI");
98 PolicyEngine.manager.setEnvironmentProperty("aai.password", "AAI");
99 PolicyEngine.manager.setEnvironmentProperty("aai.url", "http://localhost:6666");
103 public static void tearDownSimulator() {
104 HttpServletServer.factory.destroy();
108 public void testAaiVnfInfo() {
109 final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml");
110 onset.setClosedLoopControlName(pair.key.getControlLoop().getControlLoopName());
112 AaiGetVnfResponse response = getQueryByVnfId2(
113 PolicyEngine.manager.getEnvironmentProperty("aai.url")
114 + "/aai/v11/network/generic-vnfs/generic-vnf/",
115 PolicyEngine.manager.getEnvironmentProperty("aai.username"),
116 PolicyEngine.manager.getEnvironmentProperty("aai.password"), UUID.randomUUID(),
117 "5e49ca06-2972-4532-9ed4-6d071588d792");
118 assertNotNull(response);
119 logger.info("testAAIVnfInfo test result is " + (response == null ? "null" : "not null"));
120 } catch (Exception e) {
121 logger.error("testAAIVnfInfo Exception: ", e);
122 fail(e.getMessage());
127 public void testAaiVnfInfo2() {
128 final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml");
129 onset.setClosedLoopControlName(pair.key.getControlLoop().getControlLoopName());
131 AaiGetVnfResponse response = getQueryByVnfName2(
132 PolicyEngine.manager.getEnvironmentProperty("aai.url")
133 + "/aai/v11/network/generic-vnfs/generic-vnf?vnf-name=",
134 PolicyEngine.manager.getEnvironmentProperty("aai.username"),
135 PolicyEngine.manager.getEnvironmentProperty("aai.password"), UUID.randomUUID(), "lll_vnf_010317");
136 assertNotNull(response);
137 logger.info("testAAIVnfInfo2 test result is " + (response == null ? "null" : "not null"));
138 } catch (Exception e) {
139 logger.error("testAAIVnfInfo2 Exception: ", e);
140 fail(e.getMessage());
145 public void testAaiVserver() {
146 final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml");
147 onset.setClosedLoopControlName(pair.key.getControlLoop().getControlLoopName());
149 AaiGetVserverResponse response = getQueryByVserverName2(
150 PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/nodes/vservers?vserver-name=",
151 PolicyEngine.manager.getEnvironmentProperty("aai.username"),
152 PolicyEngine.manager.getEnvironmentProperty("aai.password"), UUID.randomUUID(),
153 "USMSO1SX7NJ0103UJZZ01-vjunos0");
154 assertNotNull(response);
155 logger.info("testAAIVserver test result is " + (response == null ? "null" : "not null"));
156 } catch (Exception e) {
157 logger.error("testAAIVserver Exception: ", e);
158 fail(e.getMessage());
163 public void testIsClosedLoopDisabled() {
165 // Load up the policy
167 final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml");
168 onset.setClosedLoopControlName(pair.key.getControlLoop().getControlLoopName());
171 logger.info("testIsClosedLoopDisabled --");
172 AaiGetVnfResponse response = getQueryByVnfId2(
173 PolicyEngine.manager.getEnvironmentProperty("aai.url")
174 + "/aai/v11/network/generic-vnfs/generic-vnf/",
175 PolicyEngine.manager.getEnvironmentProperty("aai.username"),
176 PolicyEngine.manager.getEnvironmentProperty("aai.password"), UUID.randomUUID(),
177 "5e49ca06-2972-4532-9ed4-6d071588d792");
178 assertNotNull(response);
181 // boolean disabled = ControlLoopEventManager.isClosedLoopDisabled(response);
182 // logger.info("QueryByVnfID - isClosedLoopDisabled: " + disabled);
184 response = getQueryByVnfName2(
185 PolicyEngine.manager.getEnvironmentProperty("aai.url")
186 + "/aai/v11/network/generic-vnfs/generic-vnf?vnf-name=",
187 PolicyEngine.manager.getEnvironmentProperty("aai.username"),
188 PolicyEngine.manager.getEnvironmentProperty("aai.password"), UUID.randomUUID(), "lll_vnf_010317");
189 assertNotNull(response);
191 // disabled = ControlLoopEventManager.isClosedLoopDisabled(response);
192 // logger.info("QueryByVnfName - isClosedLoopDisabled: " + disabled);
194 AaiGetVserverResponse response2 = getQueryByVserverName2(
195 PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/nodes/vservers?vserver-name=",
196 PolicyEngine.manager.getEnvironmentProperty("aai.user"),
197 PolicyEngine.manager.getEnvironmentProperty("aai.password"), UUID.randomUUID(),
198 "USMSO1SX7NJ0103UJZZ01-vjunos0");
199 assertNotNull(response2);
201 // disabled = ControlLoopEventManager.isClosedLoopDisabled(response2);
202 // logger.info("QueryByVserverName - isClosedLoopDisabled: " + disabled);
203 } catch (Exception e) {
204 fail(e.getMessage());
209 public void abatemetCheckEventSyntaxTest() {
210 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
211 event.setClosedLoopControlName("abatementAAI");
212 event.setRequestId(UUID.randomUUID());
213 event.setTarget("generic-vnf.vnf-id");
214 event.setClosedLoopAlarmStart(Instant.now());
215 event.setClosedLoopEventStatus(ControlLoopEventStatus.ABATED);
216 ControlLoopEventManager manager = makeManager(event);
217 assertNull(manager.getVnfResponse());
218 assertNull(manager.getVserverResponse());
220 manager.checkEventSyntax(event);
221 } catch (ControlLoopException e) {
222 logger.debug("ControlLoopException in abatemetCheckEventSyntaxTest: " + e.getMessage());
224 fail("Exception in check event syntax");
226 assertNull(manager.getVnfResponse());
227 assertNull(manager.getVserverResponse());
230 event.setAai(new HashMap<>());
231 event.getAai().put("generic-vnf.vnf-name", "abatementTest");
233 manager.checkEventSyntax(event);
234 } catch (ControlLoopException e) {
235 logger.debug("ControlLoopException in abatemetCheckEventSyntaxTest: " + e.getMessage());
237 fail("Exception in check event syntax");
239 assertNull(manager.getVnfResponse());
240 assertNull(manager.getVserverResponse());
244 public void subsequentOnsetTest() {
245 UUID requestId = UUID.randomUUID();
246 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
247 event.setClosedLoopControlName("TwoOnsetTest");
248 event.setRequestId(requestId);
249 event.setTarget("generic-vnf.vnf-id");
250 event.setClosedLoopAlarmStart(Instant.now());
251 event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
252 event.setAai(new HashMap<>());
253 event.getAai().put("generic-vnf.vnf-name", "onsetOne");
255 ControlLoopEventManager manager = makeManager(event);
256 VirtualControlLoopNotification notification = manager.activate(event);
258 assertNotNull(notification);
259 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
261 ControlLoopEventManager.NEW_EVENT_STATUS status = null;
263 status = manager.onNewEvent(event);
264 } catch (AaiException e) {
265 logger.warn(e.toString());
266 fail("A&AI Query Failed");
268 assertNotNull(status);
269 assertEquals(ControlLoopEventManager.NEW_EVENT_STATUS.FIRST_ONSET, status);
271 AaiGetVnfResponse response = manager.getVnfResponse();
272 assertNotNull(response);
273 assertNull(manager.getVserverResponse());
275 VirtualControlLoopEvent event2 = new VirtualControlLoopEvent();
276 event2.setClosedLoopControlName("TwoOnsetTest");
277 event2.setRequestId(requestId);
278 event2.setTarget("generic-vnf.vnf-id");
279 event2.setClosedLoopAlarmStart(Instant.now());
280 event2.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
281 event2.setAai(new HashMap<>());
282 event2.getAai().put("generic-vnf.vnf-name", "onsetTwo");
286 status = manager.onNewEvent(event2);
287 } catch (AaiException e) {
288 logger.warn(e.toString());
289 fail("A&AI Query Failed");
291 assertEquals(ControlLoopEventManager.NEW_EVENT_STATUS.SUBSEQUENT_ONSET, status);
292 AaiGetVnfResponse response2 = manager.getVnfResponse();
293 assertNotNull(response2);
294 // We should not have queried AAI, so the stored response should be the same
295 assertEquals(response, response2);
296 assertNull(manager.getVserverResponse());
300 * Simulate a response.
302 public static AaiGetVnfResponse getQueryByVnfId2(String urlGet, String username, String password, UUID requestId,
304 AaiGetVnfResponse response = new AaiGetVnfResponse();
306 response.setVnfId("83f674e8-7555-44d7-9a39-bdc3770b0491");
307 response.setVnfName("lll_vnf_010317");
308 response.setVnfType("Basa-122216-Service/VidVsamp12BaseVolume 1");
309 response.setServiceId("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
310 response.setOrchestrationStatus("Created");
311 response.setInMaint("false");
312 response.setIsClosedLoopDisabled("false");
313 response.setResourceVersion("1494001988835");
314 response.setModelInvariantId("f18be3cd-d446-456e-9109-121d9b62feaa");
316 final RelationshipList relationshipList = new RelationshipList();
317 final Relationship relationship = new Relationship();
318 RelationshipData relationshipData = new RelationshipData();
319 RelationshipDataItem relationshipDataItem = new RelationshipDataItem();
321 relationshipDataItem.setRelationshipKey("customer.global-customer-id");
322 relationshipDataItem.setRelationshipValue("MSO_1610_ST");
323 relationshipData.getRelationshipData().add(relationshipDataItem);
325 relationshipDataItem.setRelationshipKey("service-subscription.service-type");
326 relationshipDataItem.setRelationshipValue("MSO-dev-service-type");
327 relationshipData.getRelationshipData().add(relationshipDataItem);
329 relationshipDataItem.setRelationshipKey("service-instance.service-instance-id");
330 relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
331 relationshipData.getRelationshipData().add(relationshipDataItem);
333 RelatedToProperty relatedToProperty = new RelatedToProperty();
334 RelatedToPropertyItem item = new RelatedToPropertyItem();
335 item.setPropertyKey("service-instance.service-instance-name");
336 item.setPropertyValue("lll_svc_010317");
337 relatedToProperty.getRelatedTo().add(item);
339 relationship.setRelatedTo("service-instance");
340 relationship.setRelatedLink(
341 "/aai/v11/business/customers/customer/MSO_1610_ST/service-subscriptions/service-subscription"
342 + "/MSO-dev-service-type/service-instances/service-instance/"
343 + "e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
344 relationship.setRelationshipData(relationshipData);
345 relationship.setRelatedToProperty(relatedToProperty);
347 relationshipList.getRelationshipList().add(relationship);
348 response.setRelationshipList(relationshipList);
354 * Simulate a response.
356 public static AaiGetVnfResponse getQueryByVnfName2(String urlGet, String username, String password, UUID requestId,
358 AaiGetVnfResponse response = new AaiGetVnfResponse();
360 response.setVnfId("83f674e8-7555-44d7-9a39-bdc3770b0491");
361 response.setVnfName("lll_vnf_010317");
362 response.setVnfType("Basa-122216-Service/VidVsamp12BaseVolume 1");
363 response.setServiceId("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
364 response.setOrchestrationStatus("Created");
365 response.setInMaint("false");
366 response.setIsClosedLoopDisabled("false");
367 response.setResourceVersion("1494001988835");
368 response.setModelInvariantId("f18be3cd-d446-456e-9109-121d9b62feaa");
370 final RelationshipList relationshipList = new RelationshipList();
371 final Relationship relationship = new Relationship();
372 RelationshipData relationshipData = new RelationshipData();
373 RelationshipDataItem relationshipDataItem = new RelationshipDataItem();
375 relationshipDataItem.setRelationshipKey("customer.global-customer-id");
376 relationshipDataItem.setRelationshipValue("MSO_1610_ST");
377 relationshipData.getRelationshipData().add(relationshipDataItem);
379 relationshipDataItem.setRelationshipKey("service-subscription.service-type");
380 relationshipDataItem.setRelationshipValue("MSO-dev-service-type");
381 relationshipData.getRelationshipData().add(relationshipDataItem);
383 relationshipDataItem.setRelationshipKey("service-instance.service-instance-id");
384 relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
385 relationshipData.getRelationshipData().add(relationshipDataItem);
387 RelatedToProperty relatedToProperty = new RelatedToProperty();
388 RelatedToPropertyItem item = new RelatedToPropertyItem();
389 item.setPropertyKey("service-instance.service-instance-name");
390 item.setPropertyValue("lll_svc_010317");
391 relatedToProperty.getRelatedTo().add(item);
393 relationship.setRelatedTo("service-instance");
394 relationship.setRelatedLink(
395 "/aai/v11/business/customers/customer/MSO_1610_ST/service-subscriptions/service-subscription"
396 + "/MSO-dev-service-type/service-instances/service-instance/"
397 + "e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
398 relationship.setRelationshipData(relationshipData);
399 relationship.setRelatedToProperty(relatedToProperty);
401 relationshipList.getRelationshipList().add(relationship);
402 response.setRelationshipList(relationshipList);
408 * Simulate a response.
410 public static AaiGetVserverResponse getQueryByVserverName2(String urlGet, String username, String password,
411 UUID requestId, String key) {
412 AaiGetVserverResponse response = new AaiGetVserverResponse();
414 response.setVserverId("d0668d4f-c25e-4a1b-87c4-83845c01efd8");
415 response.setVserverName("USMSO1SX7NJ0103UJZZ01-vjunos0");
416 response.setVserverName2("vjunos0");
417 response.setVserverSelflink(
418 "https://aai-ext1.test.att.com:8443/aai/v7/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/tenants/tenant/USMSO1SX7NJ0103UJZZ01%3A%3AuCPE-VMS/vservers/vserver/d0668d4f-c25e-4a1b-87c4-83845c01efd8");
419 response.setInMaint("false");
420 response.setIsClosedLoopDisabled("false");
421 response.setResourceVersion("1494001931513");
423 final RelationshipList relationshipList = new RelationshipList();
424 final Relationship relationship = new Relationship();
425 RelationshipData relationshipData = new RelationshipData();
426 RelationshipDataItem relationshipDataItem = new RelationshipDataItem();
428 relationshipDataItem.setRelationshipKey("customer.global-customer-id");
429 relationshipDataItem.setRelationshipValue("MSO_1610_ST");
430 relationshipData.getRelationshipData().add(relationshipDataItem);
432 relationshipDataItem.setRelationshipKey("service-subscription.service-type");
433 relationshipDataItem.setRelationshipValue("MSO-dev-service-type");
434 relationshipData.getRelationshipData().add(relationshipDataItem);
436 relationshipDataItem.setRelationshipKey("service-instance.service-instance-id");
437 relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
438 relationshipData.getRelationshipData().add(relationshipDataItem);
440 RelatedToProperty relatedToProperty = new RelatedToProperty();
441 RelatedToPropertyItem item = new RelatedToPropertyItem();
442 item.setPropertyKey("service-instance.service-instance-name");
443 item.setPropertyValue("lll_svc_010317");
444 relatedToProperty.getRelatedTo().add(item);
446 relationship.setRelatedTo("service-instance");
447 relationship.setRelatedLink(
448 "/aai/v11/business/customers/customer/MSO_1610_ST/service-subscriptions/service-subscription"
449 + "/MSO-dev-service-type/service-instances/service-instance/"
450 + "e1e9c97c-02c0-4919-9b4c-eb5d5ef68970");
451 relationship.setRelationshipData(relationshipData);
452 relationship.setRelatedToProperty(relatedToProperty);
454 relationshipList.getRelationshipList().add(relationship);
455 response.setRelationshipList(relationshipList);
461 public void testMethods() {
462 UUID requestId = UUID.randomUUID();
463 ControlLoopEventManager clem = new ControlLoopEventManager("MyClosedLoopName", requestId);
465 assertEquals("MyClosedLoopName", clem.getClosedLoopControlName());
466 assertEquals(requestId, clem.getRequestID());
468 clem.setActivated(true);
469 assertEquals(true, clem.isActivated());
471 clem.setControlLoopResult("SUCCESS");
472 assertEquals("SUCCESS", clem.getControlLoopResult());
474 clem.setControlLoopTimedOut();
475 assertEquals(true, clem.isControlLoopTimedOut());
477 clem.setNumAbatements(12345);
478 assertEquals(Integer.valueOf(12345), clem.getNumAbatements());
480 clem.setNumOnsets(54321);
481 assertEquals(Integer.valueOf(54321), clem.getNumOnsets());
483 assertNull(clem.getOnsetEvent());
484 assertNull(clem.getAbatementEvent());
485 assertNull(clem.getProcessor());
487 assertEquals(true, clem.isActive());
488 assertEquals(false, clem.releaseLock());
489 assertEquals(true, clem.isControlLoopTimedOut());
491 assertNull(clem.unlockCurrentOperation());
495 public void testAlreadyActivated() {
496 UUID requestId = UUID.randomUUID();
497 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
498 event.setClosedLoopControlName("TwoOnsetTest");
499 event.setRequestId(requestId);
500 event.setTarget("generic-vnf.vnf-id");
501 event.setClosedLoopAlarmStart(Instant.now());
502 event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
503 event.setAai(new HashMap<>());
504 event.getAai().put("generic-vnf.vnf-name", "onsetOne");
506 ControlLoopEventManager manager = makeManager(event);
507 manager.setActivated(true);
508 VirtualControlLoopNotification notification = manager.activate(event);
509 assertEquals(ControlLoopNotificationType.REJECTED, notification.getNotification());
513 public void testActivationYaml() throws IOException {
514 InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
515 final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
517 InputStream isBad = new FileInputStream(new File("src/test/resources/notutf8.yaml"));
518 final String yamlStringBad = IOUtils.toString(isBad, StandardCharsets.UTF_8);
520 UUID requestId = UUID.randomUUID();
521 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
522 event.setClosedLoopControlName("TwoOnsetTest");
523 event.setRequestId(requestId);
524 event.setTarget("generic-vnf.vnf-id");
525 event.setClosedLoopAlarmStart(Instant.now());
526 event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
527 event.setAai(new HashMap<>());
528 event.getAai().put("generic-vnf.vnf-name", "onsetOne");
530 ControlLoopEventManager manager = makeManager(event);
532 // Null YAML should fail
533 VirtualControlLoopNotification notificationNull = manager.activate(null, event);
534 assertNotNull(notificationNull);
535 assertEquals(ControlLoopNotificationType.REJECTED, notificationNull.getNotification());
537 // Empty YAML should fail
538 VirtualControlLoopNotification notificationEmpty = manager.activate("", event);
539 assertNotNull(notificationEmpty);
540 assertEquals(ControlLoopNotificationType.REJECTED, notificationEmpty.getNotification());
542 // Bad YAML should fail
543 VirtualControlLoopNotification notificationBad = manager.activate(yamlStringBad, event);
544 assertNotNull(notificationBad);
545 assertEquals(ControlLoopNotificationType.REJECTED, notificationBad.getNotification());
547 VirtualControlLoopNotification notification = manager.activate(yamlString, event);
548 assertNotNull(notification);
549 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
551 // Another activate should fail
552 VirtualControlLoopNotification notificationActive = manager.activate(yamlString, event);
553 assertNotNull(notificationActive);
554 assertEquals(ControlLoopNotificationType.REJECTED, notificationActive.getNotification());
558 public void testControlLoopFinal() throws ControlLoopException, IOException {
559 InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
560 final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
562 UUID requestId = UUID.randomUUID();
563 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
564 event.setClosedLoopControlName("TwoOnsetTest");
565 event.setRequestId(requestId);
566 event.setTarget("generic-vnf.vnf-id");
567 event.setClosedLoopAlarmStart(Instant.now());
568 event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
569 event.setAai(new HashMap<>());
570 event.getAai().put("generic-vnf.vnf-name", "onsetOne");
572 ControlLoopEventManager manager = makeManager(event);
574 manager.isControlLoopFinal();
575 fail("test should throw an exception here");
576 } catch (ControlLoopException e) {
577 assertEquals("ControlLoopEventManager MUST be activated first.", e.getMessage());
580 manager.setActivated(true);
582 manager.isControlLoopFinal();
583 fail("test should throw an exception here");
584 } catch (ControlLoopException e) {
585 assertEquals("No onset event for ControlLoopEventManager.", e.getMessage());
588 manager.setActivated(false);
589 VirtualControlLoopNotification notification = manager.activate(yamlString, event);
590 assertNotNull(notification);
591 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
593 VirtualControlLoopNotification clfNotification = manager.isControlLoopFinal();
594 assertNull(clfNotification);
596 manager.getProcessor().nextPolicyForResult(PolicyResult.SUCCESS);
597 clfNotification = manager.isControlLoopFinal();
598 assertNotNull(clfNotification);
599 assertEquals(ControlLoopNotificationType.FINAL_SUCCESS, clfNotification.getNotification());
601 manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
602 notification = manager.activate(yamlString, event);
603 assertNotNull(notification);
604 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
606 manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE_EXCEPTION);
607 clfNotification = manager.isControlLoopFinal();
608 assertNotNull(clfNotification);
609 assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification());
611 manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
612 notification = manager.activate(yamlString, event);
613 assertNotNull(notification);
614 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
616 manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE_GUARD);
617 clfNotification = manager.isControlLoopFinal();
618 assertNotNull(clfNotification);
619 assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification());
621 manager.setControlLoopTimedOut();
622 clfNotification = manager.isControlLoopFinal();
623 assertNotNull(clfNotification);
624 assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification());
628 public void testProcessControlLoop() throws ControlLoopException, IOException, AaiException {
629 InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
630 final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
632 UUID requestId = UUID.randomUUID();
633 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
634 event.setClosedLoopControlName("TwoOnsetTest");
635 event.setRequestId(requestId);
636 event.setTarget("generic-vnf.vnf-id");
637 event.setClosedLoopAlarmStart(Instant.now());
638 event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
639 event.setAai(new HashMap<>());
640 event.getAai().put("generic-vnf.vnf-name", "onsetOne");
642 ControlLoopEventManager manager = makeManager(event);
644 manager.processControlLoop();
645 fail("test should throw an exception here");
646 } catch (Exception e) {
647 assertEquals("ControlLoopEventManager MUST be activated first.", e.getMessage());
650 manager.setActivated(true);
652 manager.processControlLoop();
653 fail("test should throw an exception here");
654 } catch (Exception e) {
655 assertEquals("No onset event for ControlLoopEventManager.", e.getMessage());
658 manager.setActivated(false);
659 VirtualControlLoopNotification notification = manager.activate(yamlString, event);
660 assertNotNull(notification);
661 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
663 ControlLoopOperationManager clom = manager.processControlLoop();
665 assertNull(clom.getOperationResult());
667 // Test operation in progress
669 manager.processControlLoop();
670 fail("test should throw an exception here");
671 } catch (Exception e) {
672 assertEquals("Already working an Operation, do not call this method.", e.getMessage());
675 manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
676 notification = manager.activate(yamlString, event);
677 assertNotNull(notification);
678 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
680 manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE_GUARD);
681 VirtualControlLoopNotification clfNotification = manager.isControlLoopFinal();
682 assertNotNull(clfNotification);
683 assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification());
685 // Test operation completed
687 manager.processControlLoop();
688 fail("test should throw an exception here");
689 } catch (Exception e) {
690 assertEquals("Control Loop is in FINAL state, do not call this method.", e.getMessage());
693 manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
694 notification = manager.activate(yamlString, event);
695 assertNotNull(notification);
696 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
697 manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE);
699 // Test operation with no next policy defined
701 manager.processControlLoop();
702 fail("test should throw an exception here");
703 } catch (Exception e) {
704 assertEquals("The target type is null", e.getMessage());
709 public void testFinishOperation() throws IOException, ControlLoopException, AaiException {
710 InputStream is = new FileInputStream(new File("src/test/resources/testSOactor.yaml"));
711 final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
713 InputStream isStd = new FileInputStream(new File("src/test/resources/test.yaml"));
714 final String yamlStringStd = IOUtils.toString(isStd, StandardCharsets.UTF_8);
716 UUID requestId = UUID.randomUUID();
717 VirtualControlLoopEvent event = new VirtualControlLoopEvent();
718 event.setClosedLoopControlName("TwoOnsetTest");
719 event.setRequestId(requestId);
720 event.setTarget("generic-vnf.vnf-id");
721 event.setClosedLoopAlarmStart(Instant.now());
722 event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
723 event.setAai(new HashMap<>());
724 event.getAai().put("generic-vnf.vnf-id", "onsetOne");
726 ControlLoopEventManager manager = makeManager(event);
728 manager.finishOperation(null);
729 fail("test should throw an exception here");
730 } catch (Exception e) {
731 assertEquals("No operation to finish.", e.getMessage());
734 manager.setActivated(true);
736 manager.finishOperation(null);
737 fail("test should throw an exception here");
738 } catch (Exception e) {
739 assertEquals("No operation to finish.", e.getMessage());
742 manager.setActivated(false);
743 VirtualControlLoopNotification notification = manager.activate(yamlString, event);
744 assertNotNull(notification);
745 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
748 manager.lockCurrentOperation();
749 fail("test should throw an exception here");
750 } catch (Exception e) {
751 assertEquals("Do not have a current operation.", e.getMessage());
754 assertNull(manager.unlockCurrentOperation());
756 ControlLoopOperationManager clom = manager.processControlLoop();
758 assertNull(clom.getOperationResult());
760 LockResult<GuardResult, TargetLock> lockLock = manager.lockCurrentOperation();
761 assertNotNull(lockLock);
762 assertEquals(GuardResult.LOCK_ACQUIRED, lockLock.getA());
764 LockResult<GuardResult, TargetLock> lockLockAgain = manager.lockCurrentOperation();
765 assertNotNull(lockLockAgain);
766 assertEquals(GuardResult.LOCK_ACQUIRED, lockLockAgain.getA());
767 assertEquals(lockLock.getB(), lockLockAgain.getB());
769 assertEquals(lockLock.getB(), manager.unlockCurrentOperation());
770 assertNull(manager.unlockCurrentOperation());
772 lockLock = manager.lockCurrentOperation();
773 assertNotNull(lockLock);
774 PolicyGuard.unlockTarget(lockLock.getB());
775 assertEquals(lockLock.getB(), manager.unlockCurrentOperation());
777 clom.startOperation(event);
779 // This call should be exception free
780 manager.finishOperation(clom);
782 ControlLoopEventManager otherManager = makeManager(event);
783 VirtualControlLoopNotification otherNotification = otherManager.activate(yamlStringStd, event);
784 assertNotNull(otherNotification);
785 assertEquals(ControlLoopNotificationType.ACTIVE, otherNotification.getNotification());
787 ControlLoopOperationManager otherClom = otherManager.processControlLoop();
788 assertNotNull(otherClom);
789 assertNull(otherClom.getOperationResult());
791 otherManager.finishOperation(clom);
795 public void testOnNewEvent() throws IOException, AaiException {
796 InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
797 final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
799 UUID requestId = UUID.randomUUID();
800 VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent();
801 onsetEvent.setClosedLoopControlName("TwoOnsetTest");
802 onsetEvent.setRequestId(requestId);
803 onsetEvent.setTarget("generic-vnf.vnf-id");
804 onsetEvent.setClosedLoopAlarmStart(Instant.now());
805 onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
806 onsetEvent.setAai(new HashMap<>());
807 onsetEvent.getAai().put("generic-vnf.vnf-name", "onsetOne");
809 VirtualControlLoopEvent abatedEvent = new VirtualControlLoopEvent();
810 abatedEvent.setClosedLoopControlName("TwoOnsetTest");
811 abatedEvent.setRequestId(requestId);
812 abatedEvent.setTarget("generic-vnf.vnf-id");
813 abatedEvent.setClosedLoopAlarmStart(Instant.now());
814 abatedEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ABATED);
815 abatedEvent.setAai(new HashMap<>());
816 abatedEvent.getAai().put("generic-vnf.vnf-name", "onsetOne");
818 ControlLoopEventManager manager = makeManager(onsetEvent);
819 VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent);
820 assertNotNull(notification);
821 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
823 assertEquals(NEW_EVENT_STATUS.FIRST_ONSET, manager.onNewEvent(onsetEvent));
824 assertEquals(NEW_EVENT_STATUS.FIRST_ABATEMENT, manager.onNewEvent(abatedEvent));
825 assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
827 VirtualControlLoopEvent checkSyntaxEvent = new VirtualControlLoopEvent();
828 checkSyntaxEvent.setAai(null);
829 checkSyntaxEvent.setClosedLoopAlarmEnd(null);
830 checkSyntaxEvent.setClosedLoopAlarmStart(null);
831 checkSyntaxEvent.setClosedLoopControlName(null);
832 checkSyntaxEvent.setClosedLoopEventClient(null);
833 checkSyntaxEvent.setClosedLoopEventStatus(null);
834 checkSyntaxEvent.setFrom(null);
835 checkSyntaxEvent.setPolicyName(null);
836 checkSyntaxEvent.setPolicyScope(null);
837 checkSyntaxEvent.setPolicyVersion(null);
838 checkSyntaxEvent.setRequestId(null);
839 checkSyntaxEvent.setTarget(null);
840 checkSyntaxEvent.setTargetType(null);
841 checkSyntaxEvent.setVersion(null);
843 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
845 checkSyntaxEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
846 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
848 checkSyntaxEvent.setClosedLoopControlName(null);
849 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
851 checkSyntaxEvent.setClosedLoopControlName("");
852 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
854 checkSyntaxEvent.setClosedLoopControlName("TwoOnsetTest");
855 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
857 checkSyntaxEvent.setRequestId(null);
858 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
860 checkSyntaxEvent.setRequestId(requestId);
861 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
863 checkSyntaxEvent.setAai(null);
864 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
866 checkSyntaxEvent.setAai(new HashMap<>());
867 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
869 checkSyntaxEvent.setTarget("");
870 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
872 checkSyntaxEvent.setTarget(null);
873 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
875 checkSyntaxEvent.setTarget("");
876 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
878 checkSyntaxEvent.setTarget("OZ");
879 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
881 checkSyntaxEvent.setTarget("VM_NAME");
882 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
884 checkSyntaxEvent.setTarget("VNF_NAME");
885 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
887 checkSyntaxEvent.setTarget("vserver.vserver-name");
888 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
890 checkSyntaxEvent.setTarget("generic-vnf.vnf-id");
891 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
893 checkSyntaxEvent.setTarget("generic-vnf.vnf-name");
894 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
896 checkSyntaxEvent.setAai(null);
897 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
899 checkSyntaxEvent.setAai(new HashMap<>());
900 assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
902 checkSyntaxEvent.getAai().put("generic-vnf.vnf-name", "onsetOne");
903 assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
905 checkSyntaxEvent.getAai().put("vserver.vserver-name", "onsetOne");
906 assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
908 checkSyntaxEvent.getAai().put("generic-vnf.vnf-id", "onsetOne");
909 assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
913 public void testControlLoopTimeout() throws IOException {
914 InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
915 final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
917 UUID requestId = UUID.randomUUID();
918 VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent();
919 onsetEvent.setClosedLoopControlName("TwoOnsetTest");
920 onsetEvent.setRequestId(requestId);
921 onsetEvent.setTarget("generic-vnf.vnf-id");
922 onsetEvent.setClosedLoopAlarmStart(Instant.now());
923 onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
924 onsetEvent.setAai(new HashMap<>());
925 onsetEvent.getAai().put("generic-vnf.vnf-name", "onsetOne");
927 ControlLoopEventManager manager = makeManager(onsetEvent);
928 assertTrue(0 == manager.getControlLoopTimeout(null));
929 assertTrue(120 == manager.getControlLoopTimeout(120));
931 VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent);
932 assertNotNull(notification);
933 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
935 assertTrue(60 == manager.getControlLoopTimeout(null));
939 public void testQueryAai() throws IOException, AaiException {
940 InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"));
941 final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
943 UUID requestId = UUID.randomUUID();
944 VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent();
945 onsetEvent.setClosedLoopControlName("TwoOnsetTest");
946 onsetEvent.setRequestId(requestId);
947 onsetEvent.setTarget("generic-vnf.vnf-id");
948 onsetEvent.setClosedLoopAlarmStart(Instant.now());
949 onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
950 onsetEvent.setAai(new HashMap<>());
951 onsetEvent.getAai().put("generic-vnf.vnf-name", "onsetOne");
953 ControlLoopEventManager manager = makeManager(onsetEvent);
954 manager.queryAai(onsetEvent);
956 VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent);
957 assertNotNull(notification);
958 assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
960 // repeat query with same manager
961 manager.queryAai(onsetEvent);
963 // remaining queries each use their own manager so they will be re-executed
965 makeManager(onsetEvent).queryAai(onsetEvent);
967 onsetEvent.getAai().put("generic-vnf.is-closed-loop-disabled", "true");
969 makeManager(onsetEvent).queryAai(onsetEvent);
970 fail("test should throw an exception here");
971 } catch (Exception e) {
972 assertEquals("is-closed-loop-disabled is set to true on VServer or VNF", e.getMessage());
974 onsetEvent.getAai().put("vserver.is-closed-loop-disabled", "true");
976 makeManager(onsetEvent).queryAai(onsetEvent);
977 fail("test should throw an exception here");
978 } catch (Exception e) {
979 assertEquals("is-closed-loop-disabled is set to true on VServer or VNF", e.getMessage());
981 onsetEvent.getAai().remove("generic-vnf.is-closed-loop-disabled");
983 makeManager(onsetEvent).queryAai(onsetEvent);
984 fail("test should throw an exception here");
985 } catch (Exception e) {
986 assertEquals("is-closed-loop-disabled is set to true on VServer or VNF", e.getMessage());
988 onsetEvent.getAai().remove("vserver.is-closed-loop-disabled");
989 makeManager(onsetEvent).queryAai(onsetEvent);
991 onsetEvent.getAai().put("generic-vnf.is-closed-loop-disabled", "false");
992 makeManager(onsetEvent).queryAai(onsetEvent);
994 onsetEvent.getAai().remove("generic-vnf.is-closed-loop-disabled");
995 onsetEvent.getAai().put("vserver.is-closed-loop-disabled", "false");
996 makeManager(onsetEvent).queryAai(onsetEvent);
998 onsetEvent.getAai().remove("generic-vnf.vnf-id");
999 onsetEvent.getAai().remove("generic-vnf.vnf-name");
1000 onsetEvent.getAai().remove("vserver.vserver-name");
1001 onsetEvent.getAai().remove("generic-vnf.is-closed-loop-disabled");
1002 onsetEvent.getAai().remove("vserver.is-closed-loop-disabled");
1003 makeManager(onsetEvent).queryAai(onsetEvent);
1005 onsetEvent.getAai().put("vserver.vserver-name", "AVserver");
1006 makeManager(onsetEvent).queryAai(onsetEvent);
1008 onsetEvent.getAai().put("generic-vnf.vnf-name", "AVNFName");
1009 makeManager(onsetEvent).queryAai(onsetEvent);
1011 onsetEvent.getAai().put("generic-vnf.vnf-id", "AVNFID");
1012 makeManager(onsetEvent).queryAai(onsetEvent);
1014 onsetEvent.getAai().remove("vserver.vserver-name");
1015 makeManager(onsetEvent).queryAai(onsetEvent);
1017 onsetEvent.getAai().remove("generic-vnf.vnf-name");
1018 makeManager(onsetEvent).queryAai(onsetEvent);
1021 PolicyEngine.manager.setEnvironmentProperty("aai.url", "http://localhost:9999");
1024 makeManager(onsetEvent).queryAai(onsetEvent);
1025 fail("test should throw an exception here");
1026 } catch (Exception e) {
1027 assertEquals("Exception from queryAai: org.onap.policy.aai.util.AaiException: AAI Response is null "
1028 + "(query by vnf-id)", e.getMessage());
1031 onsetEvent.getAai().remove("generic-vnf.vnf-id");
1032 onsetEvent.getAai().put("generic-vnf.vnf-name", "AVNFName");
1034 makeManager(onsetEvent).queryAai(onsetEvent);
1035 fail("test should throw an exception here");
1036 } catch (Exception e) {
1037 assertEquals("Exception from queryAai: org.onap.policy.aai.util.AaiException: AAI Response is null "
1038 + "(query by vnf-name)", e.getMessage());
1041 onsetEvent.getAai().remove("generic-vnf.vnf-name");
1042 onsetEvent.getAai().put("vserver.vserver-name", "AVserver");
1044 makeManager(onsetEvent).queryAai(onsetEvent);
1045 fail("test should throw an exception here");
1046 } catch (Exception e) {
1047 assertEquals("Exception from queryAai: org.onap.policy.aai.util.AaiException: AAI Response is null "
1048 + "(query by vserver-name)", e.getMessage());
1051 PolicyEngine.manager.setEnvironmentProperty("aai.url", "http://localhost:6666");
1054 private ControlLoopEventManager makeManager(VirtualControlLoopEvent event) {
1055 return new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());