summaryrefslogtreecommitdiffstats
path: root/models-interactions/model-actors/actor.a1p
diff options
context:
space:
mode:
authorjhh <jorge.hernandez-herrero@att.com>2022-11-04 11:50:17 -0500
committerjhh <jorge.hernandez-herrero@att.com>2022-11-04 11:50:17 -0500
commit8dece848c0775833013e2fa6ff801478fccb4a52 (patch)
tree6d74ce523936844ef8255beb18c269e83b549a25 /models-interactions/model-actors/actor.a1p
parentaf8eea569e5e91f09c454746c177885597ea2c32 (diff)
Create A1P actor to talk to A1 PMS.
This relates to the support for the SON use case. Issue-ID: POLICY-4444 Signed-off-by: jhh <jorge.hernandez-herrero@att.com> Change-Id: I2c67ec282c77d42b9e8a11cc70cb518976075a00
Diffstat (limited to 'models-interactions/model-actors/actor.a1p')
-rw-r--r--models-interactions/model-actors/actor.a1p/pom.xml93
-rw-r--r--models-interactions/model-actors/actor.a1p/src/main/java/org/onap/policy/controlloop/actor/a1p/A1pActor.java53
-rw-r--r--models-interactions/model-actors/actor.a1p/src/main/java/org/onap/policy/controlloop/actor/a1p/A1pOperation.java34
-rw-r--r--models-interactions/model-actors/actor.a1p/src/main/resources/META-INF/services/org.onap.policy.controlloop.actorserviceprovider.spi.Actor1
-rw-r--r--models-interactions/model-actors/actor.a1p/src/test/java/org/onap/policy/controlloop/actor/a1p/A1pActorTest.java61
-rw-r--r--models-interactions/model-actors/actor.a1p/src/test/java/org/onap/policy/controlloop/actor/a1p/A1pOperationTest.java111
-rw-r--r--models-interactions/model-actors/actor.a1p/src/test/java/org/onap/policy/controlloop/actor/a1p/BasicA1pOperation.java135
-rw-r--r--models-interactions/model-actors/actor.a1p/src/test/resources/service.yaml38
8 files changed, 526 insertions, 0 deletions
diff --git a/models-interactions/model-actors/actor.a1p/pom.xml b/models-interactions/model-actors/actor.a1p/pom.xml
new file mode 100644
index 000000000..be6942e03
--- /dev/null
+++ b/models-interactions/model-actors/actor.a1p/pom.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0"?>
+<!--
+ ============LICENSE_START=======================================================
+ Copyright (C) 2018 Wipro Limited Intellectual Property. All rights reserved.
+ Modifications Copyright (C) 2019-2020 Nordix Foundation.
+ Modifications Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ ================================================================================
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ ============LICENSE_END=========================================================
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onap.policy.models.policy-models-interactions.model-actors</groupId>
+ <artifactId>model-actors</artifactId>
+ <version>2.8.0-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>actor.a1p</artifactId>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.onap.policy.models.policy-models-interactions.model-actors</groupId>
+ <artifactId>actorServiceProvider</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
+ <artifactId>sdnr</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
+ <artifactId>events</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.policy.models.policy-models-interactions.model-actors</groupId>
+ <artifactId>actor.sdnr</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.google.code.gson</groupId>
+ <artifactId>gson</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.policy.models.policy-models-interactions</groupId>
+ <artifactId>simulators</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.policy.common</groupId>
+ <artifactId>policy-endpoints</artifactId>
+ <version>${policy.common.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.policy.models.policy-models-interactions.model-actors</groupId>
+ <artifactId>actor.test</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.powermock</groupId>
+ <artifactId>powermock-api-mockito2</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/models-interactions/model-actors/actor.a1p/src/main/java/org/onap/policy/controlloop/actor/a1p/A1pActor.java b/models-interactions/model-actors/actor.a1p/src/main/java/org/onap/policy/controlloop/actor/a1p/A1pActor.java
new file mode 100644
index 000000000..a39598a26
--- /dev/null
+++ b/models-interactions/model-actors/actor.a1p/src/main/java/org/onap/policy/controlloop/actor/a1p/A1pActor.java
@@ -0,0 +1,53 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP
+ * ================================================================================
+ * Copyright (C) 2022 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.controlloop.actor.a1p;
+
+import org.onap.policy.controlloop.actor.sdnr.SdnrOperation;
+import org.onap.policy.controlloop.actorserviceprovider.Operator;
+import org.onap.policy.controlloop.actorserviceprovider.impl.BidirectionalTopicActor;
+import org.onap.policy.controlloop.actorserviceprovider.impl.BidirectionalTopicOperator;
+import org.onap.policy.controlloop.actorserviceprovider.parameters.BidirectionalTopicActorParams;
+
+/**
+ * A1-PMS actor extends the SDN-R Actor and observes the same protocol but over
+ * different topics.
+ */
+public class A1pActor extends BidirectionalTopicActor<BidirectionalTopicActorParams> {
+ public static final String NAME = "A1P";
+
+ /**
+ * Constructor.
+ */
+ public A1pActor() {
+ super(NAME, BidirectionalTopicActorParams.class);
+
+ addOperator(new BidirectionalTopicOperator(NAME, SdnrOperation.NAME, this, SdnrOperation.SELECTOR_KEYS,
+ A1pOperation::new));
+ }
+
+ @Override
+ public Operator getOperator(String name) {
+ /*
+ * All operations are managed by the same operator, regardless of the name.
+ */
+ return super.getOperator(SdnrOperation.NAME);
+ }
+}
diff --git a/models-interactions/model-actors/actor.a1p/src/main/java/org/onap/policy/controlloop/actor/a1p/A1pOperation.java b/models-interactions/model-actors/actor.a1p/src/main/java/org/onap/policy/controlloop/actor/a1p/A1pOperation.java
new file mode 100644
index 000000000..c64a5344d
--- /dev/null
+++ b/models-interactions/model-actors/actor.a1p/src/main/java/org/onap/policy/controlloop/actor/a1p/A1pOperation.java
@@ -0,0 +1,34 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP
+ * ================================================================================
+ * Copyright (C) 2022 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.controlloop.actor.a1p;
+
+import org.onap.policy.controlloop.actor.sdnr.SdnrOperation;
+import org.onap.policy.controlloop.actorserviceprovider.parameters.BidirectionalTopicConfig;
+import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
+
+public class A1pOperation extends SdnrOperation {
+
+ public A1pOperation(ControlLoopOperationParams params,
+ BidirectionalTopicConfig config) {
+ super(params, config);
+ }
+
+}
diff --git a/models-interactions/model-actors/actor.a1p/src/main/resources/META-INF/services/org.onap.policy.controlloop.actorserviceprovider.spi.Actor b/models-interactions/model-actors/actor.a1p/src/main/resources/META-INF/services/org.onap.policy.controlloop.actorserviceprovider.spi.Actor
new file mode 100644
index 000000000..0be55a386
--- /dev/null
+++ b/models-interactions/model-actors/actor.a1p/src/main/resources/META-INF/services/org.onap.policy.controlloop.actorserviceprovider.spi.Actor
@@ -0,0 +1 @@
+org.onap.policy.controlloop.actor.a1p.A1pActor
diff --git a/models-interactions/model-actors/actor.a1p/src/test/java/org/onap/policy/controlloop/actor/a1p/A1pActorTest.java b/models-interactions/model-actors/actor.a1p/src/test/java/org/onap/policy/controlloop/actor/a1p/A1pActorTest.java
new file mode 100644
index 000000000..654c35878
--- /dev/null
+++ b/models-interactions/model-actors/actor.a1p/src/test/java/org/onap/policy/controlloop/actor/a1p/A1pActorTest.java
@@ -0,0 +1,61 @@
+/*-
+ * ONAP
+ * ================================================================================
+ * Copyright (C) 2022 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.controlloop.actor.a1p;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertSame;
+
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import org.junit.Test;
+import org.onap.policy.controlloop.actor.test.BasicActor;
+import org.onap.policy.controlloop.actorserviceprovider.Operator;
+
+public class A1pActorTest extends BasicActor {
+
+ @Test
+ public void testConstructor() {
+ A1pActor prov = new A1pActor();
+ assertEquals(0, prov.getSequenceNumber());
+
+ // verify that it has the operators we expect
+ var expected = Stream.of(A1pOperation.NAME).collect(Collectors.toList());
+ var actual = prov.getOperationNames().stream().sorted().collect(Collectors.toList());
+
+ assertEquals(expected.toString(), actual.toString());
+ }
+
+ @Test
+ public void testActorService() {
+ // verify that it all plugs into the ActorService
+ verifyActorService(A1pActor.NAME, "service.yaml");
+ }
+
+ @Test
+ public void testGetOperator() {
+ A1pActor sp = new A1pActor();
+
+ // should always return the same operator regardless of the name
+ Operator oper = sp.getOperator("unknown");
+ assertNotNull(oper);
+ assertSame(oper, sp.getOperator("another"));
+ }
+}
diff --git a/models-interactions/model-actors/actor.a1p/src/test/java/org/onap/policy/controlloop/actor/a1p/A1pOperationTest.java b/models-interactions/model-actors/actor.a1p/src/test/java/org/onap/policy/controlloop/actor/a1p/A1pOperationTest.java
new file mode 100644
index 000000000..cfd9f993b
--- /dev/null
+++ b/models-interactions/model-actors/actor.a1p/src/test/java/org/onap/policy/controlloop/actor/a1p/A1pOperationTest.java
@@ -0,0 +1,111 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP
+ * ================================================================================
+ * Copyright (C) 2022 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.controlloop.actor.a1p;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertSame;
+
+import java.util.List;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.onap.policy.controlloop.actor.test.BasicBidirectionalTopicOperation;
+import org.onap.policy.controlloop.actorserviceprovider.OperationProperties;
+import org.onap.policy.controlloop.actorserviceprovider.OperationResult;
+import org.onap.policy.sdnr.util.StatusCodeEnum;
+
+public class A1pOperationTest extends BasicA1pOperation {
+
+ private A1pOperation operation;
+
+ @BeforeClass
+ public static void setUpBeforeClass() throws Exception {
+ BasicBidirectionalTopicOperation.initBeforeClass(MY_SINK, MY_SOURCE);
+ }
+
+ @AfterClass
+ public static void tearDownAfterClass() {
+ destroyAfterClass();
+ }
+
+ /**
+ * Setup.
+ */
+ @Before
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+
+ operation = new A1pOperation(params, config);
+ operation.setProperty(OperationProperties.EVENT_PAYLOAD, "my payload");
+ }
+
+ @After
+ @Override
+ public void tearDown() {
+ super.tearDown();
+ }
+
+ @Test
+ public void testA1pOperation() {
+ assertEquals(DEFAULT_ACTOR, operation.getActorName());
+ assertEquals(DEFAULT_OPERATION, operation.getName());
+ }
+
+ @Test
+ public void testGetPropertyNames() {
+ assertThat(operation.getPropertyNames()).isEqualTo(List.of(OperationProperties.EVENT_PAYLOAD));
+ }
+
+ @Test
+ public void testSetOutcome() {
+ // with a status value
+ checkOutcome();
+ assertEquals(StatusCodeEnum.SUCCESS.toString(), outcome.getMessage());
+
+ // null status value
+ response.getBody().getOutput().getStatus().setValue(null);
+ checkOutcome();
+
+ // null status
+ response.getBody().getOutput().setStatus(null);
+ checkOutcome();
+
+ // null output
+ response.getBody().setOutput(null);
+ checkOutcome();
+
+ // null body
+ response.setBody(null);
+ checkOutcome();
+ }
+
+ protected void checkOutcome() {
+ assertSame(outcome, operation.setOutcome(outcome, OperationResult.SUCCESS, response));
+ assertEquals(OperationResult.SUCCESS, outcome.getResult());
+ assertNotNull(outcome.getMessage());
+ assertSame(response, outcome.getResponse());
+ }
+}
diff --git a/models-interactions/model-actors/actor.a1p/src/test/java/org/onap/policy/controlloop/actor/a1p/BasicA1pOperation.java b/models-interactions/model-actors/actor.a1p/src/test/java/org/onap/policy/controlloop/actor/a1p/BasicA1pOperation.java
new file mode 100644
index 000000000..410dab176
--- /dev/null
+++ b/models-interactions/model-actors/actor.a1p/src/test/java/org/onap/policy/controlloop/actor/a1p/BasicA1pOperation.java
@@ -0,0 +1,135 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP
+ * ================================================================================
+ * Copyright (C) 2022 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.controlloop.actor.a1p;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.verify;
+
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
+import java.util.function.BiConsumer;
+import org.onap.policy.common.endpoints.event.comm.TopicSink;
+import org.onap.policy.common.endpoints.event.comm.TopicSource;
+import org.onap.policy.common.utils.coder.StandardCoderObject;
+import org.onap.policy.controlloop.actor.test.BasicBidirectionalTopicOperation;
+import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
+import org.onap.policy.controlloop.actorserviceprovider.OperationResult;
+import org.onap.policy.controlloop.actorserviceprovider.Util;
+import org.onap.policy.sdnr.PciBody;
+import org.onap.policy.sdnr.PciMessage;
+import org.onap.policy.sdnr.PciResponse;
+import org.onap.policy.sdnr.Status;
+import org.onap.policy.sdnr.util.StatusCodeEnum;
+import org.onap.policy.simulators.SdnrTopicServer;
+import org.onap.policy.simulators.TopicServer;
+
+public abstract class BasicA1pOperation extends BasicBidirectionalTopicOperation<PciMessage> {
+
+ protected PciMessage response;
+
+ /**
+ * Constructs the object using a default actor and operation name.
+ */
+ public BasicA1pOperation() {
+ super();
+ }
+
+ /**
+ * Constructs the object.
+ *
+ * @param actor actor name
+ * @param operation operation name
+ */
+ public BasicA1pOperation(String actor, String operation) {
+ super(actor, operation);
+ }
+
+ /**
+ * Initializes mocks and sets up.
+ */
+ public void setUp() throws Exception {
+ super.setUpBasic();
+
+ response = new PciMessage();
+
+ PciBody body = new PciBody();
+ response.setBody(body);
+
+ PciResponse output = new PciResponse();
+ body.setOutput(output);
+
+ Status status = new Status();
+ output.setStatus(status);
+ status.setCode(100);
+ status.setValue(StatusCodeEnum.SUCCESS.toString());
+ }
+
+ public void tearDown() {
+ super.tearDownBasic();
+ }
+
+ @Override
+ protected TopicServer<PciMessage> makeServer(TopicSink sink, TopicSource source) {
+ return new SdnrTopicServer(sink, source);
+ }
+
+ /**
+ * Runs the operation and verifies that the response is successful.
+ *
+ * @param operation operation to run
+ */
+ protected void verifyOperation(A1pOperation operation)
+ throws InterruptedException, ExecutionException {
+
+ CompletableFuture<OperationOutcome> future2 = operation.start();
+ executor.runAll(100);
+ assertFalse(future2.isDone());
+
+ verify(forwarder).register(any(), listenerCaptor.capture());
+ provideResponse(listenerCaptor.getValue(), StatusCodeEnum.SUCCESS.toString());
+
+ executor.runAll(100);
+ assertTrue(future2.isDone());
+
+ outcome = future2.get();
+ assertEquals(OperationResult.SUCCESS, outcome.getResult());
+ }
+
+ /**
+ * Provides a response to the listener.
+ *
+ * @param listener listener to which to provide the response
+ * @param code response code
+ * @param description response description
+ */
+ protected void provideResponse(BiConsumer<String, StandardCoderObject> listener, int code, String description) {
+ PciResponse response = new PciResponse();
+
+ Status status = new Status();
+ response.setStatus(status);
+ status.setCode(code);
+
+ provideResponse(listener, Util.translate("", response, String.class));
+ }
+}
diff --git a/models-interactions/model-actors/actor.a1p/src/test/resources/service.yaml b/models-interactions/model-actors/actor.a1p/src/test/resources/service.yaml
new file mode 100644
index 000000000..88e775ec1
--- /dev/null
+++ b/models-interactions/model-actors/actor.a1p/src/test/resources/service.yaml
@@ -0,0 +1,38 @@
+#
+# ============LICENSE_START======================================================
+# ONAP
+# ===============================================================================
+# Copyright (C) 2022 AT&T Intellectual Property. All rights reserved.
+# ===============================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END========================================================
+#
+topics:
+ topicSources:
+ - topicCommInfrastructure: NOOP
+ topic: my-source
+ servers:
+ - localhost
+ managed: true
+ topicSinks:
+ - topicCommInfrastructure: NOOP
+ topic: my-sink
+ servers:
+ - localhost
+ managed: true
+actors:
+ A1P:
+ sinkTopic: my-sink
+ sourceTopic: my-source
+ operations:
+ any: {}