197c25f6ce943cb697049b64f455e71a22f85f67
[policy/models.git] / models-interactions / model-simulators / src / test / java / org / onap / policy / simulators / DmaapSimulatorTest.java
1 /*-
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  * ================================================================================
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  * ============LICENSE_END=========================================================
18  */
19
20 package org.onap.policy.simulators;
21
22 import static org.assertj.core.api.Assertions.assertThat;
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertNotNull;
25
26 import java.io.File;
27 import java.nio.file.Files;
28 import java.util.HashMap;
29 import java.util.concurrent.BlockingQueue;
30 import java.util.concurrent.LinkedBlockingQueue;
31 import java.util.concurrent.TimeUnit;
32 import org.junit.After;
33 import org.junit.AfterClass;
34 import org.junit.Before;
35 import org.junit.BeforeClass;
36 import org.junit.Test;
37 import org.onap.policy.common.endpoints.event.comm.TopicEndpointManager;
38 import org.onap.policy.common.endpoints.event.comm.bus.DmaapTopicSink;
39 import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance;
40 import org.onap.policy.common.endpoints.http.server.internal.JettyJerseyServer;
41 import org.onap.policy.common.endpoints.parameters.TopicParameterGroup;
42 import org.onap.policy.common.utils.coder.StandardCoder;
43
44 public class DmaapSimulatorTest {
45     private static final int MAX_WAIT_SEC = 5;
46     private static final String TOPIC = "MY-TOPIC";
47     private static final String AUTH_TOPIC = "MY-AUTH-TOPIC";
48     private static final String AUTH_PORT = "3903";
49
50     private static final HashMap<String, String> savedValuesMap = new HashMap<>();
51
52     /**
53      * Messages from the topic are placed here by the endpoint.
54      */
55     private BlockingQueue<String> queue;
56
57     @BeforeClass
58     public static void setUpBeforeClass() throws Exception {
59         TopicEndpointManager.getManager().shutdown();
60     }
61
62     /**
63      * Starts the simulator and the topic.
64      *
65      * @throws Exception if an error occurs
66      */
67     @Before
68     public void setUp() throws Exception {
69         assertNotNull(Util.buildDmaapSim());
70         setSystemProperties();
71         assertNotNull(Util.buildDmaapSim("org/onap/policy/simulators/dmaap/AuthDmaapParameters.json"));
72
73         String topicJson = Files.readString(
74                 new File("src/test/resources/org/onap/policy/simulators/dmaap/TopicParameters.json").toPath());
75         topicJson = topicJson
76                 .replace("${port}", String.valueOf(Util.DMAAPSIM_SERVER_PORT))
77                 .replace("${authPort}", AUTH_PORT);
78
79         TopicParameterGroup topicConfig = new StandardCoder().decode(topicJson, TopicParameterGroup.class);
80
81         TopicEndpointManager.getManager().addTopics(topicConfig);
82         TopicEndpointManager.getManager().start();
83
84         queue = new LinkedBlockingQueue<>();
85     }
86
87     @AfterClass
88     public static void tearDownAfterClass() {
89         clearSystemProperties();
90     }
91
92     @After
93     public void tearDown() {
94         TopicEndpointManager.getManager().shutdown();
95         HttpServletServerFactoryInstance.getServerFactory().destroy();
96     }
97
98     @Test
99     public void test() throws InterruptedException {
100         // test basic DMaaP simulator (default port, http, no auth)
101         sendAndPoll(TOPIC);
102         // test custom DMaaP simulator (custom port, https, basic auth)
103         sendAndPoll(AUTH_TOPIC);
104     }
105
106     /**
107      * Sets up keystore and truststore for https test server.
108      */
109     private static void setSystemProperties() {
110         String keyStoreSystemProperty = System.getProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME);
111         if (keyStoreSystemProperty != null) {
112             savedValuesMap.put(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME, keyStoreSystemProperty);
113         }
114
115         String keyStorePasswordSystemProperty =
116                 System.getProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME);
117         if (keyStorePasswordSystemProperty != null) {
118             savedValuesMap.put(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME,
119                     keyStorePasswordSystemProperty);
120         }
121
122         String trustStoreSystemProperty = System.getProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME);
123         if (trustStoreSystemProperty != null) {
124             savedValuesMap.put(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME, trustStoreSystemProperty);
125         }
126
127         String trustStorePasswordSystemProperty =
128                 System.getProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME);
129         if (trustStorePasswordSystemProperty != null) {
130             savedValuesMap.put(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME,
131                     trustStorePasswordSystemProperty);
132         }
133
134         System.setProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME, "src/test/resources/keystore-test");
135         System.setProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME, "kstest");
136
137         System.setProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME, "src/test/resources/keystore-test");
138         System.setProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME, "kstest");
139     }
140
141     /**
142      * Clears the keystore/truststore properties.
143      */
144     private static void clearSystemProperties() {
145         if (savedValuesMap.containsKey(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME)) {
146             System.setProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME,
147                     savedValuesMap.get(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME));
148             savedValuesMap.remove(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME);
149         } else {
150             System.clearProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME);
151         }
152
153         if (savedValuesMap.containsKey(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME)) {
154             System.setProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME,
155                     savedValuesMap.get(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME));
156             savedValuesMap.remove(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME);
157         } else {
158             System.clearProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME);
159         }
160
161         if (savedValuesMap.containsKey(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME)) {
162             System.setProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME,
163                     savedValuesMap.get(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME));
164             savedValuesMap.remove(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME);
165         } else {
166             System.clearProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME);
167         }
168
169         if (savedValuesMap.containsKey(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME)) {
170             System.setProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME,
171                     savedValuesMap.get(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME));
172             savedValuesMap.remove(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME);
173         } else {
174             System.clearProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME);
175         }
176     }
177
178     private void sendAndPoll(String topicName) throws InterruptedException {
179         TopicEndpointManager.getManager().getDmaapTopicSource(topicName)
180                 .register((infra, topic, event) -> queue.add(event));
181
182         DmaapTopicSink sink = TopicEndpointManager.getManager().getDmaapTopicSink(topicName);
183         assertThat(queue.poll(1, TimeUnit.SECONDS)).isNull();
184
185         sink.send("hello");
186         assertEquals("hello", queue.poll(MAX_WAIT_SEC, TimeUnit.SECONDS));
187
188         sink.send("world");
189         assertEquals("world", queue.poll(MAX_WAIT_SEC, TimeUnit.SECONDS));
190     }
191
192 }