2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2019, 2022 AT&T Intellectual Property. All rights reserved.
4 * Modifications Copyright (C) 2022 Bell Canada. All rights reserved.
5 * Modifications Copyright (C) 2023-2024 Nordix Foundation.
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.simulators;
23 import static org.assertj.core.api.Assertions.assertThat;
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertNotNull;
28 import java.nio.file.Files;
29 import java.util.HashMap;
30 import java.util.concurrent.BlockingQueue;
31 import java.util.concurrent.LinkedBlockingQueue;
32 import java.util.concurrent.TimeUnit;
33 import org.junit.After;
34 import org.junit.AfterClass;
35 import org.junit.Before;
36 import org.junit.BeforeClass;
37 import org.junit.Test;
38 import org.onap.policy.common.endpoints.event.comm.TopicEndpointManager;
39 import org.onap.policy.common.endpoints.event.comm.bus.DmaapTopicSink;
40 import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance;
41 import org.onap.policy.common.endpoints.http.server.internal.JettyJerseyServer;
42 import org.onap.policy.common.endpoints.parameters.TopicParameterGroup;
43 import org.onap.policy.common.utils.coder.StandardCoder;
45 public class DmaapSimulatorTest {
46 private static final int MAX_WAIT_SEC = 10;
47 private static final String TOPIC = "my-topic";
48 private static final String AUTH_TOPIC = "my-auth-topic";
49 private static final String AUTH_PORT = "3903";
51 private static final HashMap<String, String> savedValuesMap = new HashMap<>();
54 * Messages from the topic are placed here by the endpoint.
56 private BlockingQueue<String> queue;
59 public static void setUpBeforeClass() throws Exception {
60 TopicEndpointManager.getManager().shutdown();
64 * Starts the simulator and the topic.
66 * @throws Exception if an error occurs
69 public void setUp() throws Exception {
70 assertNotNull(Util.buildDmaapSim());
71 setSystemProperties();
72 assertNotNull(Util.buildDmaapSim("org/onap/policy/simulators/dmaap/AuthDmaapParameters.json"));
74 String topicJson = Files.readString(
75 new File("src/test/resources/org/onap/policy/simulators/dmaap/TopicParameters.json").toPath());
77 .replace("${port}", String.valueOf(Util.DMAAPSIM_SERVER_PORT))
78 .replace("${authPort}", AUTH_PORT);
80 TopicParameterGroup topicConfig = new StandardCoder().decode(topicJson, TopicParameterGroup.class);
82 TopicEndpointManager.getManager().addTopics(topicConfig);
83 TopicEndpointManager.getManager().start();
85 queue = new LinkedBlockingQueue<>();
89 public static void tearDownAfterClass() {
90 clearSystemProperties();
94 public void tearDown() {
95 TopicEndpointManager.getManager().shutdown();
96 HttpServletServerFactoryInstance.getServerFactory().destroy();
100 public void test() throws InterruptedException {
101 // test basic DMaaP simulator (default port, http, no auth)
103 // test custom DMaaP simulator (custom port, https, basic auth)
104 sendAndPoll(AUTH_TOPIC);
108 * Sets up keystore and truststore for https test server.
110 private static void setSystemProperties() {
111 String keyStoreSystemProperty = System.getProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME);
112 if (keyStoreSystemProperty != null) {
113 savedValuesMap.put(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME, keyStoreSystemProperty);
116 String keyStorePasswordSystemProperty =
117 System.getProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME);
118 if (keyStorePasswordSystemProperty != null) {
119 savedValuesMap.put(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME,
120 keyStorePasswordSystemProperty);
123 String trustStoreSystemProperty = System.getProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME);
124 if (trustStoreSystemProperty != null) {
125 savedValuesMap.put(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME, trustStoreSystemProperty);
128 String trustStorePasswordSystemProperty =
129 System.getProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME);
130 if (trustStorePasswordSystemProperty != null) {
131 savedValuesMap.put(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME,
132 trustStorePasswordSystemProperty);
135 System.setProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME, "src/test/resources/keystore-test");
136 System.setProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME, "kstest");
138 System.setProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME, "src/test/resources/keystore-test");
139 System.setProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME, "kstest");
143 * Clears the keystore/truststore properties.
145 private static void clearSystemProperties() {
146 if (savedValuesMap.containsKey(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME)) {
147 System.setProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME,
148 savedValuesMap.get(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME));
149 savedValuesMap.remove(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME);
151 System.clearProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME);
154 if (savedValuesMap.containsKey(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME)) {
155 System.setProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME,
156 savedValuesMap.get(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME));
157 savedValuesMap.remove(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME);
159 System.clearProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME);
162 if (savedValuesMap.containsKey(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME)) {
163 System.setProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME,
164 savedValuesMap.get(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME));
165 savedValuesMap.remove(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME);
167 System.clearProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME);
170 if (savedValuesMap.containsKey(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME)) {
171 System.setProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME,
172 savedValuesMap.get(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME));
173 savedValuesMap.remove(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME);
175 System.clearProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME);
179 private void sendAndPoll(String topicName) throws InterruptedException {
180 TopicEndpointManager.getManager().getDmaapTopicSource(topicName)
181 .register((infra, topic, event) -> queue.add(event));
183 DmaapTopicSink sink = TopicEndpointManager.getManager().getDmaapTopicSink(topicName);
184 assertThat(queue.poll(1, TimeUnit.SECONDS)).isNull();
187 assertEquals("hello", queue.poll(MAX_WAIT_SEC, TimeUnit.SECONDS));
190 assertEquals("world", queue.poll(MAX_WAIT_SEC, TimeUnit.SECONDS));