0c6067a7535b4b1173a9f2f00cbdeab9f527eb94
[policy/apex-pdp.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2018 Ericsson. All rights reserved.
4  *  Modifications Copyright (C) 2019-2020 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.restrequestor;
23
24 import static org.awaitility.Awaitility.await;
25 import static org.junit.Assert.assertEquals;
26 import static org.junit.Assert.assertNotNull;
27 import static org.junit.Assert.fail;
28
29 import java.util.Properties;
30 import java.util.concurrent.TimeUnit;
31
32 import org.junit.Test;
33 import org.onap.policy.apex.core.infrastructure.threading.ThreadUtilities;
34 import org.onap.policy.apex.service.engine.event.ApexEventException;
35 import org.onap.policy.apex.service.engine.event.ApexEventReceiver;
36 import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters;
37 import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerPeeredMode;
38
39 /**
40  * Test the ApexRestRequestorConsumer class.
41  *
42  */
43 public class ApexRestRequestorConsumerTest {
44     // String constants
45     private static final String CONSUMER_NAME = "ConsumerName";
46     private static final String EVENT_NAME = "EventName";
47     private static final String EVENT_BODY = "Event body";
48
49     @Test
50     public void testApexRestRequestorConsumerSetup() throws ApexEventException {
51         ApexRestRequestorConsumer consumer = new ApexRestRequestorConsumer();
52         assertNotNull(consumer);
53
54         EventHandlerParameters consumerParameters = new EventHandlerParameters();
55         ApexEventReceiver incomingEventReceiver = null;
56
57         try {
58             consumer.init(CONSUMER_NAME, consumerParameters, incomingEventReceiver);
59             fail("test should throw an exception here");
60         } catch (ApexEventException aee) {
61             assertEquals("specified consumer properties are not applicable to REST Requestor consumer (ConsumerName)",
62                     aee.getMessage());
63         }
64
65         RestRequestorCarrierTechnologyParameters rrctp = new RestRequestorCarrierTechnologyParameters();
66         consumerParameters.setCarrierTechnologyParameters(rrctp);
67         try {
68             consumer.init(CONSUMER_NAME, consumerParameters, incomingEventReceiver);
69             fail("test should throw an exception here");
70         } catch (ApexEventException aee) {
71             assertEquals("REST Requestor consumer (ConsumerName) must run in peered requestor mode "
72                     + "with a REST Requestor producer", aee.getMessage());
73         }
74
75         consumerParameters.setPeeredMode(EventHandlerPeeredMode.REQUESTOR, true);
76         rrctp.setHttpMethod(null);
77         try {
78             consumer.init(CONSUMER_NAME, consumerParameters, incomingEventReceiver);
79             fail("test should throw an exception here");
80         } catch (ApexEventException aee) {
81             assertEquals("no URL has been specified on REST Requestor consumer (ConsumerName)", aee.getMessage());
82         }
83
84         rrctp.setHttpMethod(RestRequestorCarrierTechnologyParameters.HttpMethod.GET);
85         rrctp.setUrl("ZZZZ");
86         try {
87             consumer.init(CONSUMER_NAME, consumerParameters, incomingEventReceiver);
88             fail("test should throw an exception here");
89         } catch (ApexEventException aee) {
90             assertEquals("invalid URL has been specified on REST Requestor consumer (ConsumerName)", aee.getMessage());
91         }
92
93         rrctp.setHttpMethod(RestRequestorCarrierTechnologyParameters.HttpMethod.GET);
94         rrctp.setUrl("http://www.onap.org");
95         rrctp.setHttpCodeFilter("[1-5][0][0-5]");
96         consumerParameters.setPeerTimeout(EventHandlerPeeredMode.REQUESTOR, 0);
97
98         consumer.init(CONSUMER_NAME, consumerParameters, incomingEventReceiver);
99
100         try {
101             consumer.processRestRequest(null);
102             fail("test should throw an exception here");
103         } catch (Exception ex) {
104             assertEquals("could not queue request \"null\" on REST Requestor consumer (ConsumerName)", ex.getMessage());
105         }
106
107         assertEquals(CONSUMER_NAME, consumer.getName());
108         assertEquals(0, consumer.getEventsReceived());
109         assertEquals(null, consumer.getPeeredReference(EventHandlerPeeredMode.REQUESTOR));
110     }
111
112     @Test
113     public void testApexRestRequestorConsumerRequest() throws ApexEventException {
114         ApexRestRequestorConsumer consumer = new ApexRestRequestorConsumer();
115         assertNotNull(consumer);
116
117         EventHandlerParameters consumerParameters = new EventHandlerParameters();
118         RestRequestorCarrierTechnologyParameters rrctp = new RestRequestorCarrierTechnologyParameters();
119         consumerParameters.setCarrierTechnologyParameters(rrctp);
120         consumerParameters.setPeeredMode(EventHandlerPeeredMode.REQUESTOR, true);
121         rrctp.setHttpMethod(RestRequestorCarrierTechnologyParameters.HttpMethod.GET);
122         rrctp.setUrl("http://www.onap.org");
123         rrctp.setHttpCodeFilter("[1-5][0][0-5]");
124         consumerParameters.setPeerTimeout(EventHandlerPeeredMode.REQUESTOR, 0);
125
126         // Test should time out requests
127         consumer.init(CONSUMER_NAME, consumerParameters, null);
128         consumer.start();
129         ApexRestRequest request = new ApexRestRequest(123, null, EVENT_NAME, EVENT_BODY);
130         consumer.processRestRequest(request);
131         await().atMost(200, TimeUnit.MILLISECONDS).until(() -> consumer.getEventsReceived() == 0);
132         consumer.stop();
133         assertEquals(0, consumer.getEventsReceived());
134     }
135
136     @Test
137     public void testApexRestRequestorConsumerUrlUpdate() throws ApexEventException {
138         ApexRestRequestorConsumer consumer = new ApexRestRequestorConsumer();
139         assertNotNull(consumer);
140
141         EventHandlerParameters consumerParameters = new EventHandlerParameters();
142         RestRequestorCarrierTechnologyParameters rrctp = new RestRequestorCarrierTechnologyParameters();
143         consumerParameters.setCarrierTechnologyParameters(rrctp);
144         consumerParameters.setPeeredMode(EventHandlerPeeredMode.REQUESTOR, true);
145         rrctp.setHttpMethod(RestRequestorCarrierTechnologyParameters.HttpMethod.GET);
146
147         rrctp.setUrl("http://www.{site}.{site}.{net}");
148         consumerParameters.setPeerTimeout(EventHandlerPeeredMode.REQUESTOR, 2000);
149         Properties properties = new Properties();
150         properties.put("site", "onap");
151         properties.put("net", "org");
152
153         consumer.init(CONSUMER_NAME, consumerParameters, null);
154         consumer.start();
155         ApexRestRequest request = new ApexRestRequest(123, properties, EVENT_NAME, EVENT_BODY);
156         consumer.processRestRequest(request);
157         await().atMost(2000, TimeUnit.MILLISECONDS).until(() -> consumer.getEventsReceived() == 0);
158         consumer.stop();
159         assertEquals(0, consumer.getEventsReceived());
160     }
161
162     @Test
163     public void testApexRestRequestorConsumerUrlUpdateError() throws ApexEventException {
164         ApexRestRequestorConsumer consumer = new ApexRestRequestorConsumer();
165         assertNotNull(consumer);
166
167         EventHandlerParameters consumerParameters = new EventHandlerParameters();
168         RestRequestorCarrierTechnologyParameters rrctp = new RestRequestorCarrierTechnologyParameters();
169         consumerParameters.setCarrierTechnologyParameters(rrctp);
170         consumerParameters.setPeeredMode(EventHandlerPeeredMode.REQUESTOR, true);
171         rrctp.setHttpMethod(RestRequestorCarrierTechnologyParameters.HttpMethod.GET);
172
173         rrctp.setUrl("http://www.{site}.{net}");
174         consumerParameters.setPeerTimeout(EventHandlerPeeredMode.REQUESTOR, 2000);
175         Properties properties = new Properties();
176         properties.put("site", "onap");
177
178         consumer.init(CONSUMER_NAME, consumerParameters, null);
179         consumer.start();
180         ApexRestRequest request = new ApexRestRequest(123, properties, EVENT_NAME, EVENT_BODY);
181         consumer.processRestRequest(request);
182         ThreadUtilities.sleep(2000);
183         consumer.stop();
184         assertEquals(0, consumer.getEventsReceived());
185     }
186 }