package org.onap.policy.controlloop.actorserviceprovider.impl;
+import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import static org.mockito.Mockito.when;
+import java.util.Arrays;
import java.util.List;
+import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
-import java.util.function.BiFunction;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import org.onap.policy.controlloop.actorserviceprovider.Operation;
import org.onap.policy.controlloop.actorserviceprovider.Util;
+import org.onap.policy.controlloop.actorserviceprovider.parameters.BidirectionalTopicConfig;
import org.onap.policy.controlloop.actorserviceprovider.parameters.BidirectionalTopicParams;
import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
import org.onap.policy.controlloop.actorserviceprovider.parameters.ParameterValidationRuntimeException;
public void testConstructor_testGetParams_testGetTopicHandler_testGetForwarder() {
assertEquals(ACTOR, oper.getActorName());
assertEquals(OPERATION, oper.getName());
- assertEquals(params, oper.getParams());
- assertSame(handler, oper.getTopicHandler());
- assertSame(forwarder, oper.getForwarder());
+ assertNotNull(oper.getCurrentConfig());
}
@Test
// invalid parameters
params.setSourceTopic(null);
- assertThatThrownBy(() -> oper.configure(Util.translateToMap(OPERATION, params)))
+ Map<String, Object> map = Util.translateToMap(OPERATION, params);
+ assertThatThrownBy(() -> oper.configure(map))
.isInstanceOf(ParameterValidationRuntimeException.class);
}
@Test
- public void testMakeOperator() {
+ public void testBuildOperator() {
AtomicReference<ControlLoopOperationParams> paramsRef = new AtomicReference<>();
- AtomicReference<BidirectionalTopicOperator> operRef = new AtomicReference<>();
+ AtomicReference<BidirectionalTopicConfig> configRef = new AtomicReference<>();
// @formatter:off
- BiFunction<ControlLoopOperationParams, BidirectionalTopicOperator,
- BidirectionalTopicOperation<String, Integer>> maker =
- (params, operator) -> {
- paramsRef.set(params);
- operRef.set(operator);
- return operation;
- };
+ OperationMaker<BidirectionalTopicConfig, BidirectionalTopicOperation<?, ?>> maker =
+ (params, config) -> {
+ paramsRef.set(params);
+ configRef.set(config);
+ return operation;
+ };
// @formatter:on
BidirectionalTopicOperator oper2 =
- BidirectionalTopicOperator.makeOperator(ACTOR, OPERATION, mgr, maker, new SelectorKey(""));
+ new BidirectionalTopicOperator(ACTOR, OPERATION, mgr, maker, new SelectorKey(""));
assertEquals(ACTOR, oper2.getActorName());
assertEquals(OPERATION, oper2.getName());
ControlLoopOperationParams params2 = ControlLoopOperationParams.builder().build();
+ // configure and start it
+ params = BidirectionalTopicParams.builder().sourceTopic(MY_SOURCE).sinkTopic(MY_SINK).timeoutSec(TIMEOUT_SEC)
+ .build();
+ oper2.configure(Util.translateToMap(OPERATION, params));
+
+ // not running yet
+ assertThatIllegalStateException().isThrownBy(() -> oper2.buildOperation(params2));
+
+ oper2.start();
+
assertSame(operation, oper2.buildOperation(params2));
assertSame(params2, paramsRef.get());
- assertSame(oper2, operRef.get());
+ assertSame(oper2.getCurrentConfig(), configRef.get());
+
+ // with no operation-maker
+ BidirectionalTopicOperator oper3 =
+ new BidirectionalTopicOperator(ACTOR, OPERATION, mgr, Arrays.asList(new SelectorKey("")));
+ assertThatThrownBy(() -> oper3.buildOperation(params2)).isInstanceOf(UnsupportedOperationException.class);
}
}
@Override
- public Operation buildOperation(ControlLoopOperationParams params) {
+ public BidirectionalTopicOperation<?, ?> buildOperation(ControlLoopOperationParams params) {
return null;
}
}