return params.getContext().obtain(AaiGetOperation.getTenantKey(vserver), tenantParams);
}
+ @Override
+ public void generateSubRequestId(int attempt) {
+ setSubRequestId(String.valueOf(attempt));
+ }
+
@Override
protected CompletableFuture<OperationOutcome> startOperationAsync(int attempt, OperationOutcome outcome) {
outcome.setSubRequestId(String.valueOf(attempt));
}
@Override
- protected CompletableFuture<OperationOutcome> startOperationAsync(int attempt, OperationOutcome outcome) {
- outcome.setSubRequestId(String.valueOf(attempt));
+ public void generateSubRequestId(int attempt) {
+ setSubRequestId(String.valueOf(attempt));
+ }
+ @Override
+ protected CompletableFuture<OperationOutcome> startOperationAsync(int attempt, OperationOutcome outcome) {
Map<String, Object> headers = makeHeaders();
headers.put("Accept", MediaType.APPLICATION_JSON);
.withMessage("missing " + AaiCustomQueryOperation.VSERVER_VSERVER_NAME + " in enrichment data");
}
+ @Test
+ public void testGenerateSubRequestId() {
+ oper.generateSubRequestId(3);
+ assertEquals("3", oper.getSubRequestId());
+ }
+
@Test
@SuppressWarnings("unchecked")
public void testStartOperationAsync_testStartPreprocessorAsync_testMakeRequest_testPostProcess() throws Exception {
assertEquals(10, oper.getRetry(10));
}
+ @Test
+ public void testGenerateSubRequestId() {
+ oper.generateSubRequestId(3);
+ assertEquals("3", oper.getSubRequestId());
+ }
+
@Test
@SuppressWarnings("unchecked")
public void testStartOperationAsync_testStartQueryAsync_testPostProcessResponse() throws Exception {
when(webAsync.get(any(InvocationCallback.class))).thenAnswer(provideResponse(rawResponse));
+ oper.generateSubRequestId(1);
+ outcome.setSubRequestId(oper.getSubRequestId());
+
CompletableFuture<OperationOutcome> future2 = oper.startOperationAsync(1, outcome);
assertFalse(future2.isDone());
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
-import java.util.UUID;
import java.util.concurrent.CompletableFuture;
-import org.apache.commons.lang3.tuple.Pair;
import org.onap.policy.appc.CommonHeader;
import org.onap.policy.appc.Request;
import org.onap.policy.appc.Response;
* @param targetVnf target VNF
* @return a new request
*/
- protected Pair<String, Request> makeRequest(int attempt, String targetVnf) {
+ protected Request makeRequest(int attempt, String targetVnf) {
Request request = new Request();
request.setCommonHeader(new CommonHeader());
request.getCommonHeader().setRequestId(params.getRequestId());
-
- // TODO ok to use UUID, or does it have to be the "attempt"?
- final String subreq = UUID.randomUUID().toString();
- request.getCommonHeader().setSubRequestId(subreq);
+ request.getCommonHeader().setSubRequestId(getSubRequestId());
request.setAction(getName());
// add/replace specific values
request.getPayload().put(VNF_ID_KEY, targetVnf);
- return Pair.of(subreq, request);
+ return request;
}
/**
*/
@Override
protected List<String> getExpectedKeyValues(int attempt, Request request) {
- return List.of(request.getCommonHeader().getSubRequestId());
+ return List.of(getSubRequestId());
}
@Override
package org.onap.policy.controlloop.actor.appc;
import java.util.concurrent.CompletableFuture;
-import org.apache.commons.lang3.tuple.Pair;
import org.onap.aai.domain.yang.GenericVnf;
import org.onap.policy.aai.AaiConstants;
import org.onap.policy.aai.AaiCqResponse;
}
@Override
- protected Pair<String, Request> makeRequest(int attempt) {
+ protected Request makeRequest(int attempt) {
AaiCqResponse cq = params.getContext().getProperty(AaiCqResponse.CONTEXT_KEY);
GenericVnf genvnf = cq.getGenericVnfByModelInvariantId(params.getTarget().getResourceID());
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import java.util.Arrays;
import java.util.Map;
import java.util.TreeMap;
-import org.apache.commons.lang3.tuple.Pair;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.onap.policy.appc.ResponseCode;
import org.onap.policy.appc.ResponseStatus;
import org.onap.policy.controlloop.actorserviceprovider.impl.BidirectionalTopicOperation.Status;
+import org.onap.policy.controlloop.actorserviceprovider.parameters.BidirectionalTopicConfig;
+import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
import org.onap.policy.controlloop.policy.PolicyResult;
public class AppcOperationTest extends BasicAppcOperation {
public void setUp() throws Exception {
super.setUp();
- oper = new AppcOperation(params, config) {
- @Override
- protected Pair<String, Request> makeRequest(int attempt) {
- return oper.makeRequest(attempt, MY_VNF);
- }
- };
+ oper = new MyOper(params, config);
}
@After
@Test
public void testMakeRequest() {
- Pair<String, Request> result = oper.makeRequest(2, MY_VNF);
- String subreq = result.getLeft();
+ oper.generateSubRequestId(2);
+ String subreq = oper.getSubRequestId();
assertNotNull(subreq);
- Request request = result.getRight();
+ Request request = oper.makeRequest(2, MY_VNF);
assertEquals(DEFAULT_OPERATION, request.getAction());
assertNotNull(request.getPayload());
assertEquals(subreq, header.getSubRequestId());
- // a subsequent request should have a different sub-request id
- result = oper.makeRequest(2, MY_VNF);
- assertNotEquals(subreq, result.getLeft());
-
- assertNotNull(result.getLeft());
- assertEquals(result.getLeft(), result.getRight().getCommonHeader().getSubRequestId());
+ request = oper.makeRequest(2, MY_VNF);
+ assertEquals(subreq, request.getCommonHeader().getSubRequestId());
// repeat using a null payload
params = params.toBuilder().payload(null).build();
- oper = new AppcOperation(params, config) {
- @Override
- protected Pair<String, Request> makeRequest(int attempt) {
- return oper.makeRequest(attempt, MY_VNF);
- }
- };
- assertEquals(Map.of(AppcOperation.VNF_ID_KEY, MY_VNF), oper.makeRequest(2, MY_VNF).getRight().getPayload());
+ oper = new MyOper(params, config);
+ assertEquals(Map.of(AppcOperation.VNF_ID_KEY, MY_VNF), oper.makeRequest(2, MY_VNF).getPayload());
}
@Test
public void testConvertPayload() {
- Request request = oper.makeRequest(2, MY_VNF).getRight();
+ Request request = oper.makeRequest(2, MY_VNF);
// @formatter:off
assertEquals(
params = params.toBuilder().payload(payload).build();
- oper = new AppcOperation(params, config) {
- @Override
- protected Pair<String, Request> makeRequest(int attempt) {
- return oper.makeRequest(attempt, MY_VNF);
- }
- };
- request = oper.makeRequest(2, MY_VNF).getRight();
+ oper = new MyOper(params, config);
+ request = oper.makeRequest(2, MY_VNF);
// @formatter:off
assertEquals(
payload.put(KEY3, "def");
params = params.toBuilder().payload(payload).build();
- oper = new AppcOperation(params, config) {
- @Override
- protected Pair<String, Request> makeRequest(int attempt) {
- return oper.makeRequest(attempt, MY_VNF);
- }
- };
- request = oper.makeRequest(2, MY_VNF).getRight();
+ oper = new MyOper(params, config);
+ request = oper.makeRequest(2, MY_VNF);
payload.put(AppcOperation.VNF_ID_KEY, MY_VNF);
payload.put(KEY1, "abc");
@Test
public void testGetExpectedKeyValues() {
- Request request = oper.makeRequest(2, MY_VNF).getRight();
+ oper.generateSubRequestId(2);
+ Request request = oper.makeRequest(2, MY_VNF);
assertEquals(Arrays.asList(request.getCommonHeader().getSubRequestId()),
oper.getExpectedKeyValues(50, request));
}
assertEquals(MY_DESCRIPTION, outcome.getMessage());
}
}
+
+ private static class MyOper extends AppcOperation {
+
+ public MyOper(ControlLoopOperationParams params, BidirectionalTopicConfig config) {
+ super(params, config);
+ }
+
+ @Override
+ protected Request makeRequest(int attempt) {
+ return makeRequest(attempt, MY_VNF);
+ }
+ }
}
import java.util.Arrays;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicBoolean;
-import org.apache.commons.lang3.tuple.Pair;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
genvnf.setModelInvariantId(RESOURCE_ID);
cq.setInventoryResponseItems(Arrays.asList(genvnf));
- Pair<String, Request> result = oper.makeRequest(2);
- assertNotNull(result.getLeft());
-
- Request request = result.getRight();
+ oper.generateSubRequestId(2);
+ Request request = oper.makeRequest(2);
assertNotNull(request);
assertEquals(MY_VNF, request.getPayload().get(ModifyConfigOperation.VNF_ID_KEY));
import java.util.List;
import java.util.Map;
-import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.tuple.Pair;
import org.onap.policy.appclcm.AppcLcmBody;
import org.onap.policy.appclcm.AppcLcmCommonHeader;
import org.onap.policy.appclcm.AppcLcmDmaapWrapper;
}
@Override
- protected Pair<String, AppcLcmDmaapWrapper> makeRequest(int attempt) {
+ protected AppcLcmDmaapWrapper makeRequest(int attempt) {
VirtualControlLoopEvent onset = params.getContext().getEvent();
- String subRequestId = UUID.randomUUID().toString();
+ String subRequestId = getSubRequestId();
AppcLcmCommonHeader header = new AppcLcmCommonHeader();
header.setOriginatorId(onset.getRequestId().toString());
body.setInput(inputRequest);
dmaapRequest.setBody(body);
- return Pair.of(subRequestId, dmaapRequest);
+ return dmaapRequest;
}
/**
*/
@Override
protected List<String> getExpectedKeyValues(int attempt, AppcLcmDmaapWrapper request) {
- return List.of(request.getBody().getInput().getCommonHeader().getSubRequestId());
+ return List.of(getSubRequestId());
}
@Override
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors;
-import org.apache.commons.lang3.tuple.Pair;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
@Test
public void testMakeRequest() {
- Pair<String, AppcLcmDmaapWrapper> result = oper.makeRequest(2);
- String subreq = result.getLeft();
+ oper.generateSubRequestId(2);
+ String subreq = oper.getSubRequestId();
assertNotNull(subreq);
- AppcLcmDmaapWrapper request = result.getRight();
+ AppcLcmDmaapWrapper request = oper.makeRequest(2);
assertEquals("DefaultOperation", request.getBody().getInput().getAction());
AppcLcmCommonHeader header = request.getBody().getInput().getCommonHeader();
assertEquals("{vnf-id=my-target}", request.getBody().getInput().getActionIdentifiers().toString());
- // a subsequent request should have a different sub-request id
- result = oper.makeRequest(2);
- assertNotEquals(subreq, result.getLeft());
- assertNotNull(result.getLeft());
- assertEquals(result.getLeft(), result.getRight().getBody().getInput().getCommonHeader().getSubRequestId());
+ request = oper.makeRequest(2);
+ assertEquals(subreq, request.getBody().getInput().getCommonHeader().getSubRequestId());
}
@Test
params = params.toBuilder().operation(AppcLcmConstants.OPERATION_CONFIG_MODIFY).build();
oper = new AppcLcmOperation(params, config);
- AppcLcmDmaapWrapper req = oper.makeRequest(2).getRight();
+ oper.generateSubRequestId(2);
+ AppcLcmDmaapWrapper req = oper.makeRequest(2);
assertEquals("{\"key-A\":\"value-A\"}", req.getBody().getInput().getPayload());
// coder exception
}
};
+ oper.generateSubRequestId(2);
+
assertThatIllegalArgumentException().isThrownBy(() -> oper.makeRequest(2))
.withMessage("Cannot convert payload");
}
@Test
public void testGetExpectedKeyValues() {
- AppcLcmDmaapWrapper request = oper.makeRequest(2).getRight();
+ oper.generateSubRequestId(2);
+ AppcLcmDmaapWrapper request = oper.makeRequest(2);
assertEquals(Arrays.asList(request.getBody().getInput().getCommonHeader().getSubRequestId()),
oper.getExpectedKeyValues(50, request));
}
return allOf(() -> params.getContext().obtain(AaiCqResponse.CONTEXT_KEY, cqParams), this::startGuardAsync);
}
+ @Override
+ public void generateSubRequestId(int attempt) {
+ setSubRequestId("0");
+ }
+
/**
* {@inheritDoc}.
*/
// Build CDS gRPC request common-header
CommonHeader commonHeader = CommonHeader.newBuilder().setOriginatorId(CdsActorConstants.ORIGINATOR_ID)
.setRequestId(params.getContext().getEvent().getRequestId().toString())
- .setSubRequestId(Integer.toString(0)).build();
+ .setSubRequestId(getSubRequestId()).build();
// Build CDS gRPC request action-identifier
ActionIdentifiers actionIdentifiers =
assertEquals(1000, operation.getTimeoutMs(null));
assertEquals(1000, operation.getTimeoutMs(0));
assertEquals(2000, operation.getTimeoutMs(2));
+ operation.generateSubRequestId(1);
CompletableFuture<OperationOutcome> future3 = operation.startOperationAsync(1, params.makeOutcome());
assertNotNull(future3);
}
package org.onap.policy.controlloop.actor.guard;
import java.util.Map;
-import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import javax.ws.rs.client.Entity;
@Override
protected CompletableFuture<OperationOutcome> startOperationAsync(int attempt, OperationOutcome outcome) {
- outcome.setSubRequestId(String.valueOf(attempt));
-
DecisionRequest request = makeRequest();
Entity<DecisionRequest> entity = Entity.entity(request, MediaType.APPLICATION_JSON);
}
DecisionRequest req = config.makeRequest();
- req.setRequestId(UUID.randomUUID().toString());
+ req.setRequestId(getSubRequestId());
req.setResource(Map.of("guard", params.getPayload()));
return req;
assertEquals(PolicyResult.SUCCESS, future2.get().getResult());
- assertEquals("1", future2.get().getSubRequestId());
+ assertNotNull(oper.getSubRequestId());
+ assertEquals(oper.getSubRequestId(), future2.get().getSubRequestId());
}
/**
@Test
public void testMakeRequest() throws CoderException {
+ oper.generateSubRequestId(2);
+
verifyPayload("makeReqStd.json", makePayload());
verifyPayload("makeReqDefault.json", new TreeMap<>());
package org.onap.policy.controlloop.actor.sdnc;
-import java.util.UUID;
import org.apache.commons.lang3.StringUtils;
import org.onap.policy.controlloop.actorserviceprovider.controlloop.ControlLoopEventContext;
import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
SdncHealRequestHeaderInfo headerInfo = new SdncHealRequestHeaderInfo();
headerInfo.setSvcAction("update");
- headerInfo.setSvcRequestId(UUID.randomUUID().toString());
+ headerInfo.setSvcRequestId(getSubRequestId());
SdncRequest request = new SdncRequest();
request.setNsInstanceId(serviceInstance);
package org.onap.policy.controlloop.actor.sdnc;
-import java.util.UUID;
import org.apache.commons.lang3.StringUtils;
import org.onap.policy.controlloop.actorserviceprovider.controlloop.ControlLoopEventContext;
import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
SdncHealRequestHeaderInfo headerInfo = new SdncHealRequestHeaderInfo();
headerInfo.setSvcAction("reoptimize");
- headerInfo.setSvcRequestId(UUID.randomUUID().toString());
+ headerInfo.setSvcRequestId(getSubRequestId());
SdncRequest request = new SdncRequest();
request.setNsInstanceId(serviceInstance);
protected CompletableFuture<OperationOutcome> startOperationAsync(int attempt, OperationOutcome outcome) {
SdncRequest request = makeRequest(attempt);
- outcome.setSubRequestId(request.getHealRequest().getRequestHeaderInfo().getSvcRequestId());
-
Entity<SdncRequest> entity = Entity.entity(request, MediaType.APPLICATION_JSON);
Map<String, Object> headers = makeHeaders();
package org.onap.policy.controlloop.actor.sdnc;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
import java.util.Map;
import org.junit.AfterClass;
@Test
public void testMakeRequest() throws Exception {
+ oper.generateSubRequestId(1);
SdncRequest request = oper.makeRequest(1);
assertEquals("my-service", request.getNsInstanceId());
assertEquals(REQ_ID, request.getRequestId());
assertEquals("/my-path/", request.getUrl());
- assertNotNull(request.getHealRequest().getRequestHeaderInfo().getSvcRequestId());
+ assertEquals(oper.getSubRequestId(), request.getHealRequest().getRequestHeaderInfo().getSvcRequestId());
verifyRequest("bod.json", request, IGNORE_FIELDS);
package org.onap.policy.controlloop.actor.sdnc;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
import java.util.Map;
import org.junit.AfterClass;
@Test
public void testMakeRequest() throws Exception {
+ oper.generateSubRequestId(1);
SdncRequest request = oper.makeRequest(1);
assertEquals("my-service", request.getNsInstanceId());
assertEquals(REQ_ID, request.getRequestId());
assertEquals("/my-path/", request.getUrl());
- assertNotNull(request.getHealRequest().getRequestHeaderInfo().getSvcRequestId());
+ assertEquals(oper.getSubRequestId(), request.getHealRequest().getRequestHeaderInfo().getSvcRequestId());
verifyRequest("reroute.json", request, IGNORE_FIELDS);
package org.onap.policy.controlloop.actor.sdnr;
-import org.apache.commons.lang3.tuple.Pair;
import org.onap.policy.controlloop.actorserviceprovider.parameters.BidirectionalTopicConfig;
import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
import org.onap.policy.sdnr.PciMessage;
}
@Override
- protected Pair<String, PciMessage> makeRequest(int attempt) {
- final Pair<String, PciMessage> req = super.makeRequest(attempt);
- final PciMessage request = req.getRight();
+ protected PciMessage makeRequest(int attempt) {
+ final PciMessage request = super.makeRequest(attempt);
//
// Set the recipe and action information
//
request.setRpcName(NAME.toLowerCase());
request.getBody().getInput().setAction(NAME);
- return req;
+ return request;
}
}
package org.onap.policy.controlloop.actor.sdnr;
import java.util.List;
-import java.util.UUID;
import java.util.concurrent.CompletableFuture;
-import org.apache.commons.lang3.tuple.Pair;
import org.onap.policy.controlloop.VirtualControlLoopEvent;
import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
import org.onap.policy.controlloop.actorserviceprovider.impl.BidirectionalTopicOperation;
*/
@Override
protected List<String> getExpectedKeyValues(int attempt, PciMessage request) {
- return List.of(request.getBody().getInput().getCommonHeader().getSubRequestId());
+ return List.of(getSubRequestId());
}
@Override
}
@Override
- protected Pair<String, PciMessage> makeRequest(int attempt) {
+ protected PciMessage makeRequest(int attempt) {
VirtualControlLoopEvent onset = params.getContext().getEvent();
- String subRequestId = UUID.randomUUID().toString();
+ String subRequestId = getSubRequestId();
/* Construct an SDNR request using pci Model */
logger.info("SDNR Request to be sent is {}", dmaapRequest);
/* Return the request to be sent through dmaap. */
- return Pair.of(subRequestId, dmaapRequest);
+ return dmaapRequest;
}
}
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicBoolean;
-import org.apache.commons.lang3.tuple.Pair;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
@Test
public void testMakeRequest() throws CoderException {
- Pair<String, PciMessage> result = oper.makeRequest(1);
- assertNotNull(result.getLeft());
- assertNotNull(result.getRight());
+ oper.generateSubRequestId(1);
+
+ PciMessage request = oper.makeRequest(1);
+ assertNotNull(request);
}
}
import static org.junit.Assert.assertSame;
import java.util.Arrays;
-import org.apache.commons.lang3.tuple.Pair;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
@Test
public void testMakeRequest() {
- Pair<String, PciMessage> result = operation.makeRequest(1);
- assertNotNull(result.getLeft());
+ operation.generateSubRequestId(1);
- PciMessage request = result.getRight();
+ PciMessage request = operation.makeRequest(1);
assertNotNull(request.getBody());
assertEquals("1.0", request.getVersion());
@Test
public void testGetExpectedKeyValues() {
- PciMessage request = operation.makeRequest(1).getRight();
+ operation.generateSubRequestId(1);
+
+ PciMessage request = operation.makeRequest(1);
assertEquals(Arrays.asList(request.getBody().getInput().getCommonHeader().getSubRequestId()),
operation.getExpectedKeyValues(50, request));
}
if (rawResponse.getStatus() == 200) {
String requestState = getRequestState(response);
if (COMPLETE.equalsIgnoreCase(requestState)) {
- populateSubRequestId(outcome, response);
+ extractSubRequestId(response);
successfulCompletion();
return CompletableFuture
.completedFuture(setOutcome(outcome, PolicyResult.SUCCESS, rawResponse, response));
}
if (FAILED.equalsIgnoreCase(requestState)) {
- populateSubRequestId(outcome, response);
+ extractSubRequestId(response);
return CompletableFuture
.completedFuture(setOutcome(outcome, PolicyResult.FAILURE, rawResponse, response));
}
// still incomplete
// need a request ID with which to query
- if (!populateSubRequestId(outcome, response)) {
+ if (!extractSubRequestId(response)) {
throw new IllegalArgumentException("missing request ID in response");
}
return sleep(getWaitMsGet(), TimeUnit.MILLISECONDS).thenComposeAsync(doGet);
}
- private boolean populateSubRequestId(OperationOutcome outcome, SoResponse response) {
+ @Override
+ public void generateSubRequestId(int attempt) {
+ setSubRequestId(null);
+ }
+
+ private boolean extractSubRequestId(SoResponse response) {
if (response == null || response.getRequestReferences() == null
|| response.getRequestReferences().getRequestId() == null) {
return false;
}
- outcome.setSubRequestId(response.getRequestReferences().getRequestId());
+ setSubRequestId(response.getRequestReferences().getRequestId());
return true;
}
@Test
public void testPostProcess() throws Exception {
// completed
- outcome.setSubRequestId(null);
+ oper.generateSubRequestId(2);
+ assertNull(oper.getSubRequestId());
CompletableFuture<OperationOutcome> future2 = oper.postProcessResponse(outcome, PATH, rawResponse, response);
assertTrue(future2.isDone());
assertSame(outcome, future2.get());
assertEquals(PolicyResult.SUCCESS, outcome.getResult());
- assertNotNull(outcome.getSubRequestId());
+ assertNotNull(oper.getSubRequestId());
// failed
- outcome.setSubRequestId(null);
+ oper.generateSubRequestId(2);
+ assertNull(oper.getSubRequestId());
response.getRequest().getRequestStatus().setRequestState(SoOperation.FAILED);
future2 = oper.postProcessResponse(outcome, PATH, rawResponse, response);
assertTrue(future2.isDone());
assertSame(outcome, future2.get());
assertEquals(PolicyResult.FAILURE, outcome.getResult());
- assertNotNull(outcome.getSubRequestId());
+ assertNotNull(oper.getSubRequestId());
// no request id in the response
response.getRequestReferences().setRequestId(null);
import java.util.concurrent.Executor;
import java.util.function.BiConsumer;
import lombok.Getter;
-import org.apache.commons.lang3.tuple.Pair;
import org.onap.policy.common.endpoints.utils.NetLoggerUtil.EventType;
import org.onap.policy.common.utils.coder.CoderException;
import org.onap.policy.common.utils.coder.StandardCoderObject;
@Override
protected CompletableFuture<OperationOutcome> startOperationAsync(int attempt, OperationOutcome outcome) {
- final Pair<String, Q> pair = makeRequest(attempt);
- final Q request = pair.getRight();
- outcome.setSubRequestId(pair.getLeft());
-
+ final Q request = makeRequest(attempt);
final List<String> expectedKeyValues = getExpectedKeyValues(attempt, request);
final PipelineControllerFuture<OperationOutcome> controller = new PipelineControllerFuture<>();
* Makes the request.
*
* @param attempt operation attempt
- * @return a pair containing sub request ID, which may be {@code null} and the new
- * request
+ * @return a new request
*/
- protected abstract Pair<String, Q> makeRequest(int attempt);
+ protected abstract Q makeRequest(int attempt);
/**
* Gets values, expected in the response, that should match the selector keys.
import java.util.List;
import java.util.Map;
import java.util.Queue;
+import java.util.UUID;
import java.util.concurrent.CancellationException;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionException;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.function.UnaryOperator;
+import lombok.AccessLevel;
import lombok.Getter;
+import lombok.Setter;
import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
import org.onap.policy.common.endpoints.utils.NetLoggerUtil;
import org.onap.policy.common.endpoints.utils.NetLoggerUtil.EventType;
@Getter
private final String fullName;
+ @Getter
+ @Setter(AccessLevel.PROTECTED)
+ private String subRequestId;
+
/**
* Constructs the object.
private CompletableFuture<OperationOutcome> startOperationAttempt(
PipelineControllerFuture<OperationOutcome> controller, int attempt) {
+ generateSubRequestId(attempt);
+
// propagate "stop" to the operation attempt
controller.wrap(startAttemptWithoutRetries(attempt)).thenCompose(retryOnFailure(controller, attempt))
.whenCompleteAsync(controller.delayedComplete(), params.getExecutor());
return controller;
}
+ /**
+ * Generates and sets {@link #subRequestId} to a new subrequest ID.
+ * @param attempt attempt number, typically starting with 1
+ */
+ public void generateSubRequestId(int attempt) {
+ // Note: this should be "protected", but that makes junits much messier
+
+ setSubRequestId(UUID.randomUUID().toString());
+ }
+
/**
* Starts the operation attempt, without doing any retries.
*
return (outcome, thrown) -> {
if (callbacks.canStart()) {
+ outcome.setSubRequestId(getSubRequestId());
outcome.setStart(callbacks.getStartTime());
outcome.setEnd(null);
return (outcome, thrown) -> {
if (callbacks.canEnd()) {
+ outcome.setSubRequestId(getSubRequestId());
outcome.setStart(callbacks.getStartTime());
outcome.setEnd(callbacks.getEndTime());
import java.util.function.BiConsumer;
import lombok.Getter;
import lombok.Setter;
-import org.apache.commons.lang3.tuple.Pair;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
private static final String OPERATION = "my-operation";
private static final String REQ_ID = "my-request-id";
private static final String TEXT = "some text";
- private static final String SUB_REQID = "my-sub-request-id";
private static final int TIMEOUT_SEC = 10;
private static final long TIMEOUT_MS = 1000 * TIMEOUT_SEC;
private static final int MAX_REQUESTS = 100;
CompletableFuture<OperationOutcome> future = oper.startOperationAsync(1, outcome);
assertFalse(future.isDone());
- assertEquals(SUB_REQID, outcome.getSubRequestId());
-
verify(forwarder).register(eq(Arrays.asList(REQ_ID)), listenerCaptor.capture());
verify(forwarder, never()).unregister(any(), any());
CompletableFuture<OperationOutcome> future = oper.startOperationAsync(1, outcome);
assertFalse(future.isDone());
- assertEquals(SUB_REQID, outcome.getSubRequestId());
-
verify(forwarder).register(eq(Arrays.asList(REQ_ID)), listenerCaptor.capture());
verify(forwarder, never()).unregister(any(), any());
}
@Override
- protected Pair<String, String> makeRequest(int attempt) {
- return Pair.of(SUB_REQID, TEXT);
+ protected String makeRequest(int attempt) {
+ return TEXT;
}
@Override
}
@Override
- protected Pair<String, MyRequest> makeRequest(int attempt) {
- return Pair.of(SUB_REQID, new MyRequest());
+ protected MyRequest makeRequest(int attempt) {
+ return new MyRequest();
}
@Override
}
@Override
- protected Pair<String, MyRequest> makeRequest(int attempt) {
- return Pair.of(SUB_REQID, new MyRequest());
+ protected MyRequest makeRequest(int attempt) {
+ return new MyRequest();
}
@Override
}
};
- verifyRun("testSetRetryFlag_testRetryOnFailure_NullOutcome", 1, 1, PolicyResult.FAILURE, null, noop());
+ verifyRun("testSetRetryFlag_testRetryOnFailure_NullOutcome", 1, 1, PolicyResult.FAILURE, noop());
}
@Test
private void verifyRun(String testName, int expectedCallbacks, int expectedOperations,
PolicyResult expectedResult) {
- String expectedSubRequestId =
- (expectedResult == PolicyResult.FAILURE_EXCEPTION ? null : String.valueOf(expectedOperations));
-
- verifyRun(testName, expectedCallbacks, expectedOperations, expectedResult, expectedSubRequestId, noop());
+ verifyRun(testName, expectedCallbacks, expectedOperations, expectedResult, noop());
}
/**
* @param expectedCallbacks number of callbacks expected
* @param expectedOperations number of operation invocations expected
* @param expectedResult expected outcome
- * @param expectedSubRequestId expected sub request ID
* @param manipulator function to modify the future returned by
* {@link OperationPartial#start(ControlLoopOperationParams)} before the tasks
* in the executor are run
*/
private void verifyRun(String testName, int expectedCallbacks, int expectedOperations, PolicyResult expectedResult,
- String expectedSubRequestId, Consumer<CompletableFuture<OperationOutcome>> manipulator) {
+ Consumer<CompletableFuture<OperationOutcome>> manipulator) {
tstart = null;
opstart = null;
}
if (expectedOperations > 0) {
- assertEquals(testName, expectedSubRequestId, opend.getSubRequestId());
+ assertNotNull(testName, oper.getSubRequestId());
+ assertEquals(testName + " op start", oper.getSubRequestId(), opstart.getSubRequestId());
+ assertEquals(testName + " op end", oper.getSubRequestId(), opend.getSubRequestId());
}
}