5abf28ee678d5978940564e58f6956d420efc422
[policy/apex-pdp.git] / services / services-engine / src / test / java / org / onap / policy / apex / service / engine / event / impl / eventrequestor / EventRequestorProducerTest.java
1 /*
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2021  Nordix Foundation
4  *  Modifications Copyright (C) 2021 AT&T Intellectual Property. 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  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  *  SPDX-License-Identifier: Apache-2.0
18  *  ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.apex.service.engine.event.impl.eventrequestor;
22
23 import static org.assertj.core.api.Assertions.assertThatThrownBy;
24 import static org.junit.Assert.assertEquals;
25 import static org.mockito.ArgumentMatchers.any;
26
27 import java.util.Random;
28 import org.apache.commons.lang3.RandomStringUtils;
29 import org.junit.Before;
30 import org.junit.Test;
31 import org.junit.runner.RunWith;
32 import org.mockito.Mock;
33 import org.mockito.Mockito;
34 import org.mockito.junit.MockitoJUnitRunner;
35 import org.onap.policy.apex.service.engine.event.ApexEventException;
36 import org.onap.policy.apex.service.engine.event.ApexEventProducer;
37 import org.onap.policy.apex.service.engine.event.ApexEventRuntimeException;
38 import org.onap.policy.apex.service.engine.event.PeeredReference;
39 import org.onap.policy.apex.service.engine.event.SynchronousEventCache;
40 import org.onap.policy.apex.service.engine.event.impl.filecarrierplugin.consumer.ApexFileEventConsumer;
41 import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters;
42 import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerPeeredMode;
43
44 @RunWith(MockitoJUnitRunner.class)
45 public class EventRequestorProducerTest {
46     private final Random random = new Random();
47     private EventRequestorProducer producer;
48
49     @Mock
50     private ApexEventProducer apexProducer;
51     @Mock
52     private EventRequestorConsumer apexConsumer;
53
54     @Before
55     public void setUp() throws Exception {
56         producer = new EventRequestorProducer();
57     }
58
59     @Test
60     public void initWithEmptyParams() {
61         final String producerName = RandomStringUtils.random(4);
62         final EventHandlerParameters eventHandlerParameters = new EventHandlerParameters();
63
64         assertThatThrownBy(() -> producer.init(producerName, eventHandlerParameters))
65             .isInstanceOf(ApexEventException.class);
66     }
67
68     @Test
69     public void initNotPeered() {
70         final String producerName = RandomStringUtils.random(4);
71         final EventHandlerParameters eventHandlerParameters = new EventHandlerParameters();
72         eventHandlerParameters.setCarrierTechnologyParameters(new EventRequestorCarrierTechnologyParameters());
73
74         assertThatThrownBy(() -> producer.init(producerName, eventHandlerParameters))
75             .isInstanceOf(ApexEventException.class);
76     }
77
78     @Test
79     public void getName() throws ApexEventException {
80         final String expected = RandomStringUtils.random(4);
81         final EventHandlerParameters eventHandlerParameters = new EventHandlerParameters();
82         eventHandlerParameters.setCarrierTechnologyParameters(new EventRequestorCarrierTechnologyParameters());
83         eventHandlerParameters.setPeeredMode(EventHandlerPeeredMode.REQUESTOR, true);
84
85         producer.init(expected, eventHandlerParameters);
86         final String actual = producer.getName();
87
88         assertEquals(expected, actual);
89     }
90
91     @Test
92     public void getSetPeeredReference() {
93         final PeeredReference peeredReference = new PeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, apexConsumer,
94             apexProducer);
95         producer.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, peeredReference);
96
97         final PeeredReference actual = this.producer.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS);
98         assertEquals(peeredReference, actual);
99     }
100
101     @Test
102     public void sendEventNoRequestor() {
103         final int id = random.nextInt(1000);
104
105         assertThatThrownBy(() -> producer.sendEvent(id, null, null, null))
106             .isInstanceOf(ApexEventRuntimeException.class);
107     }
108
109     @Test
110     public void sendEventNoEventRequestorConsumer() {
111         final int id = random.nextInt(1000);
112
113         final ApexFileEventConsumer fileEventConsumer = Mockito.mock(ApexFileEventConsumer.class);
114
115         final PeeredReference reference =
116             new PeeredReference(EventHandlerPeeredMode.REQUESTOR, fileEventConsumer, apexProducer);
117
118         producer.setPeeredReference(EventHandlerPeeredMode.REQUESTOR, reference);
119
120         assertThatThrownBy(() -> producer.sendEvent(id, null, null, null))
121             .isInstanceOf(ApexEventRuntimeException.class);
122     }
123
124     @Test
125     public void sendEvent() {
126         final int id = random.nextInt(1000);
127
128         final PeeredReference reference =
129             new PeeredReference(EventHandlerPeeredMode.REQUESTOR, apexConsumer, apexProducer);
130         producer.setPeeredReference(EventHandlerPeeredMode.REQUESTOR, reference);
131
132         producer.sendEvent(id, null, null, null);
133         Mockito.verify(apexConsumer, Mockito.times(1)).processEvent(any());
134     }
135
136     @Test
137     public void sendEventCached() {
138         final int id = random.nextInt(1000);
139
140         // Set event cache
141         final SynchronousEventCache eventCache = Mockito.mock(SynchronousEventCache.class);
142         producer.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, eventCache);
143
144         final PeeredReference reference =
145             new PeeredReference(EventHandlerPeeredMode.REQUESTOR, apexConsumer, apexProducer);
146         producer.setPeeredReference(EventHandlerPeeredMode.REQUESTOR, reference);
147
148         producer.sendEvent(id, null, null, null);
149         Mockito.verify(apexConsumer, Mockito.times(1)).processEvent(any());
150         Mockito.verify(eventCache, Mockito.times(1)).removeCachedEventToApexIfExists(id);
151     }
152 }