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
10 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 * SPDX-License-Identifier: Apache-2.0
19 * ============LICENSE_END=========================================================
22 package org.onap.policy.apex.plugins.event.carrier.restrequestor;
24 import static org.assertj.core.api.Assertions.assertThatThrownBy;
25 import static org.awaitility.Awaitility.await;
26 import static org.junit.Assert.assertEquals;
27 import static org.junit.Assert.assertNotNull;
29 import java.util.Properties;
30 import java.util.concurrent.TimeUnit;
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;
40 * Test the ApexRestRequestorConsumer class.
43 public class ApexRestRequestorConsumerTest {
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";
50 public void testApexRestRequestorConsumerSetup() throws ApexEventException {
51 ApexRestRequestorConsumer consumer = new ApexRestRequestorConsumer();
52 assertNotNull(consumer);
54 EventHandlerParameters consumerParameters = new EventHandlerParameters();
55 ApexEventReceiver incomingEventReceiver = null;
57 assertThatThrownBy(() -> {
58 consumer.init(CONSUMER_NAME, consumerParameters, incomingEventReceiver);
59 }).hasMessage("specified consumer properties are not applicable to REST Requestor consumer (ConsumerName)");
61 RestRequestorCarrierTechnologyParameters rrctp = new RestRequestorCarrierTechnologyParameters();
62 consumerParameters.setCarrierTechnologyParameters(rrctp);
63 assertThatThrownBy(() -> {
64 consumer.init(CONSUMER_NAME, consumerParameters, incomingEventReceiver);
65 }).hasMessage("REST Requestor consumer (ConsumerName) must run in peered requestor mode "
66 + "with a REST Requestor producer");
68 consumerParameters.setPeeredMode(EventHandlerPeeredMode.REQUESTOR, true);
69 rrctp.setHttpMethod(null);
71 assertThatThrownBy(() -> {
72 consumer.init(CONSUMER_NAME, consumerParameters, incomingEventReceiver);
73 }).hasMessage("no URL has been specified on REST Requestor consumer (ConsumerName)");
75 rrctp.setHttpMethod(RestRequestorCarrierTechnologyParameters.HttpMethod.GET);
77 assertThatThrownBy(() -> {
78 consumer.init(CONSUMER_NAME, consumerParameters, incomingEventReceiver);
79 }).hasMessage("invalid URL has been specified on REST Requestor consumer (ConsumerName)");
81 rrctp.setHttpMethod(RestRequestorCarrierTechnologyParameters.HttpMethod.GET);
82 rrctp.setUrl("http://www.onap.org");
83 rrctp.setHttpCodeFilter("[1-5][0][0-5]");
84 consumerParameters.setPeerTimeout(EventHandlerPeeredMode.REQUESTOR, 0);
86 consumer.init(CONSUMER_NAME, consumerParameters, incomingEventReceiver);
88 assertThatThrownBy(() -> {
89 consumer.processRestRequest(null);
90 }).hasMessage("could not queue request \"null\" on REST Requestor consumer (ConsumerName)");
92 assertEquals(CONSUMER_NAME, consumer.getName());
93 assertEquals(0, consumer.getEventsReceived());
94 assertEquals(null, consumer.getPeeredReference(EventHandlerPeeredMode.REQUESTOR));
98 public void testApexRestRequestorConsumerRequest() throws ApexEventException {
99 ApexRestRequestorConsumer consumer = new ApexRestRequestorConsumer();
100 assertNotNull(consumer);
102 EventHandlerParameters consumerParameters = new EventHandlerParameters();
103 RestRequestorCarrierTechnologyParameters rrctp = new RestRequestorCarrierTechnologyParameters();
104 consumerParameters.setCarrierTechnologyParameters(rrctp);
105 consumerParameters.setPeeredMode(EventHandlerPeeredMode.REQUESTOR, true);
106 rrctp.setHttpMethod(RestRequestorCarrierTechnologyParameters.HttpMethod.GET);
107 rrctp.setUrl("http://www.onap.org");
108 rrctp.setHttpCodeFilter("[1-5][0][0-5]");
109 consumerParameters.setPeerTimeout(EventHandlerPeeredMode.REQUESTOR, 0);
111 // Test should time out requests
112 consumer.init(CONSUMER_NAME, consumerParameters, null);
114 ApexRestRequest request = new ApexRestRequest(123, null, EVENT_NAME, EVENT_BODY);
115 consumer.processRestRequest(request);
116 await().atMost(200, TimeUnit.MILLISECONDS).until(() -> consumer.getEventsReceived() == 0);
118 assertEquals(0, consumer.getEventsReceived());
122 public void testApexRestRequestorConsumerUrlUpdate() throws ApexEventException {
123 ApexRestRequestorConsumer consumer = new ApexRestRequestorConsumer();
124 assertNotNull(consumer);
126 EventHandlerParameters consumerParameters = new EventHandlerParameters();
127 RestRequestorCarrierTechnologyParameters rrctp = new RestRequestorCarrierTechnologyParameters();
128 consumerParameters.setCarrierTechnologyParameters(rrctp);
129 consumerParameters.setPeeredMode(EventHandlerPeeredMode.REQUESTOR, true);
130 rrctp.setHttpMethod(RestRequestorCarrierTechnologyParameters.HttpMethod.GET);
132 rrctp.setUrl("http://www.{site}.{site}.{net}");
133 consumerParameters.setPeerTimeout(EventHandlerPeeredMode.REQUESTOR, 2000);
134 Properties properties = new Properties();
135 properties.put("site", "onap");
136 properties.put("net", "org");
138 consumer.init(CONSUMER_NAME, consumerParameters, null);
140 ApexRestRequest request = new ApexRestRequest(123, properties, EVENT_NAME, EVENT_BODY);
141 consumer.processRestRequest(request);
142 await().atMost(2000, TimeUnit.MILLISECONDS).until(() -> consumer.getEventsReceived() == 0);
144 assertEquals(0, consumer.getEventsReceived());
148 public void testApexRestRequestorConsumerUrlUpdateError() throws ApexEventException {
149 ApexRestRequestorConsumer consumer = new ApexRestRequestorConsumer();
150 assertNotNull(consumer);
152 EventHandlerParameters consumerParameters = new EventHandlerParameters();
153 RestRequestorCarrierTechnologyParameters rrctp = new RestRequestorCarrierTechnologyParameters();
154 consumerParameters.setCarrierTechnologyParameters(rrctp);
155 consumerParameters.setPeeredMode(EventHandlerPeeredMode.REQUESTOR, true);
156 rrctp.setHttpMethod(RestRequestorCarrierTechnologyParameters.HttpMethod.GET);
158 rrctp.setUrl("http://www.{site}.{net}");
159 consumerParameters.setPeerTimeout(EventHandlerPeeredMode.REQUESTOR, 2000);
160 Properties properties = new Properties();
161 properties.put("site", "onap");
163 consumer.init(CONSUMER_NAME, consumerParameters, null);
165 ApexRestRequest request = new ApexRestRequest(123, properties, EVENT_NAME, EVENT_BODY);
166 consumer.processRestRequest(request);
167 ThreadUtilities.sleep(2000);
169 assertEquals(0, consumer.getEventsReceived());