summaryrefslogtreecommitdiffstats
path: root/models-interactions
diff options
context:
space:
mode:
Diffstat (limited to 'models-interactions')
-rw-r--r--models-interactions/model-actors/actor.appc/src/main/java/org/onap/policy/controlloop/actor/appc/AppcOperation.java4
-rw-r--r--models-interactions/model-actors/actor.appc/src/test/java/org/onap/policy/controlloop/actor/appc/AppcOperationTest.java5
-rw-r--r--models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/ControlLoopTargetTypeTest.java10
-rw-r--r--models-interactions/model-simulators/pom.xml137
-rw-r--r--models-interactions/model-simulators/src/main/java/org/onap/policy/simulators/AppcLcmTopicServer.java42
-rw-r--r--models-interactions/model-simulators/src/main/java/org/onap/policy/simulators/AppcLegacyTopicServer.java42
-rw-r--r--models-interactions/model-simulators/src/main/java/org/onap/policy/simulators/TopicServer.java72
-rw-r--r--models-interactions/model-simulators/src/main/resources/org/onap/policy/simulators/appc/appc.legacy.success.json17
-rw-r--r--models-interactions/model-simulators/src/main/resources/org/onap/policy/simulators/appclcm/appc.lcm.success.json22
-rw-r--r--models-interactions/model-simulators/src/test/java/org/onap/policy/simulators/AppcLcmTopicServerTest.java69
-rw-r--r--models-interactions/model-simulators/src/test/java/org/onap/policy/simulators/AppcLegacyTopicServerTest.java69
-rw-r--r--models-interactions/model-simulators/src/test/java/org/onap/policy/simulators/TopicServerTest.java104
-rw-r--r--models-interactions/model-simulators/src/test/resources/org/onap/policy/simulators/appc/appc.legacy.request.json10
-rw-r--r--models-interactions/model-simulators/src/test/resources/org/onap/policy/simulators/appclcm/appc.lcm.request.json17
14 files changed, 551 insertions, 69 deletions
diff --git a/models-interactions/model-actors/actor.appc/src/main/java/org/onap/policy/controlloop/actor/appc/AppcOperation.java b/models-interactions/model-actors/actor.appc/src/main/java/org/onap/policy/controlloop/actor/appc/AppcOperation.java
index 5e84871cc..3ed23957a 100644
--- a/models-interactions/model-actors/actor.appc/src/main/java/org/onap/policy/controlloop/actor/appc/AppcOperation.java
+++ b/models-interactions/model-actors/actor.appc/src/main/java/org/onap/policy/controlloop/actor/appc/AppcOperation.java
@@ -145,7 +145,9 @@ public abstract class AppcOperation extends BidirectionalTopicOperation<Request,
@Override
protected Status detmStatus(String rawResponse, Response response) {
if (response.getStatus() == null) {
- throw new IllegalArgumentException("APP-C response is missing the response status");
+ // no status - this must be a request, not a response - just ignore it
+ logger.info("{}: ignoring request message for {}", getFullName(), params.getRequestId());
+ return Status.STILL_WAITING;
}
ResponseCode code = ResponseCode.toResponseCode(response.getStatus().getCode());
diff --git a/models-interactions/model-actors/actor.appc/src/test/java/org/onap/policy/controlloop/actor/appc/AppcOperationTest.java b/models-interactions/model-actors/actor.appc/src/test/java/org/onap/policy/controlloop/actor/appc/AppcOperationTest.java
index 204d95aa1..30450d02a 100644
--- a/models-interactions/model-actors/actor.appc/src/test/java/org/onap/policy/controlloop/actor/appc/AppcOperationTest.java
+++ b/models-interactions/model-actors/actor.appc/src/test/java/org/onap/policy/controlloop/actor/appc/AppcOperationTest.java
@@ -177,10 +177,9 @@ public class AppcOperationTest extends BasicAppcOperation {
public void testDetmStatusStringResponse() {
final ResponseStatus status = response.getStatus();
- // null status
+ // null status (i.e., it's a Request, not a Response)
response.setStatus(null);
- assertThatIllegalArgumentException().isThrownBy(() -> oper.detmStatus("", response))
- .withMessage("APP-C response is missing the response status");
+ assertEquals(Status.STILL_WAITING, oper.detmStatus("", response));
response.setStatus(status);
// invalid code
diff --git a/models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/ControlLoopTargetTypeTest.java b/models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/ControlLoopTargetTypeTest.java
index ac700c866..dcb5d1772 100644
--- a/models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/ControlLoopTargetTypeTest.java
+++ b/models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/ControlLoopTargetTypeTest.java
@@ -29,10 +29,10 @@ public class ControlLoopTargetTypeTest {
@Test
public void test() {
- assertEquals("VM", ControlLoopTargetType.VM);
- assertEquals("VF", ControlLoopTargetType.VF);
- assertEquals("VFC", ControlLoopTargetType.VFC);
- assertEquals("VNF", ControlLoopTargetType.VNF);
- assertEquals("PNF", ControlLoopTargetType.PNF);
+ assertEquals(ControlLoopTargetType.VM, "VM");
+ assertEquals(ControlLoopTargetType.VF, "VF");
+ assertEquals(ControlLoopTargetType.VFC, "VFC");
+ assertEquals(ControlLoopTargetType.VNF, "VNF");
+ assertEquals(ControlLoopTargetType.PNF, "PNF");
}
}
diff --git a/models-interactions/model-simulators/pom.xml b/models-interactions/model-simulators/pom.xml
index fc9fe12f3..d74aa05ad 100644
--- a/models-interactions/model-simulators/pom.xml
+++ b/models-interactions/model-simulators/pom.xml
@@ -1,6 +1,6 @@
<!--
============LICENSE_START=======================================================
- simulators
+ ONAP
================================================================================
Copyright (C) 2017-2020 AT&T Intellectual Property. All rights reserved.
Modifications Copyright (C) 2019 Nordix Foundation.
@@ -8,9 +8,9 @@
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.
@@ -19,64 +19,81 @@
============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>
+<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</groupId>
- <artifactId>policy-models-interactions</artifactId>
- <version>2.2.1-SNAPSHOT</version>
- </parent>
+ <parent>
+ <groupId>org.onap.policy.models</groupId>
+ <artifactId>policy-models-interactions</artifactId>
+ <version>2.2.1-SNAPSHOT</version>
+ </parent>
- <groupId>org.onap.policy.models.policy-models-interactions</groupId>
- <artifactId>simulators</artifactId>
+ <groupId>org.onap.policy.models.policy-models-interactions</groupId>
+ <artifactId>simulators</artifactId>
- <dependencies>
- <dependency>
- <groupId>org.onap.policy.common</groupId>
- <artifactId>policy-endpoints</artifactId>
- <version>${policy.common.version}</version>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
- <artifactId>aai</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
- <artifactId>so</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
- <artifactId>vfc</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>com.google.code.gson</groupId>
- <artifactId>gson</artifactId>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
- <artifactId>sdnc</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onap.policy.models</groupId>
- <artifactId>policy-models-decisions</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onap.policy.models.sim</groupId>
- <artifactId>policy-models-sim-dmaap</artifactId>
- <version>${project.version}</version>
- </dependency>
- </dependencies>
+ <dependencies>
+ <dependency>
+ <groupId>org.onap.policy.common</groupId>
+ <artifactId>policy-endpoints</artifactId>
+ <version>${policy.common.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
+ <artifactId>aai</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
+ <artifactId>appc</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
+ <artifactId>appclcm</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
+ <artifactId>so</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
+ <artifactId>vfc</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.google.code.gson</groupId>
+ <artifactId>gson</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
+ <artifactId>sdnc</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.policy.models</groupId>
+ <artifactId>policy-models-decisions</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.policy.models.sim</groupId>
+ <artifactId>policy-models-sim-dmaap</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.powermock</groupId>
+ <artifactId>powermock-api-mockito2</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
</project>
diff --git a/models-interactions/model-simulators/src/main/java/org/onap/policy/simulators/AppcLcmTopicServer.java b/models-interactions/model-simulators/src/main/java/org/onap/policy/simulators/AppcLcmTopicServer.java
new file mode 100644
index 000000000..df4cbb31e
--- /dev/null
+++ b/models-interactions/model-simulators/src/main/java/org/onap/policy/simulators/AppcLcmTopicServer.java
@@ -0,0 +1,42 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.onap.policy.simulators;
+
+import org.onap.policy.appclcm.AppcLcmDmaapWrapper;
+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.StandardCoder;
+import org.onap.policy.common.utils.resources.ResourceUtils;
+
+/**
+ * APPC-LCM topic server.
+ */
+public class AppcLcmTopicServer extends TopicServer<AppcLcmDmaapWrapper> {
+ public AppcLcmTopicServer(TopicSink sink, TopicSource source) {
+ super(sink, source, new StandardCoder(), AppcLcmDmaapWrapper.class);
+ }
+
+ @Override
+ protected String process(AppcLcmDmaapWrapper request) {
+ String response = ResourceUtils.getResourceAsString("org/onap/policy/simulators/appclcm/appc.lcm.success.json");
+ return response.replace("${replaceMe}", request.getBody().getInput().getCommonHeader().getSubRequestId());
+ }
+}
diff --git a/models-interactions/model-simulators/src/main/java/org/onap/policy/simulators/AppcLegacyTopicServer.java b/models-interactions/model-simulators/src/main/java/org/onap/policy/simulators/AppcLegacyTopicServer.java
new file mode 100644
index 000000000..5ebd3bd2a
--- /dev/null
+++ b/models-interactions/model-simulators/src/main/java/org/onap/policy/simulators/AppcLegacyTopicServer.java
@@ -0,0 +1,42 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.onap.policy.simulators;
+
+import org.onap.policy.appc.Request;
+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.StandardCoderInstantAsMillis;
+import org.onap.policy.common.utils.resources.ResourceUtils;
+
+/**
+ * Legacy APPC topic server.
+ */
+public class AppcLegacyTopicServer extends TopicServer<Request> {
+ public AppcLegacyTopicServer(TopicSink sink, TopicSource source) {
+ super(sink, source, new StandardCoderInstantAsMillis(), Request.class);
+ }
+
+ @Override
+ protected String process(Request request) {
+ String response = ResourceUtils.getResourceAsString("org/onap/policy/simulators/appc/appc.legacy.success.json");
+ return response.replace("${replaceMe}", request.getCommonHeader().getSubRequestId());
+ }
+}
diff --git a/models-interactions/model-simulators/src/main/java/org/onap/policy/simulators/TopicServer.java b/models-interactions/model-simulators/src/main/java/org/onap/policy/simulators/TopicServer.java
new file mode 100644
index 000000000..0abe5f421
--- /dev/null
+++ b/models-interactions/model-simulators/src/main/java/org/onap/policy/simulators/TopicServer.java
@@ -0,0 +1,72 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.onap.policy.simulators;
+
+import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
+import org.onap.policy.common.endpoints.event.comm.TopicListener;
+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.Coder;
+import org.onap.policy.common.utils.coder.CoderException;
+
+/**
+ * Server whose requests are received from a topic, and whose responses are sent to a
+ * topic.
+ */
+public abstract class TopicServer<Q> implements TopicListener {
+ private final TopicSink sink;
+ private final TopicSource source;
+ private final Coder coder;
+ private final Class<Q> reqClass;
+
+ /**
+ * Constructs the object.
+ *
+ * @param sink sink to which responses should be published
+ * @param source source from which requests arrive
+ */
+ public TopicServer(TopicSink sink, TopicSource source, Coder coder, Class<Q> reqClass) {
+ this.sink = sink;
+ this.source = source;
+ this.coder = coder;
+ this.reqClass = reqClass;
+
+ source.register(this);
+ }
+
+ public void shutdown() {
+ source.unregister(this);
+ }
+
+ @Override
+ public void onTopicEvent(CommInfrastructure commType, String topic, String request) {
+ Q req;
+ try {
+ req = coder.decode(request, reqClass);
+ } catch (CoderException e) {
+ throw new IllegalArgumentException("cannot decode request from " + source.getTopic());
+ }
+
+ sink.send(process(req));
+ }
+
+ protected abstract String process(Q request);
+}
diff --git a/models-interactions/model-simulators/src/main/resources/org/onap/policy/simulators/appc/appc.legacy.success.json b/models-interactions/model-simulators/src/main/resources/org/onap/policy/simulators/appc/appc.legacy.success.json
new file mode 100644
index 000000000..eb19c6832
--- /dev/null
+++ b/models-interactions/model-simulators/src/main/resources/org/onap/policy/simulators/appc/appc.legacy.success.json
@@ -0,0 +1,17 @@
+{
+ "CommonHeader": {
+ "TimeStamp": 1506051879001,
+ "APIver": "1.01",
+ "RequestID": "c7c6a4aa-bb61-4a15-b831-ba1472dd4a65",
+ "SubRequestID": "${replaceMe}",
+ "RequestTrack": [],
+ "Flags": []
+ },
+ "Status": {
+ "Code": 400,
+ "Value": "SUCCESS"
+ },
+ "Payload": {
+ "generic-vnf.vnf-id": "jimmy-test-vnf2"
+ }
+}
diff --git a/models-interactions/model-simulators/src/main/resources/org/onap/policy/simulators/appclcm/appc.lcm.success.json b/models-interactions/model-simulators/src/main/resources/org/onap/policy/simulators/appclcm/appc.lcm.success.json
new file mode 100644
index 000000000..331021798
--- /dev/null
+++ b/models-interactions/model-simulators/src/main/resources/org/onap/policy/simulators/appclcm/appc.lcm.success.json
@@ -0,0 +1,22 @@
+{
+ "body": {
+ "output": {
+ "common-header": {
+ "timestamp": "2017-08-25T21:06:23.037Z",
+ "api-ver": "5.00",
+ "originator-id": "664be3d2-6c12-4f4b-a3e7-c349acced200",
+ "request-id": "664be3d2-6c12-4f4b-a3e7-c349acced200",
+ "sub-request-id": "${replaceMe}",
+ "flags": {}
+ },
+ "status": {
+ "code": 400,
+ "message": "Restart Successful"
+ }
+ }
+ },
+ "version": "2.0",
+ "rpc-name": "restart",
+ "correlation-id": "664be3d2-6c12-4f4b-a3e7-c349acced200-1",
+ "type": "response"
+}
diff --git a/models-interactions/model-simulators/src/test/java/org/onap/policy/simulators/AppcLcmTopicServerTest.java b/models-interactions/model-simulators/src/test/java/org/onap/policy/simulators/AppcLcmTopicServerTest.java
new file mode 100644
index 000000000..bc803154f
--- /dev/null
+++ b/models-interactions/model-simulators/src/test/java/org/onap/policy/simulators/AppcLcmTopicServerTest.java
@@ -0,0 +1,69 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.onap.policy.simulators;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.Assert.assertNotNull;
+import static org.mockito.Mockito.verify;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
+import org.onap.policy.common.endpoints.event.comm.TopicSink;
+import org.onap.policy.common.endpoints.event.comm.TopicSource;
+import org.onap.policy.common.utils.resources.ResourceUtils;
+
+public class AppcLcmTopicServerTest {
+ private static final String MY_TOPIC = "my-topic";
+
+ @Mock
+ private TopicSink sink;
+ @Mock
+ private TopicSource source;
+
+ private AppcLcmTopicServer server;
+
+ /**
+ * Sets up.
+ */
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+
+ server = new AppcLcmTopicServer(sink, source);
+ }
+
+ @Test
+ public void testProcessAppcLcmDmaapWrapper() {
+ String request = ResourceUtils.getResourceAsString("org/onap/policy/simulators/appclcm/appc.lcm.request.json");
+ assertNotNull(request);
+
+ server.onTopicEvent(CommInfrastructure.NOOP, MY_TOPIC, request);
+
+ ArgumentCaptor<String> respCaptor = ArgumentCaptor.forClass(String.class);
+ verify(sink).send(respCaptor.capture());
+
+ assertThat(respCaptor.getValue()).contains("111be3d2").doesNotContain("replaceMe");
+ }
+}
diff --git a/models-interactions/model-simulators/src/test/java/org/onap/policy/simulators/AppcLegacyTopicServerTest.java b/models-interactions/model-simulators/src/test/java/org/onap/policy/simulators/AppcLegacyTopicServerTest.java
new file mode 100644
index 000000000..57d574a0b
--- /dev/null
+++ b/models-interactions/model-simulators/src/test/java/org/onap/policy/simulators/AppcLegacyTopicServerTest.java
@@ -0,0 +1,69 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.onap.policy.simulators;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.Assert.assertNotNull;
+import static org.mockito.Mockito.verify;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
+import org.onap.policy.common.endpoints.event.comm.TopicSink;
+import org.onap.policy.common.endpoints.event.comm.TopicSource;
+import org.onap.policy.common.utils.resources.ResourceUtils;
+
+public class AppcLegacyTopicServerTest {
+ private static final String MY_TOPIC = "my-topic";
+
+ @Mock
+ private TopicSink sink;
+ @Mock
+ private TopicSource source;
+
+ private AppcLegacyTopicServer server;
+
+ /**
+ * Sets up.
+ */
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+
+ server = new AppcLegacyTopicServer(sink, source);
+ }
+
+ @Test
+ public void testProcessAppcLcmDmaapWrapper() {
+ String request = ResourceUtils.getResourceAsString("org/onap/policy/simulators/appc/appc.legacy.request.json");
+ assertNotNull(request);
+
+ server.onTopicEvent(CommInfrastructure.NOOP, MY_TOPIC, request);
+
+ ArgumentCaptor<String> respCaptor = ArgumentCaptor.forClass(String.class);
+ verify(sink).send(respCaptor.capture());
+
+ assertThat(respCaptor.getValue()).contains("111be3d2").doesNotContain("replaceMe");
+ }
+}
diff --git a/models-interactions/model-simulators/src/test/java/org/onap/policy/simulators/TopicServerTest.java b/models-interactions/model-simulators/src/test/java/org/onap/policy/simulators/TopicServerTest.java
new file mode 100644
index 000000000..6e176423e
--- /dev/null
+++ b/models-interactions/model-simulators/src/test/java/org/onap/policy/simulators/TopicServerTest.java
@@ -0,0 +1,104 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.onap.policy.simulators;
+
+import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
+import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
+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.StandardCoder;
+
+public class TopicServerTest {
+ private static final String MY_TOPIC = "my-topic";
+ private static final String TEXT = "hello";
+ private static final String RESPONSE = "world";
+
+ @Mock
+ private TopicSink sink;
+ @Mock
+ private TopicSource source;
+
+ private MyServer server;
+
+ /**
+ * Sets up.
+ */
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+
+ server = new MyServer();
+ }
+
+ @Test
+ public void testConstructor() {
+ verify(source).register(server);
+ }
+
+ @Test
+ public void testShutdown() {
+ server.shutdown();
+ verify(source).unregister(server);
+ }
+
+ @Test
+ public void testOnTopicEvent() {
+ server.onTopicEvent(CommInfrastructure.NOOP, MY_TOPIC, "{\"text\": \"hello\"}");
+ verify(sink).send(RESPONSE);
+ }
+
+ /**
+ * Tests onTopicEvent() when the coder throws an exception.
+ */
+ @Test
+ public void testOnTopicEventException() {
+ assertThatIllegalArgumentException()
+ .isThrownBy(() -> server.onTopicEvent(CommInfrastructure.NOOP, MY_TOPIC, "{invalid json"));
+
+ verify(sink, never()).send(any());
+ }
+
+
+ private class MyRequest {
+ private String text;
+ }
+
+ private class MyServer extends TopicServer<MyRequest> {
+ public MyServer() {
+ super(sink, source, new StandardCoder(), MyRequest.class);
+ }
+
+ @Override
+ protected String process(MyRequest request) {
+ assertEquals(TEXT, request.text);
+ return RESPONSE;
+ }
+ }
+}
diff --git a/models-interactions/model-simulators/src/test/resources/org/onap/policy/simulators/appc/appc.legacy.request.json b/models-interactions/model-simulators/src/test/resources/org/onap/policy/simulators/appc/appc.legacy.request.json
new file mode 100644
index 000000000..8b3b73a88
--- /dev/null
+++ b/models-interactions/model-simulators/src/test/resources/org/onap/policy/simulators/appc/appc.legacy.request.json
@@ -0,0 +1,10 @@
+{
+ "CommonHeader": {
+ "TimeStamp": 1506051879001,
+ "APIver": "1.01",
+ "RequestID": "c7c6a4aa-bb61-4a15-b831-ba1472dd4a65",
+ "SubRequestID": "111be3d2-6c12-4f4b-a3e7-c349acced200",
+ "RequestTrack": [],
+ "Flags": []
+ }
+}
diff --git a/models-interactions/model-simulators/src/test/resources/org/onap/policy/simulators/appclcm/appc.lcm.request.json b/models-interactions/model-simulators/src/test/resources/org/onap/policy/simulators/appclcm/appc.lcm.request.json
new file mode 100644
index 000000000..cf2ebd521
--- /dev/null
+++ b/models-interactions/model-simulators/src/test/resources/org/onap/policy/simulators/appclcm/appc.lcm.request.json
@@ -0,0 +1,17 @@
+{
+ "body": {
+ "input": {
+ "common-header": {
+ "timestamp": "2017-08-25T21:06:23.037Z",
+ "api-ver": "5.00",
+ "originator-id": "664be3d2-6c12-4f4b-a3e7-c349acced200",
+ "request-id": "664be3d2-6c12-4f4b-a3e7-c349acced200",
+ "sub-request-id": "111be3d2-6c12-4f4b-a3e7-c349acced200",
+ "flags": {}
+ }
+ }
+ },
+ "version": "2.0",
+ "rpc-name": "restart",
+ "type": "request"
+}