package software.amazon.iot.thinggroup; import org.junit.jupiter.api.BeforeEach; import org.slf4j.LoggerFactory; import software.amazon.awssdk.awscore.AwsRequest; import software.amazon.awssdk.awscore.AwsResponse; import software.amazon.awssdk.core.ResponseBytes; import software.amazon.awssdk.core.ResponseInputStream; import software.amazon.awssdk.core.pagination.sync.SdkIterable; import software.amazon.awssdk.services.iot.IotClient; import software.amazon.cloudformation.proxy.AmazonWebServicesClientProxy; import software.amazon.cloudformation.proxy.Credentials; import software.amazon.cloudformation.proxy.LoggerProxy; import software.amazon.cloudformation.proxy.ProxyClient; import software.amazon.cloudformation.proxy.ResourceHandlerRequest; import java.time.Duration; import java.util.concurrent.CompletableFuture; import java.util.function.Function; import static org.mockito.Mockito.mock; public class AbstractTestBase { protected static final Credentials MOCK_CREDENTIALS; protected static final org.slf4j.Logger delegate; protected static final LoggerProxy LOGGER; static { System.setProperty("org.slf4j.simpleLogger.showDateTime", "true"); System.setProperty("org.slf4j.simpleLogger.dateTimeFormat", "HH:mm:ss:SSS Z"); MOCK_CREDENTIALS = new Credentials("accessKey", "secretKey", "token"); delegate = LoggerFactory.getLogger("testing"); LOGGER = new LoggerProxy(); } static ProxyClient MOCK_PROXY(final AmazonWebServicesClientProxy proxy, final IotClient iotClient) { 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 IotClient client() { return iotClient; } }; } protected AmazonWebServicesClientProxy proxy; protected ProxyClient proxyClient; protected IotClient iotClient; @BeforeEach public void setup() { proxy = new AmazonWebServicesClientProxy(LOGGER, MOCK_CREDENTIALS, () -> Duration.ofSeconds(600).toMillis()); iotClient = mock(IotClient.class); proxyClient = MOCK_PROXY(proxy, iotClient); } protected final static String TG_NAME = "thingGroupName"; protected final static String TG_PARENT_NAME = "parentThingGroupName"; protected final static String TG_ID = "thingGroupId"; protected final static String TG_ARN = "arn:aws:iot:us-east-1:1234567890:thingGroup/thingGroupId"; protected final String TG_DESCRIPTION = "Thing Group Description"; protected final static String DG_QUERYSTRING = "thingName:*"; protected final static String REQUEST_TOKEN = "REQUEST_TOKEN"; protected final static String LOGICAL_ID = "ThingGroup"; protected ResourceHandlerRequest.ResourceHandlerRequestBuilder defaultRequestBuilder(ResourceModel model) { return ResourceHandlerRequest.builder() .clientRequestToken(REQUEST_TOKEN) .logicalResourceIdentifier(LOGICAL_ID) .desiredResourceState(model) .previousResourceState(model); } }