import org.onap.policy.controlloop.policy.Target;
public class ControlLoopOperationParamsTest {
+ private static final String NULL_MSG = "null";
+ private static final String REQUEST_ID_NAME = "requestId";
private static final String EXPECTED_EXCEPTION = "expected exception";
private static final String ACTOR = "my-actor";
private static final String OPERATION = "my-operation";
private static final Integer RETRY = 3;
private static final Integer TIMEOUT = 100;
private static final UUID REQ_ID = UUID.randomUUID();
+ private static final UUID REQ_ID2 = UUID.randomUUID();
@Mock
private Actor actor;
@Mock
private Consumer<OperationOutcome> starter;
- private Map<String, String> payload;
+ private Map<String, Object> payload;
private ControlLoopOperationParams params;
private OperationOutcome outcome;
params = ControlLoopOperationParams.builder().actorService(actorService).completeCallback(completer)
.context(context).executor(executor).actor(ACTOR).operation(OPERATION).payload(payload)
.retry(RETRY).target(TARGET).targetEntity(TARGET_ENTITY).timeoutSec(TIMEOUT)
- .startCallback(starter).build();
+ .startCallback(starter).preprocessed(true).build();
- outcome = params.makeOutcome();
+ outcome = params.makeOutcome(TARGET_ENTITY);
}
@Test
public void testStart() {
+ assertThatIllegalArgumentException().isThrownBy(() -> params.toBuilder().context(null).build().start());
+
assertSame(operFuture, params.start());
+ }
- assertThatIllegalArgumentException().isThrownBy(() -> params.toBuilder().context(null).build().start());
+ @Test
+ public void testBuild() {
+ assertThatIllegalArgumentException().isThrownBy(() -> params.toBuilder().context(null).build().build());
+
+ assertSame(operation, params.build());
}
@Test
public void testGetRequestId() {
assertSame(REQ_ID, params.getRequestId());
+ // when both request ID and event request ID are set - should use request ID
+ // parameter
+ assertSame(REQ_ID2, params.toBuilder().requestId(REQ_ID2).build().getRequestId());
+ }
+
+ /**
+ * Tests getRequestId() when the request ID is not available in the context.
+ */
+ @Test
+ public void testGetRequestIdNotFromContext() {
// try with null context
assertNull(params.toBuilder().context(null).build().getRequestId());
// try with null event
when(context.getEvent()).thenReturn(null);
assertNull(params.getRequestId());
+
+ // set request ID directly
+ assertSame(REQ_ID2, params.toBuilder().requestId(REQ_ID2).build().getRequestId());
}
@Test
@Test
public void testValidateFields() {
- testValidate("actor", "null", bldr -> bldr.actor(null));
- testValidate("actorService", "null", bldr -> bldr.actorService(null));
- testValidate("context", "null", bldr -> bldr.context(null));
- testValidate("executor", "null", bldr -> bldr.executor(null));
- testValidate("operation", "null", bldr -> bldr.operation(null));
- testValidate("target", "null", bldr -> bldr.targetEntity(null));
+ testValidate("actor", NULL_MSG, bldr -> bldr.actor(null));
+ testValidate("actorService", NULL_MSG, bldr -> bldr.actorService(null));
+ testValidate("executor", NULL_MSG, bldr -> bldr.executor(null));
+ testValidate("operation", NULL_MSG, bldr -> bldr.operation(null));
+
+ // has no target entity
+ BeanValidationResult result = params.toBuilder().targetEntity(null).build().validate();
+ assertTrue(result.isValid());
+
+ // note: if context is null, then it will ACTUALLY complain about the request ID
+ testValidate(REQUEST_ID_NAME, NULL_MSG, bldr -> bldr.context(null));
// check edge cases
assertTrue(params.toBuilder().build().validate().isValid());
// test with minimal fields
assertTrue(ControlLoopOperationParams.builder().actorService(actorService).context(context).actor(ACTOR)
.operation(OPERATION).targetEntity(TARGET_ENTITY).build().validate().isValid());
+
+ // test when event has no request ID
+ when(event.getRequestId()).thenReturn(null);
+ result = params.validate();
+ assertFalse(result.isValid());
+ assertThat(result.getResult()).contains("event").contains(REQUEST_ID_NAME).contains(NULL_MSG);
+
+ // try when context has no event
+ when(context.getEvent()).thenReturn(null);
+ result = params.validate();
+ assertFalse(result.isValid());
+ assertThat(result.getResult()).contains("event").doesNotContain(REQUEST_ID_NAME).contains(NULL_MSG);
+
+ // has both request ID and context, but no event
+ result = params.toBuilder().requestId(REQ_ID2).build().validate();
+ assertTrue(result.isValid());
+
+ // has request ID, but not context
+ result = params.toBuilder().requestId(REQ_ID2).context(null).build().validate();
+ assertTrue(result.isValid());
}
private void testValidate(String fieldName, String expected,
assertNull(ControlLoopOperationParams.builder().build().getPayload());
}
+ @Test
+ public void test() {
+ assertTrue(params.isPreprocessed());
+
+ // should be false when unspecified
+ assertFalse(ControlLoopOperationParams.builder().build().isPreprocessed());
+ }
+
@Test
public void testGetRetry() {
assertSame(RETRY, params.getRetry());