* ============LICENSE_START=======================================================
* ONAP
* ================================================================================
- * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2020-2021 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2024 Nordix Foundation.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
package org.onap.policy.controlloop.actor.test;
import static org.junit.Assert.assertEquals;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.when;
+import jakarta.ws.rs.core.Response;
import java.util.Map;
-import java.util.TreeMap;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
-import javax.ws.rs.core.Response;
+import java.util.concurrent.Executor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import org.onap.policy.aai.AaiConstants;
-import org.onap.policy.aai.AaiCqResponse;
import org.onap.policy.common.utils.coder.Coder;
import org.onap.policy.common.utils.coder.CoderException;
import org.onap.policy.common.utils.coder.StandardCoder;
import org.onap.policy.common.utils.resources.ResourceUtils;
import org.onap.policy.common.utils.time.PseudoExecutor;
-import org.onap.policy.controlloop.VirtualControlLoopEvent;
import org.onap.policy.controlloop.actorserviceprovider.ActorService;
-import org.onap.policy.controlloop.actorserviceprovider.Operation;
import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
-import org.onap.policy.controlloop.actorserviceprovider.Operator;
-import org.onap.policy.controlloop.actorserviceprovider.controlloop.ControlLoopEventContext;
-import org.onap.policy.controlloop.actorserviceprovider.impl.OperationPartial;
import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
-import org.onap.policy.controlloop.actorserviceprovider.spi.Actor;
-import org.onap.policy.controlloop.policy.PolicyResult;
/**
* Superclass for various Operation tests.
*/
public class BasicOperation {
- protected static final Coder coder = new StandardCoder();
protected static final UUID REQ_ID = UUID.randomUUID();
- protected static final String DEFAULT_ACTOR = "default-actor";
- protected static final String DEFAULT_OPERATION = "default-operation";
+ protected static final String SUB_REQ_ID = "my-sub-request-id";
+ protected static final String DEFAULT_ACTOR = "default-Actor";
+ protected static final String DEFAULT_OPERATION = "default-Operation";
protected static final String TARGET_ENTITY = "my-target";
+ protected static final Executor blockingExecutor = command -> {
+ var thread = new Thread(command);
+ thread.setDaemon(true);
+ thread.start();
+ };
+
protected final String actorName;
protected final String operationName;
+ protected Coder coder = new StandardCoder();
@Mock
protected ActorService service;
- @Mock
- protected Actor guardActor;
- @Mock
- protected Operator guardOperator;
- @Mock
- protected Operation guardOperation;
- @Mock
- protected Actor cqActor;
- @Mock
- protected Operator cqOperator;
- @Mock
- protected Operation cqOperation;
- @Mock
- protected AaiCqResponse cqResponse;
- protected CompletableFuture<OperationOutcome> cqFuture;
protected CompletableFuture<Response> future;
protected ControlLoopOperationParams params;
- protected Map<String, String> enrichment;
- protected VirtualControlLoopEvent event;
- protected ControlLoopEventContext context;
protected OperationOutcome outcome;
protected PseudoExecutor executor;
+ protected AutoCloseable closeable;
+
/**
* Constructs the object using a default actor and operation name.
*/
* Initializes mocks and sets up.
*/
public void setUpBasic() {
- MockitoAnnotations.initMocks(this);
+ closeable = MockitoAnnotations.openMocks(this);
- cqFuture = new CompletableFuture<>();
future = new CompletableFuture<>();
executor = new PseudoExecutor();
makeContext();
- when(service.getActor(OperationPartial.GUARD_ACTOR_NAME)).thenReturn(guardActor);
- when(guardActor.getOperator(OperationPartial.GUARD_OPERATION_NAME)).thenReturn(guardOperator);
- when(guardOperator.buildOperation(any())).thenReturn(guardOperation);
-
- outcome = params.makeOutcome();
- outcome.setResult(PolicyResult.SUCCESS);
- when(guardOperation.start()).thenReturn(CompletableFuture.completedFuture(outcome));
-
- when(service.getActor(AaiConstants.ACTOR_NAME)).thenReturn(cqActor);
- when(cqActor.getOperator("CustomQuery")).thenReturn(cqOperator);
- when(cqOperator.buildOperation(any())).thenReturn(cqOperation);
-
- when(cqOperation.start()).thenReturn(cqFuture);
-
// get a fresh outcome
outcome = params.makeOutcome();
}
/**
- * Reinitializes {@link #enrichment}, {@link #event}, {@link #context}, and
- * {@link #params}.
+ * Reinitializes {@link #params}.
* <p/>
* Note: {@link #params} is configured to use {@link #executor}.
*/
protected void makeContext() {
- enrichment = new TreeMap<>(makeEnrichment());
-
- event = new VirtualControlLoopEvent();
- event.setRequestId(REQ_ID);
- event.setAai(enrichment);
-
- context = new ControlLoopEventContext(event);
-
- params = ControlLoopOperationParams.builder().executor(executor).context(context).actorService(service)
- .actor(actorName).operation(operationName).targetEntity(TARGET_ENTITY).payload(makePayload())
+ params = ControlLoopOperationParams.builder().executor(executor).requestId(REQ_ID).actorService(service)
+ .actor(actorName).operation(operationName).payload(makePayload())
.build();
}
- /**
- * Makes enrichment data.
- *
- * @return enrichment data
- */
- protected Map<String, String> makeEnrichment() {
- return new TreeMap<>();
- }
-
/**
* Makes payload data.
*/
protected <R> void verifyRequest(String expectedJsonFile, R request, String... ignore) throws CoderException {
String json = coder.encode(request, true);
- String expected = ResourceUtils.getResourceAsString(expectedJsonFile);
+ var expected = ResourceUtils.getResourceAsString(expectedJsonFile);
// strip various items, because they change for each request
for (String stripper : ignore) {
assertEquals(expected, json);
}
-
- /**
- * Provides a response to a custom query.
- *
- * @param cq response to provide
- */
- protected void provideCqResponse(AaiCqResponse cq) {
- context.setProperty(AaiCqResponse.CONTEXT_KEY, cq);
- OperationOutcome outcome2 = params.makeOutcome();
- outcome2.setResult(PolicyResult.SUCCESS);
- cqFuture.complete(outcome2);
- }
}