package software.amazon.wafv2.loggingconfiguration; import java.util.concurrent.CompletableFuture; import java.util.function.Function; import java.time.Duration; import org.mockito.Mock; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import software.amazon.awssdk.awscore.AwsRequest; import software.amazon.awssdk.awscore.AwsResponse; import software.amazon.awssdk.services.wafv2.Wafv2Client; import software.amazon.awssdk.core.ResponseBytes; import software.amazon.awssdk.core.ResponseInputStream; import software.amazon.awssdk.core.pagination.sync.SdkIterable; import software.amazon.cloudformation.proxy.AmazonWebServicesClientProxy; import software.amazon.cloudformation.proxy.Credentials; import software.amazon.cloudformation.proxy.LoggerProxy; import software.amazon.cloudformation.proxy.ProxyClient; public abstract class AbstractTestBase { protected static final Credentials MOCK_CREDENTIALS; protected static final LoggerProxy logger; public abstract void setupHandler(); @Mock protected AmazonWebServicesClientProxy proxy; @Mock protected ProxyClient proxyClient; @Mock protected Wafv2Client sdkClient; @BeforeEach public void setup() { proxy = new AmazonWebServicesClientProxy(logger, MOCK_CREDENTIALS, () -> Duration.ofSeconds(600).toMillis()); sdkClient = mock(Wafv2Client.class); proxyClient = MOCK_PROXY(proxy, sdkClient); setupHandler(); } @AfterEach public void tear_down(org.junit.jupiter.api.TestInfo testInfo) { if (testInfo.getTags().contains("noSdkInteraction")) { verify(sdkClient, never()).serviceName(); } else { verify(sdkClient, atLeastOnce()).serviceName(); } verifyNoMoreInteractions(sdkClient); } static { MOCK_CREDENTIALS = new Credentials("accessKey", "secretKey", "token"); logger = new LoggerProxy(); } static ProxyClient MOCK_PROXY( final AmazonWebServicesClientProxy proxy, final Wafv2Client sdkClient) { return new ProxyClient() { @Override public ResponseT injectCredentialsAndInvokeV2(RequestT request, Function requestFunction) { return proxy.injectCredentialsAndInvokeV2(request, requestFunction); } @Override public CompletableFuture injectCredentialsAndInvokeV2Async(RequestT request, Function> requestFunction) { throw new UnsupportedOperationException(); } @Override public > IterableT injectCredentialsAndInvokeIterableV2(RequestT request, Function requestFunction) { return proxy.injectCredentialsAndInvokeIterableV2(request, requestFunction); } @Override public ResponseInputStream injectCredentialsAndInvokeV2InputStream(RequestT requestT, Function> function) { throw new UnsupportedOperationException(); } @Override public ResponseBytes injectCredentialsAndInvokeV2Bytes(RequestT requestT, Function> function) { throw new UnsupportedOperationException(); } @Override public Wafv2Client client() { return sdkClient; } }; } }