5f7cb257b651dfbc8a2e70e0a87609d1606ab633
[policy/apex-pdp.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2019 Samsung. All rights reserved.
4  *  Modifications Copyright (C) 2019-2021, 2023 Nordix Foundation.
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  *
18  * SPDX-License-Identifier: Apache-2.0
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.onap.policy.apex.plugins.event.carrier.restserver;
23
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertFalse;
26 import static org.junit.Assert.assertNotNull;
27 import static org.junit.Assert.assertNull;
28 import static org.junit.Assert.assertTrue;
29
30 import jakarta.ws.rs.core.Response;
31 import java.io.IOException;
32 import java.lang.reflect.Field;
33 import org.junit.After;
34 import org.junit.Before;
35 import org.junit.Test;
36 import org.onap.policy.apex.service.engine.event.ApexEventException;
37 import org.onap.policy.apex.service.engine.event.ApexEventReceiver;
38 import org.onap.policy.apex.service.engine.event.ApexPluginsEventConsumer;
39 import org.onap.policy.apex.service.engine.event.PeeredReference;
40 import org.onap.policy.apex.service.engine.event.SynchronousEventCache;
41 import org.onap.policy.apex.service.parameters.carriertechnology.CarrierTechnologyParameters;
42 import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters;
43 import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerPeeredMode;
44 import org.onap.policy.common.endpoints.http.server.HttpServletServer;
45 import org.onap.policy.common.utils.network.NetworkUtil;
46
47 public class ApexRestServerConsumerTest {
48
49     ApexRestServerConsumer apexRestServerConsumer = null;
50     EventHandlerParameters consumerParameters = null;
51     ApexEventReceiver incomingEventReceiver = null;
52     ApexRestServerProducer apexRestServerProducer = null;
53     RestServerCarrierTechnologyParameters restServerCarrierTechnologyParameters = null;
54     SynchronousEventCache synchronousEventCache = null;
55
56     /**
57      * Set up testing.
58      *
59      * @throws Exception on test set up errors.
60      */
61     @Before
62     public void setUp() throws Exception {
63         apexRestServerConsumer = new ApexRestServerConsumer();
64         consumerParameters = new EventHandlerParameters();
65         apexRestServerProducer = new ApexRestServerProducer();
66         apexRestServerConsumer.start();
67     }
68
69     @After
70     public void tearDown() {
71         apexRestServerConsumer.stop();
72     }
73
74     @Test(expected = ApexEventException.class)
75     public void testInitWithNonWebSocketCarrierTechnologyParameters() throws ApexEventException {
76         consumerParameters.setCarrierTechnologyParameters(new CarrierTechnologyParameters() {});
77         apexRestServerConsumer.init("TestApexRestServerConsumer", consumerParameters,
78                 incomingEventReceiver);
79     }
80
81     @Test(expected = ApexEventException.class)
82     public void testInitWithWebSocketCarrierTechnologyParameters() throws ApexEventException {
83         restServerCarrierTechnologyParameters = new RestServerCarrierTechnologyParameters();
84         consumerParameters.setCarrierTechnologyParameters(restServerCarrierTechnologyParameters);
85         apexRestServerConsumer.init("TestApexRestServerConsumer", consumerParameters,
86                 incomingEventReceiver);
87     }
88
89     @Test(expected = ApexEventException.class)
90     public void testInitWithSynchronousMode() throws ApexEventException, SecurityException, IllegalArgumentException {
91         restServerCarrierTechnologyParameters = new RestServerCarrierTechnologyParameters();
92         restServerCarrierTechnologyParameters.setStandalone(true);
93         consumerParameters.setCarrierTechnologyParameters(restServerCarrierTechnologyParameters);
94         consumerParameters.setPeeredMode(EventHandlerPeeredMode.SYNCHRONOUS, true);
95         apexRestServerConsumer.init("TestApexRestServerConsumer", consumerParameters,
96                 incomingEventReceiver);
97     }
98
99     @Test(expected = IllegalArgumentException.class)
100     public void testInitWithSynchronousModeAndProperValues()
101             throws ApexEventException, SecurityException, IllegalArgumentException {
102
103         restServerCarrierTechnologyParameters = new RestServerCarrierTechnologyParameters();
104
105         restServerCarrierTechnologyParameters.setStandalone(true);
106         restServerCarrierTechnologyParameters.setHost("1ocalhost");
107         restServerCarrierTechnologyParameters.setPort(65535);
108
109
110         consumerParameters.setCarrierTechnologyParameters(restServerCarrierTechnologyParameters);
111         consumerParameters.setPeeredMode(EventHandlerPeeredMode.SYNCHRONOUS, true);
112         apexRestServerConsumer.init("TestApexRestServerConsumer", consumerParameters,
113                 incomingEventReceiver);
114     }
115
116     @Test
117     public void testInitAndStop() throws ApexEventException, IOException {
118         restServerCarrierTechnologyParameters = new RestServerCarrierTechnologyParameters();
119
120         restServerCarrierTechnologyParameters.setStandalone(true);
121         restServerCarrierTechnologyParameters.setHost("localhost");
122         // get any available port
123         final int availableTcpPort = NetworkUtil.allocPort();
124         restServerCarrierTechnologyParameters.setPort(availableTcpPort);
125
126         consumerParameters.setCarrierTechnologyParameters(restServerCarrierTechnologyParameters);
127         consumerParameters.setPeeredMode(EventHandlerPeeredMode.SYNCHRONOUS, true);
128         apexRestServerConsumer.init("TestApexRestServerConsumer", consumerParameters,
129             incomingEventReceiver);
130         HttpServletServer server = apexRestServerConsumer.getServer();
131
132         // check if server is alive
133         assertTrue(server.isAlive());
134
135         apexRestServerConsumer.stop();
136         // check if server is stopped
137         assertFalse(server.isAlive());
138     }
139
140     @Test
141     public void testGetName() {
142         assertNull(apexRestServerConsumer.getName());
143     }
144
145     @Test
146     public void testGetPeeredReference() {
147         assertNull(apexRestServerConsumer.getPeeredReference(EventHandlerPeeredMode.REQUESTOR));
148     }
149
150     @Test
151     public void testSetPeeredReference() {
152         PeeredReference peeredReference = new PeeredReference(EventHandlerPeeredMode.REQUESTOR,
153                 apexRestServerConsumer, apexRestServerProducer);
154         apexRestServerConsumer.setPeeredReference(EventHandlerPeeredMode.REQUESTOR,
155                 peeredReference);
156         assertNotNull(apexRestServerConsumer.getPeeredReference(EventHandlerPeeredMode.REQUESTOR));
157     }
158
159     @Test
160     public void testReceiveEvent() throws ApexEventException {
161         Response response = apexRestServerConsumer.receiveEvent("");
162         assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatus());
163     }
164
165     @Test(expected = NullPointerException.class)
166     public void testReceiveEventWithNonDefaultValues()
167             throws ApexEventException, NoSuchFieldException, SecurityException,
168             IllegalArgumentException, IllegalAccessException {
169
170         PeeredReference peeredReference = new PeeredReference(EventHandlerPeeredMode.REQUESTOR,
171                 apexRestServerConsumer, apexRestServerProducer);
172         apexRestServerConsumer.setPeeredReference(EventHandlerPeeredMode.REQUESTOR,
173                 peeredReference);
174
175         ApexEventReceiver apexEventReceiver = new SupportApexEventReceiver();
176
177         apexRestServerConsumer.setEventReceiver(apexEventReceiver);
178         Field field = ApexPluginsEventConsumer.class.getDeclaredField("name");
179         field.setAccessible(true);
180         field.set(apexRestServerConsumer, "TestApexRestServerConsumer");
181
182         apexRestServerConsumer.receiveEvent("TestApexRestServerConsumer");
183
184     }
185 }