package software.amazon.rds.dbinstance; import static org.mockito.Mockito.any; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import java.time.Duration; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import lombok.Getter; import software.amazon.awssdk.services.ec2.Ec2Client; import software.amazon.awssdk.services.rds.RdsClient; import software.amazon.awssdk.services.rds.model.DescribeDbInstancesRequest; import software.amazon.cloudformation.proxy.AmazonWebServicesClientProxy; import software.amazon.cloudformation.proxy.ProxyClient; import software.amazon.rds.test.common.core.HandlerName; @ExtendWith(MockitoExtension.class) public class ReadHandlerTest extends AbstractHandlerTest { @Mock @Getter private AmazonWebServicesClientProxy proxy; @Mock @Getter private ProxyClient rdsProxy; @Mock @Getter private ProxyClient ec2Proxy; @Mock private RdsClient rdsClient; @Mock private Ec2Client ec2Client; @Getter private ReadHandler handler; @Override public HandlerName getHandlerName() { return HandlerName.READ; } @BeforeEach public void setup() { handler = new ReadHandler(); proxy = new AmazonWebServicesClientProxy(logger, MOCK_CREDENTIALS, () -> Duration.ofSeconds(600).toMillis()); rdsClient = mock(RdsClient.class); ec2Client = mock(Ec2Client.class); rdsProxy = mockProxy(proxy, rdsClient); ec2Proxy = mockProxy(proxy, ec2Client); } @AfterEach public void tear_down() { verify(rdsClient, atLeastOnce()).serviceName(); verifyNoMoreInteractions(rdsClient); verifyNoMoreInteractions(ec2Client); verifyAccessPermissions(rdsClient); verifyAccessPermissions(ec2Client); } @Test public void handleRequest_ReadSuccess() { test_handleRequest_base( new CallbackContext(), () -> DB_INSTANCE_ACTIVE, () -> RESOURCE_MODEL_BLDR().build(), expectSuccess() ); verify(rdsProxy.client(), times(1)).describeDBInstances(any(DescribeDbInstancesRequest.class)); } }