Java 17 Upgrade
[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  * Modifications Copyright (C) 2023 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
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
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=========================================================
19  */
20
21 package org.onap.policy.simulators;
22
23 import static org.assertj.core.api.Assertions.assertThat;
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertNotNull;
26
27 import java.io.File;
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;
44
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";
50
51     private static final HashMap<String, String> savedValuesMap = new HashMap<>();
52
53     /**
54      * Messages from the topic are placed here by the endpoint.
55      */
56     private BlockingQueue<String> queue;
57
58     @BeforeClass
59     public static void setUpBeforeClass() throws Exception {
60         TopicEndpointManager.getManager().shutdown();
61     }
62
63     /**
64      * Starts the simulator and the topic.
65      *
66      * @throws Exception if an error occurs
67      */
68     @Before
69     public void setUp() throws Exception {
70         assertNotNull(Util.buildDmaapSim());
71         setSystemProperties();
72         assertNotNull(Util.buildDmaapSim("org/onap/policy/simulators/dmaap/AuthDmaapParameters.json"));
73
74         String topicJson = Files.readString(
75                 new File("src/test/resources/org/onap/policy/simulators/dmaap/TopicParameters.json").toPath());
76         topicJson = topicJson
77                 .replace("${port}", String.valueOf(Util.DMAAPSIM_SERVER_PORT))
78                 .replace("${authPort}", AUTH_PORT);
79
80         TopicParameterGroup topicConfig = new StandardCoder().decode(topicJson, TopicParameterGroup.class);
81
82         TopicEndpointManager.getManager().addTopics(topicConfig);
83         TopicEndpointManager.getManager().start();
84
85         queue = new LinkedBlockingQueue<>();
86     }
87
88     @AfterClass
89     public static void tearDownAfterClass() {
90         clearSystemProperties();
91     }
92
93     @After
94     public void tearDown() {
95         TopicEndpointManager.getManager().shutdown();
96         HttpServletServerFactoryInstance.getServerFactory().destroy();
97     }
98
99     @Test
100     public void test() throws InterruptedException {
101         // test basic DMaaP simulator (default port, http, no auth)
102         sendAndPoll(TOPIC);
103         // test custom DMaaP simulator (custom port, https, basic auth)
104         sendAndPoll(AUTH_TOPIC);
105     }
106
107     /**
108      * Sets up keystore and truststore for https test server.
109      */
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);
114         }
115
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);
121         }
122
123         String trustStoreSystemProperty = System.getProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME);
124         if (trustStoreSystemProperty != null) {
125             savedValuesMap.put(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME, trustStoreSystemProperty);
126         }
127
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);
133         }
134
135         System.setProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME, "src/test/resources/keystore-test");
136         System.setProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME, "kstest");
137
138         System.setProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME, "src/test/resources/keystore-test");
139         System.setProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME, "kstest");
140     }
141
142     /**
143      * Clears the keystore/truststore properties.
144      */
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);
150         } else {
151             System.clearProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME);
152         }
153
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);
158         } else {
159             System.clearProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME);
160         }
161
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);
166         } else {
167             System.clearProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME);
168         }
169
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);
174         } else {
175             System.clearProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME);
176         }
177     }
178
179     private void sendAndPoll(String topicName) throws InterruptedException {
180         TopicEndpointManager.getManager().getDmaapTopicSource(topicName)
181                 .register((infra, topic, event) -> queue.add(event));
182
183         DmaapTopicSink sink = TopicEndpointManager.getManager().getDmaapTopicSink(topicName);
184         assertThat(queue.poll(1, TimeUnit.SECONDS)).isNull();
185
186         sink.send("hello");
187         assertEquals("hello", queue.poll(MAX_WAIT_SEC, TimeUnit.SECONDS));
188
189         sink.send("world");
190         assertEquals("world", queue.poll(MAX_WAIT_SEC, TimeUnit.SECONDS));
191     }
192
193 }