dd25902d64b4d9ce4e559432796b5f46a5702e9e
[policy/models.git] / models-interactions / model-actors / actorServiceProvider / src / test / java / org / onap / policy / controlloop / actorserviceprovider / impl / TopicPairOperatorTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP
4  * ================================================================================
5  * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
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.controlloop.actorserviceprovider.impl;
22
23 import static org.assertj.core.api.Assertions.assertThatThrownBy;
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertSame;
26 import static org.mockito.Mockito.when;
27
28 import java.util.List;
29 import java.util.concurrent.atomic.AtomicReference;
30 import java.util.function.BiFunction;
31 import org.junit.Before;
32 import org.junit.Test;
33 import org.mockito.Mock;
34 import org.mockito.MockitoAnnotations;
35 import org.onap.policy.controlloop.actorserviceprovider.Operation;
36 import org.onap.policy.controlloop.actorserviceprovider.Util;
37 import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
38 import org.onap.policy.controlloop.actorserviceprovider.parameters.ParameterValidationRuntimeException;
39 import org.onap.policy.controlloop.actorserviceprovider.parameters.TopicPairParams;
40 import org.onap.policy.controlloop.actorserviceprovider.topic.Forwarder;
41 import org.onap.policy.controlloop.actorserviceprovider.topic.SelectorKey;
42 import org.onap.policy.controlloop.actorserviceprovider.topic.TopicPair;
43 import org.onap.policy.controlloop.actorserviceprovider.topic.TopicPairManager;
44
45 public class TopicPairOperatorTest {
46     private static final String ACTOR = "my-actor";
47     private static final String OPERATION = "my-operation";
48     private static final String MY_SOURCE = "my-source";
49     private static final String MY_TARGET = "my-target";
50     private static final int TIMEOUT_SEC = 10;
51
52     @Mock
53     private TopicPairManager mgr;
54     @Mock
55     private TopicPair pair;
56     @Mock
57     private Forwarder forwarder;
58     @Mock
59     private TopicPairOperation<String, Integer> operation;
60
61     private List<SelectorKey> keys;
62     private TopicPairParams params;
63     private MyOperator oper;
64
65     /**
66      * Sets up.
67      */
68     @Before
69     public void setUp() {
70         MockitoAnnotations.initMocks(this);
71
72         keys = List.of(new SelectorKey(""));
73
74         when(mgr.getTopicPair(MY_SOURCE, MY_TARGET)).thenReturn(pair);
75         when(pair.addForwarder(keys)).thenReturn(forwarder);
76
77         oper = new MyOperator(keys);
78
79         params = TopicPairParams.builder().source(MY_SOURCE).target(MY_TARGET).timeoutSec(TIMEOUT_SEC).build();
80         oper.configure(Util.translateToMap(OPERATION, params));
81         oper.start();
82     }
83
84     @Test
85     public void testTopicPairOperator_testGetParams_testGetTopicPair_testGetForwarder() {
86         assertEquals(ACTOR, oper.getActorName());
87         assertEquals(OPERATION, oper.getName());
88         assertEquals(params, oper.getParams());
89         assertSame(pair, oper.getTopicPair());
90         assertSame(forwarder, oper.getForwarder());
91     }
92
93     @Test
94     public void testDoConfigure() {
95         oper.stop();
96
97         // invalid parameters
98         params.setSource(null);
99         assertThatThrownBy(() -> oper.configure(Util.translateToMap(OPERATION, params)))
100                         .isInstanceOf(ParameterValidationRuntimeException.class);
101     }
102
103     @Test
104     public void testMakeOperator() {
105         AtomicReference<ControlLoopOperationParams> paramsRef = new AtomicReference<>();
106         AtomicReference<TopicPairOperator> operRef = new AtomicReference<>();
107
108         // @formatter:off
109         BiFunction<ControlLoopOperationParams, TopicPairOperator, TopicPairOperation<String, Integer>> maker =
110             (params, operator) -> {
111                 paramsRef.set(params);
112                 operRef.set(operator);
113                 return operation;
114             };
115         // @formatter:on
116
117         TopicPairOperator oper2 = TopicPairOperator.makeOperator(ACTOR, OPERATION, mgr, maker, new SelectorKey(""));
118
119         assertEquals(ACTOR, oper2.getActorName());
120         assertEquals(OPERATION, oper2.getName());
121
122         ControlLoopOperationParams params2 = ControlLoopOperationParams.builder().build();
123
124         assertSame(operation, oper2.buildOperation(params2));
125         assertSame(params2, paramsRef.get());
126         assertSame(oper2, operRef.get());
127     }
128
129
130     private class MyOperator extends TopicPairOperator {
131         public MyOperator(List<SelectorKey> selectorKeys) {
132             super(ACTOR, OPERATION, mgr, selectorKeys);
133         }
134
135         @Override
136         public Operation buildOperation(ControlLoopOperationParams params) {
137             return null;
138         }
139     }
140 }