use of com.amazonaws.services.applicationautoscaling.AWSApplicationAutoScalingAsync in project titus-control-plane by Netflix.
the class AWSAppAutoScalingClientTest method deleteScalingPolicyIsIdempotent.
@Test
public void deleteScalingPolicyIsIdempotent() {
String jobId = UUID.randomUUID().toString();
String policyId = UUID.randomUUID().toString();
AWSApplicationAutoScalingAsync clientAsync = mock(AWSApplicationAutoScalingAsync.class);
AWSAppScalingConfig config = mock(AWSAppScalingConfig.class);
AWSAppAutoScalingClient autoScalingClient = new AWSAppAutoScalingClient(clientAsync, config, new NoopRegistry());
// delete happens successfully on the first attempt
AtomicBoolean isDeleted = new AtomicBoolean(false);
when(clientAsync.deleteScalingPolicyAsync(any(), any())).thenAnswer(invocation -> {
DeleteScalingPolicyRequest request = invocation.getArgument(0);
AsyncHandler<DeleteScalingPolicyRequest, DeleteScalingPolicyResult> handler = invocation.getArgument(1);
if (isDeleted.get()) {
ObjectNotFoundException notFoundException = new ObjectNotFoundException(policyId + " does not exist");
handler.onError(notFoundException);
return Future.failed(notFoundException);
}
DeleteScalingPolicyResult resultSuccess = new DeleteScalingPolicyResult();
HttpResponse successResponse = new HttpResponse(null, null);
successResponse.setStatusCode(200);
resultSuccess.setSdkHttpMetadata(SdkHttpMetadata.from(successResponse));
isDeleted.set(true);
handler.onSuccess(request, resultSuccess);
return Future.successful(resultSuccess);
});
AssertableSubscriber<Void> firstCall = autoScalingClient.deleteScalingPolicy(policyId, jobId).test();
firstCall.awaitTerminalEvent(2, TimeUnit.SECONDS);
firstCall.assertNoErrors();
firstCall.assertCompleted();
verify(clientAsync, times(1)).deleteScalingPolicyAsync(any(), any());
// second should complete fast when NotFound and not retry with exponential backoff
AssertableSubscriber<Void> secondCall = autoScalingClient.deleteScalingPolicy(policyId, jobId).test();
secondCall.awaitTerminalEvent(2, TimeUnit.SECONDS);
secondCall.assertNoErrors();
secondCall.assertCompleted();
verify(clientAsync, times(2)).deleteScalingPolicyAsync(any(), any());
}
use of com.amazonaws.services.applicationautoscaling.AWSApplicationAutoScalingAsync in project titus-control-plane by Netflix.
the class AWSAppAutoScalingClientTest method deleteScalableTargetIsIdempotent.
@Test
public void deleteScalableTargetIsIdempotent() {
String jobId = UUID.randomUUID().toString();
String policyId = UUID.randomUUID().toString();
AWSApplicationAutoScalingAsync clientAsync = mock(AWSApplicationAutoScalingAsync.class);
AWSAppScalingConfig config = mock(AWSAppScalingConfig.class);
AWSAppAutoScalingClient autoScalingClient = new AWSAppAutoScalingClient(clientAsync, config, new NoopRegistry());
AtomicBoolean isDeleted = new AtomicBoolean(false);
when(clientAsync.deregisterScalableTargetAsync(any(), any())).thenAnswer(invocation -> {
DeregisterScalableTargetRequest request = invocation.getArgument(0);
AsyncHandler<DeregisterScalableTargetRequest, DeregisterScalableTargetResult> handler = invocation.getArgument(1);
if (isDeleted.get()) {
ObjectNotFoundException notFoundException = new ObjectNotFoundException(policyId + " does not exist");
handler.onError(notFoundException);
return Future.failed(notFoundException);
}
DeregisterScalableTargetResult resultSuccess = new DeregisterScalableTargetResult();
HttpResponse successResponse = new HttpResponse(null, null);
successResponse.setStatusCode(200);
resultSuccess.setSdkHttpMetadata(SdkHttpMetadata.from(successResponse));
isDeleted.set(true);
handler.onSuccess(request, resultSuccess);
return Future.successful(resultSuccess);
});
AssertableSubscriber<Void> firstCall = autoScalingClient.deleteScalableTarget(jobId).test();
firstCall.awaitTerminalEvent(2, TimeUnit.SECONDS);
firstCall.assertNoErrors();
firstCall.assertCompleted();
verify(clientAsync, times(1)).deregisterScalableTargetAsync(any(), any());
// second should complete fast when NotFound and not retry with exponential backoff
AssertableSubscriber<Void> secondCall = autoScalingClient.deleteScalableTarget(jobId).test();
secondCall.awaitTerminalEvent(2, TimeUnit.SECONDS);
secondCall.assertNoErrors();
secondCall.assertCompleted();
verify(clientAsync, times(2)).deregisterScalableTargetAsync(any(), any());
}
Aggregations