Skip to content

Commit 6dc12d4

Browse files
authored
Add the ability to list Auora Mysql 5.7 (#2146)
1 parent 9e717a2 commit 6dc12d4

File tree

5 files changed

+43
-37
lines changed

5 files changed

+43
-37
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type" : "bugfix",
3+
"description" : "Fix Aurora MySQL 5.7 not showing up in the AWS Explorer"
4+
}

jetbrains-ultimate/src-201+/software/aws/toolkits/jetbrains/services/rds/RdsEngine.kt

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,22 @@ import javax.swing.Icon
1111
* The [additionalInfo] shows as [software.aws.toolkits.jetbrains.core.explorer.nodes.AwsExplorerNode.statusText] if present
1212
* TODO: This can probably ultimately become [DbEngine] and encompass Redshift functionality too
1313
*/
14-
sealed class RdsEngine(val engine: String, val icon: Icon, val additionalInfo: String?) {
14+
sealed class RdsEngine(val engines: Set<String>, val icon: Icon, val additionalInfo: String?) {
1515

16-
object MySql : MySqlBase("mysql") {
16+
object MySql : MySqlBase(setOf("mysql")) {
1717
override fun connectionStringUrl(endpoint: String) = "jdbc:$jdbcMysql://$endpoint/"
1818
}
1919

20-
object AuroraMySql : MySqlBase("aurora", additionalInfo = message("rds.aurora")) {
20+
// aurora == 5.6, aurora-mysql == 5.7
21+
object AuroraMySql : MySqlBase(setOf("aurora", "aurora-mysql"), additionalInfo = message("rds.aurora")) {
2122
// The docs recommend using MariaDB instead of MySQL to connect to MySQL Aurora DBs:
2223
// https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.Connecting.html#Aurora.Connecting.AuroraMySQL
2324
override fun connectionStringUrl(endpoint: String) = "jdbc:$jdbcMariadb://$endpoint/"
2425
}
2526

26-
object Postgres : PostgresBase("postgres")
27+
object Postgres : PostgresBase(setOf("postgres"))
2728

28-
object AuroraPostgres : PostgresBase("aurora-postgresql", additionalInfo = message("rds.aurora"))
29+
object AuroraPostgres : PostgresBase(setOf("aurora-postgresql"), additionalInfo = message("rds.aurora"))
2930

3031
/**
3132
* Create a connection string, using the passed hostname/port [endpoint] parameter
@@ -37,9 +38,9 @@ sealed class RdsEngine(val engine: String, val icon: Icon, val additionalInfo: S
3738
*/
3839
open fun iamUsername(username: String) = username
3940

40-
abstract class MySqlBase(engine: String, additionalInfo: String? = null) : RdsEngine(engine, AwsIcons.Resources.Rds.MYSQL, additionalInfo)
41+
abstract class MySqlBase(engine: Set<String>, additionalInfo: String? = null) : RdsEngine(engine, AwsIcons.Resources.Rds.MYSQL, additionalInfo)
4142

42-
abstract class PostgresBase(engine: String, additionalInfo: String? = null) : RdsEngine(engine, AwsIcons.Resources.Rds.POSTGRES, additionalInfo) {
43+
abstract class PostgresBase(engine: Set<String>, additionalInfo: String? = null) : RdsEngine(engine, AwsIcons.Resources.Rds.POSTGRES, additionalInfo) {
4344
override fun connectionStringUrl(endpoint: String) = "jdbc:$jdbcPostgres://$endpoint/"
4445

4546
/**
@@ -51,6 +52,6 @@ sealed class RdsEngine(val engine: String, val icon: Icon, val additionalInfo: S
5152

5253
companion object {
5354
fun values(): Set<RdsEngine> = setOf(MySql, AuroraMySql, Postgres, AuroraPostgres)
54-
fun fromEngine(engine: String) = values().find { it.engine == engine } ?: throw IllegalArgumentException("Unknown RDS engine $engine")
55+
fun fromEngine(engine: String) = values().find { it.engines.contains(engine) } ?: throw IllegalArgumentException("Unknown RDS engine $engine")
5556
}
5657
}

jetbrains-ultimate/src-201+/software/aws/toolkits/jetbrains/services/rds/RdsResources.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ import software.aws.toolkits.jetbrains.core.Resource
1212
// These are the member engine in DBInstance, but it is a string
1313
const val mysqlEngineType = "mysql"
1414
const val postgresEngineType = "postgres"
15-
const val auroraMysqlEngineType = "aurora"
16-
const val auroraPostgresEngineType = "aurora-postgresql"
1715

1816
fun DBInstance.rdsEngine(): RdsEngine = RdsEngine.fromEngine(engine())
1917

@@ -34,7 +32,7 @@ object RdsResources {
3432

3533
val LIST_SUPPORTED_INSTANCES: Resource.Cached<List<DBInstance>> = ClientBackedCachedResource(RdsClient::class, "rds.list_supported_instances") {
3634
describeDBInstancesPaginator {
37-
it.filters(Filter.builder().name(ENGINE_FILTER).values(RdsEngine.values().map { e -> e.engine }).build())
35+
it.filters(Filter.builder().name(ENGINE_FILTER).values(RdsEngine.values().flatMap { e -> e.engines }).build())
3836
}.dbInstances().toList()
3937
}
4038
}

jetbrains-ultimate/tst-201+/software/aws/toolkits/jetbrains/services/rds/RdsExplorerNodeTest.kt

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -24,37 +24,23 @@ class RdsExplorerNodeTest {
2424

2525
@Test
2626
fun `database resources are listed`() {
27-
val mysqlDatabase = RuleUtils.randomName()
28-
val postgresDatabase = RuleUtils.randomName()
29-
val auroraMySqlDatabase = RuleUtils.randomName()
30-
val auroraPostgresDatabase = RuleUtils.randomName()
27+
val databases = RdsEngine.values().flatMap { it.engines }.associateWith { RuleUtils.randomName(prefix = "$it-") }
3128
resourceCache.addEntry(
3229
projectRule.project,
3330
RdsResources.LIST_SUPPORTED_INSTANCES,
34-
listOf(
35-
dbInstance(RdsEngine.MySql, mysqlDatabase),
36-
dbInstance(RdsEngine.Postgres, postgresDatabase),
37-
dbInstance(RdsEngine.AuroraMySql, auroraMySqlDatabase),
38-
dbInstance(RdsEngine.AuroraPostgres, auroraPostgresDatabase)
39-
)
31+
databases.map { dbInstance(it.key, it.value) }
4032
)
4133
val serviceRootNode = sut.buildServiceRootNode(projectRule.project)
42-
assertThat(serviceRootNode.children).hasSize(4).hasOnlyElementsOfType<RdsNode>().allSatisfy {
34+
assertThat(serviceRootNode.children).hasSize(databases.size).hasOnlyElementsOfType<RdsNode>().allSatisfy {
4335
assertThat(it.resourceType()).isEqualTo("instance")
44-
}.anySatisfy {
45-
assertThat(it.dbInstance.dbInstanceIdentifier()).isEqualTo(mysqlDatabase)
46-
}.anySatisfy {
47-
assertThat(it.dbInstance.dbInstanceIdentifier()).isEqualTo(postgresDatabase)
48-
}.anySatisfy {
49-
assertThat(it.dbInstance.dbInstanceIdentifier()).isEqualTo(auroraMySqlDatabase)
50-
}.anySatisfy {
51-
assertThat(it.dbInstance.dbInstanceIdentifier()).isEqualTo(auroraPostgresDatabase)
52-
}
36+
}.extracting<String> {
37+
it.dbInstance.dbInstanceIdentifier()
38+
}.containsOnly(*databases.values.toTypedArray())
5339
}
5440

5541
private companion object {
5642
val sut = RdsExplorerRootNode()
57-
fun dbInstance(engine: RdsEngine, name: String): DBInstance =
58-
DBInstance.builder().engine(engine.engine).dbName(name).dbInstanceIdentifier(name).dbInstanceArn("").build()
43+
fun dbInstance(engine: String, name: String): DBInstance =
44+
DBInstance.builder().engine(engine).dbName(name).dbInstanceIdentifier(name).dbInstanceArn("").build()
5945
}
6046
}

jetbrains-ultimate/tst-201+/software/aws/toolkits/jetbrains/services/rds/actions/CreateConfigurationActionTest.kt

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@ import software.aws.toolkits.jetbrains.datagrip.CREDENTIAL_ID_PROPERTY
2020
import software.aws.toolkits.jetbrains.datagrip.REGION_ID_PROPERTY
2121
import software.aws.toolkits.jetbrains.services.rds.RdsDatasourceConfiguration
2222
import software.aws.toolkits.jetbrains.services.rds.RdsNode
23-
import software.aws.toolkits.jetbrains.services.rds.auroraMysqlEngineType
24-
import software.aws.toolkits.jetbrains.services.rds.auroraPostgresEngineType
2523
import software.aws.toolkits.jetbrains.services.rds.auth.IamAuth
2624
import software.aws.toolkits.jetbrains.services.rds.jdbcMariadb
2725
import software.aws.toolkits.jetbrains.services.rds.jdbcMysql
@@ -131,7 +129,7 @@ class CreateConfigurationActionTest {
131129

132130
@Test
133131
fun `Add Aurora PostgreSQL data source`() {
134-
val instance = createDbInstance(port = port, address = address, engineType = auroraPostgresEngineType)
132+
val instance = createDbInstance(port = port, address = address, engineType = "aurora-postgresql")
135133
val registry = DataSourceRegistry(projectRule.project)
136134
registry.createRdsDatasource(
137135
RdsDatasourceConfiguration(
@@ -169,7 +167,26 @@ class CreateConfigurationActionTest {
169167

170168
@Test
171169
fun `Add Aurora MySQL data source`() {
172-
val instance = createDbInstance(address = address, port = port, engineType = auroraMysqlEngineType)
170+
val instance = createDbInstance(address = address, port = port, engineType = "aurora")
171+
val registry = DataSourceRegistry(projectRule.project)
172+
registry.createRdsDatasource(
173+
RdsDatasourceConfiguration(
174+
username = username,
175+
credentialId = MockCredentialsManager.DUMMY_PROVIDER_IDENTIFIER.id,
176+
regionId = MockRegionProvider.getInstance().defaultRegion().id,
177+
dbInstance = instance
178+
)
179+
)
180+
assertThat(registry.newDataSources).hasOnlyOneElementSatisfying {
181+
assertThat(it.username).isEqualTo(username)
182+
assertThat(it.driverClass).contains("mariadb")
183+
assertThat(it.url).contains(jdbcMariadb)
184+
}
185+
}
186+
187+
@Test
188+
fun `Add Aurora MySQL 5_7 data source`() {
189+
val instance = createDbInstance(address = address, port = port, engineType = "aurora-mysql")
173190
val registry = DataSourceRegistry(projectRule.project)
174191
registry.createRdsDatasource(
175192
RdsDatasourceConfiguration(

0 commit comments

Comments
 (0)