Java源码示例:com.amazonaws.services.rds.model.DescribeDBInstancesRequest
示例1
/**
* Calls DescribeDBInstances on the AWS RDS Client returning all DB Instances that match the supplied predicate and attempting
* to push down certain predicates (namely queries for specific DB Instance) to EC2.
*
* @See TableProvider
*/
@Override
public void readWithConstraint(BlockSpiller spiller, ReadRecordsRequest recordsRequest, QueryStatusChecker queryStatusChecker)
{
boolean done = false;
DescribeDBInstancesRequest request = new DescribeDBInstancesRequest();
ValueSet idConstraint = recordsRequest.getConstraints().getSummary().get("instance_id");
if (idConstraint != null && idConstraint.isSingleValue()) {
request.setDBInstanceIdentifier(idConstraint.getSingleValue().toString());
}
while (!done) {
DescribeDBInstancesResult response = rds.describeDBInstances(request);
for (DBInstance instance : response.getDBInstances()) {
instanceToRow(instance, spiller);
}
request.setMarker(response.getMarker());
if (response.getMarker() == null || !queryStatusChecker.isQueryRunning()) {
done = true;
}
}
}
示例2
@Override
protected void setUpRead()
{
final AtomicLong requestCount = new AtomicLong(0);
when(mockRds.describeDBInstances(any(DescribeDBInstancesRequest.class)))
.thenAnswer((InvocationOnMock invocation) -> {
DescribeDBInstancesResult mockResult = mock(DescribeDBInstancesResult.class);
List<DBInstance> values = new ArrayList<>();
values.add(makeValue(getIdValue()));
values.add(makeValue(getIdValue()));
values.add(makeValue("fake-id"));
when(mockResult.getDBInstances()).thenReturn(values);
if (requestCount.incrementAndGet() < 3) {
when(mockResult.getMarker()).thenReturn(String.valueOf(requestCount.get()));
}
return mockResult;
});
}
示例3
private void describe(String dbInstanceIdentifier) throws Exception {
while (true) {
DescribeDBInstancesRequest request = new DescribeDBInstancesRequest()
.withDBInstanceIdentifier(dbInstanceIdentifier);
DescribeDBInstancesResult response = client.describeDBInstances(request);
DBInstance dbInstance = response.getDBInstances().get(0);
if (!dbInstance.getDBInstanceStatus().equalsIgnoreCase("creating")) {
System.out.println("Done! " + response);
System.out.println(dbInstance.getEndpoint().getAddress());
System.out.println(dbInstance.getEndpoint().getPort());
break;
}
System.out.println("Not done - will wait 10s: " + response);
Thread.sleep(10000L);
}
}
示例4
private void describe(String dbInstanceIdentifier) throws Exception {
while (true) {
DescribeDBInstancesRequest request = new DescribeDBInstancesRequest()
.withDBInstanceIdentifier(dbInstanceIdentifier);
DescribeClustersResult response = client.describeClusters(new DescribeClustersRequest()
.withClusterIdentifier(INSTANCE_ID)
);
Cluster dbInstance = response.getClusters().get(0);
if (!dbInstance.getClusterStatus().equalsIgnoreCase("creating")) {
System.out.println("Done! " + response);
System.out.println(dbInstance.getEndpoint().getAddress());
System.out.println(dbInstance.getEndpoint().getPort());
break;
}
System.out.println("Not done - will wait 10s: " + response);
Thread.sleep(10000L);
}
}
示例5
@SuppressWarnings("ResultOfMethodCallIgnored")
@Test
public void testCheck() {
final FetchRdsJob fetchRdsJob = new FetchRdsJob(accountIdSupplierMock, clientProviderMock, jobsPropertiesMock, violationSinkMock, exceptionHandlerMock);
when(amazonRDSClientMock.describeDBInstances(any(DescribeDBInstancesRequest.class))).thenReturn(describeDBInstancesResultMock);
fetchRdsJob.run();
ArgumentCaptor<Violation> violations = ArgumentCaptor.forClass(Violation.class);
verify(violationSinkMock, times(2)).put(violations.capture());
verify(accountIdSupplierMock, times(1)).get();
verify(amazonRDSClientMock, times(1)).describeDBInstances(any(DescribeDBInstancesRequest.class));
verify(jobsPropertiesMock, times(1)).getWhitelistedRegions();
verify(clientProviderMock, times(1)).getClient(any(), any(String.class), any(Region.class));
// Regression test for #479: Make sure that the metadata lists the correct endpoints.
assertArrayEquals(new String[]{"aws.db.cn", "aws.db2.cn"},
violations.getAllValues().stream()
.map(violation -> (Map) violation.getMetaInfo())
.map(metaInfo -> metaInfo.get("unsecuredDatabase"))
.toArray());
}
示例6
/**
* Retrieves the {@link com.amazonaws.services.rds.model.DBInstance} information.
* @param identifier - the database identifier used
* @return - the db instance
* @throws IllegalStateException if the db instance is not found
*/
protected DBInstance getDbInstance(String identifier) throws IllegalStateException {
DBInstance instance;
try {
DescribeDBInstancesResult describeDBInstancesResult = this.amazonRds
.describeDBInstances(new DescribeDBInstancesRequest()
.withDBInstanceIdentifier(identifier));
instance = describeDBInstancesResult.getDBInstances().get(0);
}
catch (DBInstanceNotFoundException e) {
throw new IllegalStateException(MessageFormat.format(
"No database instance with id:''{0}'' found. Please specify a valid db instance",
identifier));
}
return instance;
}
示例7
@Test
void afterPropertiesSet_noInstanceFound_reportsIllegalStateException()
throws Exception {
// Arrange
AmazonRDS amazonRDS = mock(AmazonRDS.class);
when(amazonRDS.describeDBInstances(
new DescribeDBInstancesRequest().withDBInstanceIdentifier("test")))
.thenThrow(new DBInstanceNotFoundException("foo"));
AmazonRdsDataSourceFactoryBean amazonRdsDataSourceFactoryBean = new AmazonRdsDataSourceFactoryBean(
amazonRDS, "test", "foo");
// Assert
assertThatThrownBy(amazonRdsDataSourceFactoryBean::afterPropertiesSet)
.isInstanceOf(IllegalStateException.class)
.hasMessageContaining("No database instance with id:'test'");
}
示例8
@Test
void afterPropertiesSet_customUserNameSet_createsInstanceWithCustomUserNameAndIgnoresMetaDataUserName()
throws Exception {
AmazonRDS amazonRDS = mock(AmazonRDS.class);
DataSourceFactory dataSourceFactory = mock(DataSourceFactory.class);
when(amazonRDS.describeDBInstances(new DescribeDBInstancesRequest()
.withDBInstanceIdentifier("test"))).thenReturn(
new DescribeDBInstancesResult().withDBInstances(new DBInstance()
.withDBInstanceStatus("available").withDBName("test")
.withDBInstanceIdentifier("test").withEngine("mysql")
.withMasterUsername("admin").withEndpoint(new Endpoint()
.withAddress("localhost").withPort(3306))));
AmazonRdsDataSourceFactoryBean amazonRdsDataSourceFactoryBean = new AmazonRdsDataSourceFactoryBean(
amazonRDS, "test", "secret");
amazonRdsDataSourceFactoryBean.setUsername("superAdmin");
amazonRdsDataSourceFactoryBean.setDataSourceFactory(dataSourceFactory);
amazonRdsDataSourceFactoryBean.afterPropertiesSet();
amazonRdsDataSourceFactoryBean.getObject();
verify(dataSourceFactory, times(1)).createDataSource(new DataSourceInformation(
DatabaseType.MYSQL, "localhost", 3306, "test", "superAdmin", "secret"));
}
示例9
@Bean
AmazonRDS amazonRDS() {
AmazonRDSClient client = Mockito.mock(AmazonRDSClient.class);
when(client.describeDBInstances(
new DescribeDBInstancesRequest().withDBInstanceIdentifier("test")))
.thenReturn(new DescribeDBInstancesResult().withDBInstances(
new DBInstance().withDBInstanceStatus("available")
.withDBName("test")
.withDBInstanceIdentifier("test")
.withEngine("mysql")
.withMasterUsername("admin")
.withEndpoint(new Endpoint()
.withAddress("localhost")
.withPort(3306))
.withReadReplicaDBInstanceIdentifiers(
"read1")));
return client;
}
示例10
@Bean
AmazonRDS amazonRDS() {
AmazonRDSClient client = Mockito.mock(AmazonRDSClient.class);
when(client.describeDBInstances(
new DescribeDBInstancesRequest().withDBInstanceIdentifier("test")))
.thenReturn(new DescribeDBInstancesResult().withDBInstances(
new DBInstance().withDBInstanceStatus("available")
.withDBName("test")
.withDBInstanceIdentifier("test")
.withEngine("mysql")
.withMasterUsername("admin")
.withEndpoint(new Endpoint()
.withAddress("localhost")
.withPort(3306))
.withReadReplicaDBInstanceIdentifiers(
"read1")));
return client;
}
示例11
@Bean
AmazonRDS amazonRDS() {
AmazonRDSClient client = Mockito.mock(AmazonRDSClient.class);
when(client.describeDBInstances(
new DescribeDBInstancesRequest().withDBInstanceIdentifier("test")))
.thenReturn(new DescribeDBInstancesResult().withDBInstances(
new DBInstance().withDBInstanceStatus("available")
.withDBName("test")
.withDBInstanceIdentifier("test")
.withEngine("mysql")
.withMasterUsername("admin")
.withEndpoint(new Endpoint()
.withAddress("localhost")
.withPort(3306))
.withReadReplicaDBInstanceIdentifiers(
"read1")));
return client;
}
示例12
@Bean
AmazonRDS amazonRDS() {
AmazonRDSClient client = Mockito.mock(AmazonRDSClient.class);
when(client.describeDBInstances(
new DescribeDBInstancesRequest().withDBInstanceIdentifier("test")))
.thenReturn(new DescribeDBInstancesResult().withDBInstances(
new DBInstance().withDBInstanceStatus("available")
.withDBName("test")
.withDBInstanceIdentifier("test")
.withEngine("mysql")
.withMasterUsername("admin")
.withEndpoint(new Endpoint()
.withAddress("localhost")
.withPort(3306))
.withReadReplicaDBInstanceIdentifiers(
"read1")));
return client;
}
示例13
@Bean
AmazonRDS amazonRDS() {
AmazonRDSClient client = Mockito.mock(AmazonRDSClient.class);
when(client.describeDBInstances(
new DescribeDBInstancesRequest().withDBInstanceIdentifier("test")))
.thenReturn(new DescribeDBInstancesResult().withDBInstances(
new DBInstance().withDBInstanceStatus("available")
.withDBName("test")
.withDBInstanceIdentifier("test")
.withEngine("mysql")
.withMasterUsername("admin")
.withEndpoint(new Endpoint()
.withAddress("localhost")
.withPort(3306))
.withReadReplicaDBInstanceIdentifiers(
"read1")));
return client;
}
示例14
@Test
void canRetry_retryPossibleDueToAvailableDatabase_returnsTrue() throws Exception {
// Arrange
AmazonRDS amazonRDS = mock(AmazonRDS.class);
DatabaseInstanceStatusRetryPolicy policy = new DatabaseInstanceStatusRetryPolicy(
amazonRDS, "test");
when(amazonRDS.describeDBInstances(
new DescribeDBInstancesRequest().withDBInstanceIdentifier("test")))
.thenReturn(new DescribeDBInstancesResult().withDBInstances(
new DBInstance().withDBInstanceStatus("available")));
RetryContext retryContext = policy.open(new RetryContextSupport(null));
// Act
policy.registerThrowable(retryContext,
new TransientDataAccessResourceException("not available"));
// Assert
assertThat(policy.canRetry(retryContext)).isTrue();
policy.close(retryContext);
}
示例15
@Test
void canRetry_retryNotPossibleDueToNoDatabase_returnsFalse() throws Exception {
// Arrange
AmazonRDS amazonRDS = mock(AmazonRDS.class);
DatabaseInstanceStatusRetryPolicy policy = new DatabaseInstanceStatusRetryPolicy(
amazonRDS, "test");
when(amazonRDS.describeDBInstances(
new DescribeDBInstancesRequest().withDBInstanceIdentifier("test")))
.thenThrow(new DBInstanceNotFoundException("test"));
RetryContext retryContext = policy.open(new RetryContextSupport(null));
// Act
policy.registerThrowable(retryContext,
new TransientDataAccessResourceException("not available"));
// Assert
assertThat(policy.canRetry(retryContext)).isFalse();
policy.close(retryContext);
}
示例16
@Bean
AmazonRDSClient amazonRDS() {
AmazonRDSClient client = Mockito.mock(AmazonRDSClient.class);
when(client.describeDBInstances(
new DescribeDBInstancesRequest().withDBInstanceIdentifier("test")))
.thenReturn(new DescribeDBInstancesResult().withDBInstances(
new DBInstance().withDBInstanceStatus("available")
.withDBName("test")
.withDBInstanceIdentifier("test")
.withEngine("mysql")
.withMasterUsername("admin")
.withEndpoint(new Endpoint()
.withAddress("localhost")
.withPort(3306))
.withReadReplicaDBInstanceIdentifiers(
"read1")));
return client;
}
示例17
public void start(AuthenticatedContext ac, DatabaseStack dbStack) throws ExecutionException, TimeoutException, InterruptedException {
AwsCredentialView credentialView = new AwsCredentialView(ac.getCloudCredential());
String regionName = ac.getCloudContext().getLocation().getRegion().value();
AmazonRDS rdsClient = awsClient.createRdsClient(credentialView, regionName);
String dbInstanceIdentifier = dbStack.getDatabaseServer().getServerId();
StartDBInstanceRequest startDBInstanceRequest = new StartDBInstanceRequest();
startDBInstanceRequest.setDBInstanceIdentifier(dbInstanceIdentifier);
try {
rdsClient.startDBInstance(startDBInstanceRequest);
} catch (RuntimeException ex) {
throw new CloudConnectorException(ex.getMessage(), ex);
}
Waiter<DescribeDBInstancesRequest> rdsWaiter = rdsClient.waiters().dBInstanceAvailable();
DescribeDBInstancesRequest describeDBInstancesRequest = new DescribeDBInstancesRequest().withDBInstanceIdentifier(dbInstanceIdentifier);
StackCancellationCheck stackCancellationCheck = new StackCancellationCheck(ac.getCloudContext().getId());
run(rdsWaiter, describeDBInstancesRequest, stackCancellationCheck);
}
示例18
public void stop(AuthenticatedContext ac, DatabaseStack dbStack) throws ExecutionException, TimeoutException, InterruptedException {
AwsCredentialView credentialView = new AwsCredentialView(ac.getCloudCredential());
String regionName = ac.getCloudContext().getLocation().getRegion().value();
AmazonRDS rdsClient = awsClient.createRdsClient(credentialView, regionName);
String dbInstanceIdentifier = dbStack.getDatabaseServer().getServerId();
StopDBInstanceRequest stopDBInstanceRequest = new StopDBInstanceRequest();
stopDBInstanceRequest.setDBInstanceIdentifier(dbInstanceIdentifier);
LOGGER.debug("RDS stop request");
try {
rdsClient.stopDBInstance(stopDBInstanceRequest);
} catch (RuntimeException ex) {
throw new CloudConnectorException(ex.getMessage(), ex);
}
Waiter<DescribeDBInstancesRequest> rdsWaiter = customAmazonWaiterProvider
.getDbInstanceStopWaiter(rdsClient);
DescribeDBInstancesRequest describeDBInstancesRequest = new DescribeDBInstancesRequest().withDBInstanceIdentifier(dbInstanceIdentifier);
StackCancellationCheck stackCancellationCheck = new StackCancellationCheck(ac.getCloudContext().getId());
run(rdsWaiter, describeDBInstancesRequest, stackCancellationCheck);
LOGGER.debug("RDS stop process finished. DB Instance ID: {}", dbInstanceIdentifier);
}
示例19
public String getDBEndPoint(String dbInstanceId, int timeout){
DescribeDBInstancesRequest ddbir = new DescribeDBInstancesRequest()
.withDBInstanceIdentifier(dbInstanceId);
System.out.println("Waiting for DB endpoints");
while(timeout -- > 0){
System.out.print("-");
DescribeDBInstancesResult ddbi = rdsClient.describeDBInstances(ddbir);
Endpoint endpoint = ddbi.getDBInstances().get(0).getEndpoint();
if(endpoint != null && endpoint.toString().length()!=0)
return endpoint.getAddress()+":"+endpoint.getPort();
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(BeanstalkConnector.class.getName()).log(Level.SEVERE, null, ex);
}
}
return "";
}
示例20
/**
* Gets the DB instance for rds db resource.
*
* @param clientMap the client map
* @param resourceId the resource id
* @return the DB instance for rds db resource
* @throws Exception the exception
*/
public static List<DBInstance> getDBInstanceForRdsDbResource(Map<String,Object> clientMap,String resourceId) throws Exception {
AmazonRDS amazonRDS = (AmazonRDS) clientMap.get("client");
DescribeDBInstancesRequest instancesRequest = new DescribeDBInstancesRequest();
instancesRequest.setDBInstanceIdentifier(resourceId);
DescribeDBInstancesResult dbInstancesResult = amazonRDS.describeDBInstances(instancesRequest);
return dbInstancesResult.getDBInstances();
}
示例21
@Scheduled(fixedRate = 300_000)
public void run() {
for (final String accountId : allAccountIds.get()) {
for (final String region : jobsProperties.getWhitelistedRegions()) {
try {
final AmazonRDSClient amazonRDSClient = clientProvider.getClient(AmazonRDSClient.class, accountId,
Region.getRegion(Regions.fromName(region)));
Optional<String> marker = Optional.empty();
do {
final DescribeDBInstancesRequest request = new DescribeDBInstancesRequest();
marker.ifPresent(request::setMarker);
final DescribeDBInstancesResult result = amazonRDSClient.describeDBInstances(request);
marker = Optional.ofNullable(trimToNull(result.getMarker()));
result.getDBInstances().stream()
.filter(DBInstance::getPubliclyAccessible)
.filter(dbInstance -> dbInstance.getEndpoint() != null)
.forEach(dbInstance -> {
final Map<String, Object> metadata = newHashMap();
metadata.put("unsecuredDatabase", dbInstance.getEndpoint().getAddress());
metadata.put("errorMessages", "Unsecured Database! Your DB can be reached from outside");
writeViolation(accountId, region, metadata, dbInstance.getEndpoint().getAddress());
});
} while (marker.isPresent());
} catch (final Exception e) {
jobExceptionHandler.onException(e, ImmutableMap.of(
"job", this.getClass().getSimpleName(),
"aws_account_id", accountId,
"aws_region", region));
}
}
}
}
示例22
private boolean isDatabaseAvailable(RetryContext context) {
DescribeDBInstancesResult describeDBInstancesResult;
try {
describeDBInstancesResult = this.amazonRDS.describeDBInstances(
new DescribeDBInstancesRequest().withDBInstanceIdentifier(
(String) context.getAttribute(DB_INSTANCE_ATTRIBUTE_NAME)));
}
catch (DBInstanceNotFoundException e) {
LOGGER.warn(
"Database Instance with name {} has been removed or is not configured correctly, no retry possible",
getDbInstanceIdentifier());
// Database has been deleted while operating, hence we can not retry
return false;
}
if (describeDBInstancesResult.getDBInstances().size() == 1) {
DBInstance dbInstance = describeDBInstancesResult.getDBInstances().get(0);
InstanceStatus instanceStatus = InstanceStatus
.fromDatabaseStatus(dbInstance.getDBInstanceStatus());
if (LOGGER.isTraceEnabled()) {
LOGGER.trace("Status of database to be retried is {}", instanceStatus);
}
return instanceStatus.isRetryable();
}
else {
throw new IllegalStateException(
"Multiple databases found for same identifier, this is likely an incompatibility with the Amazon SDK");
}
}
示例23
@Test
void afterPropertiesSet_instanceWithoutReadReplica_createsNoDataSourceRouter()
throws Exception {
// Arrange
AmazonRDS amazonRDS = mock(AmazonRDS.class);
DataSourceFactory dataSourceFactory = mock(DataSourceFactory.class);
when(amazonRDS.describeDBInstances(new DescribeDBInstancesRequest()
.withDBInstanceIdentifier("test"))).thenReturn(
new DescribeDBInstancesResult().withDBInstances(new DBInstance()
.withDBInstanceStatus("available").withDBName("test")
.withDBInstanceIdentifier("test").withEngine("mysql")
.withMasterUsername("admin").withEndpoint(new Endpoint()
.withAddress("localhost").withPort(3306))));
AmazonRdsReadReplicaAwareDataSourceFactoryBean factoryBean = new AmazonRdsReadReplicaAwareDataSourceFactoryBean(
amazonRDS, "test", "secret");
factoryBean.setDataSourceFactory(dataSourceFactory);
when(dataSourceFactory.createDataSource(new DataSourceInformation(
DatabaseType.MYSQL, "localhost", 3306, "test", "admin", "secret")))
.thenReturn(mock(DataSource.class));
// Act
factoryBean.afterPropertiesSet();
// Assert
DataSource datasource = factoryBean.getObject();
assertThat(datasource).isNotNull();
verify(dataSourceFactory, times(1)).createDataSource(new DataSourceInformation(
DatabaseType.MYSQL, "localhost", 3306, "test", "admin", "secret"));
}
示例24
@Test
void newInstance_withResourceIdResolver_createsInstanceWithResolvedName()
throws Exception {
// Arrange
AmazonRDS amazonRDS = mock(AmazonRDS.class);
DataSourceFactory dataSourceFactory = mock(DataSourceFactory.class);
ResourceIdResolver resourceIdResolver = mock(ResourceIdResolver.class);
DataSource dataSource = mock(DataSource.class);
when(resourceIdResolver.resolveToPhysicalResourceId("test")).thenReturn("bar");
when(amazonRDS.describeDBInstances(new DescribeDBInstancesRequest()
.withDBInstanceIdentifier("bar"))).thenReturn(
new DescribeDBInstancesResult().withDBInstances(new DBInstance()
.withDBInstanceStatus("available").withDBName("test")
.withDBInstanceIdentifier("bar").withEngine("mysql")
.withMasterUsername("admin").withEndpoint(new Endpoint()
.withAddress("localhost").withPort(3306))));
when(dataSourceFactory.createDataSource(new DataSourceInformation(
DatabaseType.MYSQL, "localhost", 3306, "test", "admin", "secret")))
.thenReturn(dataSource);
AmazonRdsDataSourceFactoryBean amazonRdsDataSourceFactoryBean = new AmazonRdsDataSourceFactoryBean(
amazonRDS, "test", "secret");
amazonRdsDataSourceFactoryBean.setDataSourceFactory(dataSourceFactory);
amazonRdsDataSourceFactoryBean.setResourceIdResolver(resourceIdResolver);
// Act
amazonRdsDataSourceFactoryBean.afterPropertiesSet();
// Assert
assertThat(amazonRdsDataSourceFactoryBean.getObject()).isNotNull();
verify(dataSourceFactory, times(1)).createDataSource(new DataSourceInformation(
DatabaseType.MYSQL, "localhost", 3306, "test", "admin", "secret"));
}
示例25
@Test
void afterPropertiesSet_noUserNameSet_createsInstanceWithUserNameFromMetaData()
throws Exception {
// Arrange
AmazonRDS amazonRDS = mock(AmazonRDS.class);
DataSourceFactory dataSourceFactory = mock(DataSourceFactory.class);
DataSource dataSource = mock(DataSource.class);
when(amazonRDS.describeDBInstances(new DescribeDBInstancesRequest()
.withDBInstanceIdentifier("test"))).thenReturn(
new DescribeDBInstancesResult().withDBInstances(new DBInstance()
.withDBInstanceStatus("available").withDBName("test")
.withDBInstanceIdentifier("test").withEngine("mysql")
.withMasterUsername("admin").withEndpoint(new Endpoint()
.withAddress("localhost").withPort(3306))));
when(dataSourceFactory.createDataSource(new DataSourceInformation(
DatabaseType.MYSQL, "localhost", 3306, "test", "admin", "secret")))
.thenReturn(dataSource);
AmazonRdsDataSourceFactoryBean amazonRdsDataSourceFactoryBean = new AmazonRdsDataSourceFactoryBean(
amazonRDS, "test", "secret");
amazonRdsDataSourceFactoryBean.setDataSourceFactory(dataSourceFactory);
// Act
amazonRdsDataSourceFactoryBean.afterPropertiesSet();
// Assert
DataSource datasource = amazonRdsDataSourceFactoryBean.getObject();
assertThat(datasource).isNotNull();
verify(dataSourceFactory, times(1)).createDataSource(new DataSourceInformation(
DatabaseType.MYSQL, "localhost", 3306, "test", "admin", "secret"));
}
示例26
@Test
void destroyInstance_shutdownInitiated_destroysDynamicDataSource() throws Exception {
AmazonRDS amazonRDS = mock(AmazonRDS.class);
DataSourceFactory dataSourceFactory = mock(DataSourceFactory.class);
DataSource dataSource = mock(DataSource.class);
when(amazonRDS.describeDBInstances(new DescribeDBInstancesRequest()
.withDBInstanceIdentifier("test"))).thenReturn(
new DescribeDBInstancesResult().withDBInstances(new DBInstance()
.withDBInstanceStatus("available").withDBName("test")
.withDBInstanceIdentifier("test").withEngine("mysql")
.withMasterUsername("admin").withEndpoint(new Endpoint()
.withAddress("localhost").withPort(3306))));
when(dataSourceFactory.createDataSource(new DataSourceInformation(
DatabaseType.MYSQL, "localhost", 3306, "test", "admin", "secret")))
.thenReturn(dataSource);
AmazonRdsDataSourceFactoryBean amazonRdsDataSourceFactoryBean = new AmazonRdsDataSourceFactoryBean(
amazonRDS, "test", "secret");
amazonRdsDataSourceFactoryBean.setDataSourceFactory(dataSourceFactory);
amazonRdsDataSourceFactoryBean.afterPropertiesSet();
amazonRdsDataSourceFactoryBean.getObject();
amazonRdsDataSourceFactoryBean.destroy();
verify(dataSourceFactory, times(1)).closeDataSource(dataSource);
}
示例27
@Bean
AmazonRDS amazonRDS() {
AmazonRDSClient client = Mockito.mock(AmazonRDSClient.class);
when(client.describeDBInstances(
new DescribeDBInstancesRequest().withDBInstanceIdentifier("test")))
.thenReturn(new DescribeDBInstancesResult().withDBInstances(
new DBInstance().withDBInstanceStatus("available")
.withDBName("test")
.withDBInstanceIdentifier("test")
.withEngine("mysql")
.withMasterUsername("admin")
.withEndpoint(new Endpoint()
.withAddress("localhost")
.withPort(3306))
.withReadReplicaDBInstanceIdentifiers(
"read1")));
when(client.describeDBInstances(
new DescribeDBInstancesRequest().withDBInstanceIdentifier("read1")))
.thenReturn(new DescribeDBInstancesResult().withDBInstances(
new DBInstance().withDBInstanceStatus("available")
.withDBName("read1")
.withDBInstanceIdentifier("read1")
.withEngine("mysql")
.withMasterUsername("admin")
.withEndpoint(new Endpoint()
.withAddress("localhost")
.withPort(3306))));
return client;
}
示例28
@Test
void canRetry_withResourceIdResolver_returnsTrue() throws Exception {
// Arrange
AmazonRDS amazonRDS = mock(AmazonRDS.class);
ResourceIdResolver resourceIdResolver = mock(ResourceIdResolver.class);
DatabaseInstanceStatusRetryPolicy policy = new DatabaseInstanceStatusRetryPolicy(
amazonRDS, "foo");
when(amazonRDS.describeDBInstances(
new DescribeDBInstancesRequest().withDBInstanceIdentifier("test")))
.thenReturn(new DescribeDBInstancesResult().withDBInstances(
new DBInstance().withDBInstanceStatus("available")));
when(resourceIdResolver.resolveToPhysicalResourceId("foo")).thenReturn("test");
policy.setResourceIdResolver(resourceIdResolver);
RetryContext retryContext = policy.open(new RetryContextSupport(null));
// Act
policy.registerThrowable(retryContext,
new TransientDataAccessResourceException("not available"));
// Assert
assertThat(policy.canRetry(retryContext)).isTrue();
policy.close(retryContext);
}
示例29
@Test
void canRetry_multipleDatabasesFoundForInstanceIdentifier_reportsException()
throws Exception {
// Arrange
AmazonRDS amazonRDS = mock(AmazonRDS.class);
DatabaseInstanceStatusRetryPolicy policy = new DatabaseInstanceStatusRetryPolicy(
amazonRDS, "test");
DescribeDBInstancesResult describeDBInstancesResult = new DescribeDBInstancesResult()
.withDBInstances(new DBInstance(), new DBInstance());
when(amazonRDS.describeDBInstances(
new DescribeDBInstancesRequest().withDBInstanceIdentifier("test")))
.thenReturn(describeDBInstancesResult);
RetryContext retryContext = policy.open(new RetryContextSupport(null));
// Act
policy.registerThrowable(retryContext,
new TransientDataAccessResourceException("not available"));
// Assert
assertThatThrownBy(() -> policy.canRetry(retryContext))
.isInstanceOf(IllegalStateException.class)
.hasMessageContaining("Multiple databases found for same identifier");
}
示例30
@Bean
AmazonRDS amazonRDS() {
AmazonRDSClient client = Mockito.mock(AmazonRDSClient.class);
when(client.describeDBInstances(
new DescribeDBInstancesRequest().withDBInstanceIdentifier("test")))
.thenReturn(new DescribeDBInstancesResult().withDBInstances(
new DBInstance().withDBInstanceStatus("available")
.withDBName("test")
.withDBInstanceIdentifier("test")
.withEngine("mysql")
.withMasterUsername("admin")
.withEndpoint(new Endpoint()
.withAddress("localhost")
.withPort(3306))));
when(client.describeDBInstances(new DescribeDBInstancesRequest()
.withDBInstanceIdentifier("anotherOne")))
.thenReturn(new DescribeDBInstancesResult().withDBInstances(
new DBInstance().withDBInstanceStatus("available")
.withDBName("test")
.withDBInstanceIdentifier("anotherOne")
.withEngine("mysql")
.withMasterUsername("admin")
.withEndpoint(new Endpoint()
.withAddress("localhost")
.withPort(3306))));
return client;
}