Skip to content

Commit 924440e

Browse files
committed
refactor(rdb): consolidate engine upgrade tests into single comprehensive test
1 parent c7b61a2 commit 924440e

File tree

1 file changed

+51
-180
lines changed

1 file changed

+51
-180
lines changed

internal/services/rdb/instance_test.go

Lines changed: 51 additions & 180 deletions
Original file line numberDiff line numberDiff line change
@@ -1544,22 +1544,46 @@ func TestAccInstance_EndpointErrorHandling(t *testing.T) {
15441544
})
15451545
}
15461546

1547+
func isInstancePresent(tt *acctest.TestTools, n string) resource.TestCheckFunc {
1548+
return func(s *terraform.State) error {
1549+
rs, ok := s.RootModule().Resources[n]
1550+
if !ok {
1551+
return fmt.Errorf("resource not found: %s", n)
1552+
}
1553+
1554+
rdbAPI, region, ID, err := rdb.NewAPIWithRegionAndID(tt.Meta, rs.Primary.ID)
1555+
if err != nil {
1556+
return err
1557+
}
1558+
1559+
_, err = rdbAPI.GetInstance(&rdbSDK.GetInstanceRequest{
1560+
InstanceID: ID,
1561+
Region: region,
1562+
})
1563+
if err != nil {
1564+
return err
1565+
}
1566+
1567+
return nil
1568+
}
1569+
}
15471570
func TestAccInstance_EngineUpgrade(t *testing.T) {
15481571
tt := acctest.NewTestTools(t)
15491572
defer tt.Cleanup()
15501573

1551-
// Get two different PostgreSQL versions for upgrade testing
15521574
oldVersion, newVersion := rdbchecks.GetEngineVersionsForUpgrade(tt, postgreSQLEngineName)
15531575
if oldVersion == newVersion {
15541576
t.Skip("Need at least 2 different PostgreSQL versions for upgrade testing")
15551577
}
15561578

1579+
var oldInstanceID string
1580+
15571581
resource.ParallelTest(t, resource.TestCase{
15581582
PreCheck: func() { acctest.PreCheck(t) },
15591583
ProtoV6ProviderFactories: tt.ProviderFactories,
15601584
CheckDestroy: rdbchecks.IsInstanceDestroyed(tt),
15611585
Steps: []resource.TestStep{
1562-
// Step 1: Create instance with older engine version
1586+
// Step 1: Create instance with old version and verify upgradable_versions
15631587
{
15641588
Config: fmt.Sprintf(`
15651589
resource "scaleway_rdb_instance" "main" {
@@ -1574,131 +1598,30 @@ func TestAccInstance_EngineUpgrade(t *testing.T) {
15741598
volume_type = "sbs_5k"
15751599
volume_size_in_gb = 10
15761600
}
1577-
`, oldVersion),
1578-
Check: resource.ComposeTestCheckFunc(
1579-
isInstancePresent(tt, "scaleway_rdb_instance.main"),
1580-
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "engine", oldVersion),
1581-
resource.TestCheckResourceAttrSet("scaleway_rdb_instance.main", "upgradable_versions.#"),
1582-
),
1583-
},
1584-
// Step 2: Upgrade to newer engine version
1585-
{
1586-
Config: fmt.Sprintf(`
1587-
resource "scaleway_rdb_instance" "main" {
1588-
name = "test-rdb-engine-upgrade"
1589-
node_type = "db-dev-s"
1590-
engine = %q
1591-
is_ha_cluster = false
1592-
disable_backup = true
1593-
user_name = "test_user"
1594-
password = "thiZ_is_v&ry_s3cret"
1595-
tags = ["terraform-test", "engine-upgrade"]
1596-
volume_type = "sbs_5k"
1597-
volume_size_in_gb = 10
1598-
}
1599-
`, newVersion),
1600-
Check: resource.ComposeTestCheckFunc(
1601-
isInstancePresent(tt, "scaleway_rdb_instance.main"),
1602-
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "engine", newVersion),
1603-
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "name", "test-rdb-engine-upgrade"),
1604-
// Verify endpoints are preserved
1605-
resource.TestCheckResourceAttrSet("scaleway_rdb_instance.main", "load_balancer.0.ip"),
1606-
),
1607-
},
1608-
},
1609-
})
1610-
}
1611-
1612-
func TestAccInstance_EngineUpgrade_InvalidVersion(t *testing.T) {
1613-
tt := acctest.NewTestTools(t)
1614-
defer tt.Cleanup()
1615-
1616-
latestVersion := rdbchecks.GetLatestEngineVersion(tt, postgreSQLEngineName)
1617-
1618-
resource.ParallelTest(t, resource.TestCase{
1619-
PreCheck: func() { acctest.PreCheck(t) },
1620-
ProtoV6ProviderFactories: tt.ProviderFactories,
1621-
CheckDestroy: rdbchecks.IsInstanceDestroyed(tt),
1622-
Steps: []resource.TestStep{
1623-
{
1624-
Config: fmt.Sprintf(`
1625-
resource "scaleway_rdb_instance" "main" {
1626-
name = "test-rdb-invalid-upgrade"
1627-
node_type = "db-dev-s"
1628-
engine = %q
1629-
is_ha_cluster = false
1630-
disable_backup = true
1631-
user_name = "test_user"
1632-
password = "thiZ_is_v&ry_s3cret"
1633-
tags = ["terraform-test", "invalid-upgrade"]
1634-
volume_type = "sbs_5k"
1635-
volume_size_in_gb = 10
1636-
}
1637-
`, latestVersion),
1638-
Check: resource.ComposeTestCheckFunc(
1639-
isInstancePresent(tt, "scaleway_rdb_instance.main"),
1640-
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "engine", latestVersion),
1641-
),
1642-
},
1643-
{
1644-
Config: fmt.Sprintf(`
1645-
resource "scaleway_rdb_instance" "main" {
1646-
name = "test-rdb-invalid-upgrade"
1647-
node_type = "db-dev-s"
1648-
engine = "PostgreSQL-99.99"
1649-
is_ha_cluster = false
1650-
disable_backup = true
1651-
user_name = "test_user"
1652-
password = "thiZ_is_v&ry_s3cret"
1653-
tags = ["terraform-test", "invalid-upgrade"]
1654-
volume_type = "sbs_5k"
1655-
volume_size_in_gb = 10
1656-
}
1657-
`),
1658-
ExpectError: regexp.MustCompile(`engine version PostgreSQL-99\.99 is not available for upgrade`),
1659-
},
1660-
},
1661-
})
1662-
}
1663-
1664-
func TestAccInstance_UpgradableVersionsRead(t *testing.T) {
1665-
tt := acctest.NewTestTools(t)
1666-
defer tt.Cleanup()
1667-
1668-
latestVersion := rdbchecks.GetLatestEngineVersion(tt, postgreSQLEngineName)
1669-
1670-
resource.ParallelTest(t, resource.TestCase{
1671-
PreCheck: func() { acctest.PreCheck(t) },
1672-
ProtoV6ProviderFactories: tt.ProviderFactories,
1673-
CheckDestroy: rdbchecks.IsInstanceDestroyed(tt),
1674-
Steps: []resource.TestStep{
1675-
{
1676-
Config: fmt.Sprintf(`
1677-
resource "scaleway_rdb_instance" "main" {
1678-
name = "test-rdb-upgradable-versions"
1679-
node_type = "db-dev-s"
1680-
engine = %q
1681-
is_ha_cluster = false
1682-
disable_backup = true
1683-
user_name = "test_user"
1684-
password = "thiZ_is_v&ry_s3cret"
1685-
volume_type = "sbs_5k"
1686-
volume_size_in_gb = 10
1687-
}
16881601
16891602
output "upgradable_versions" {
16901603
value = scaleway_rdb_instance.main.upgradable_versions
16911604
}
1692-
`, latestVersion),
1605+
`, oldVersion),
16931606
Check: resource.ComposeTestCheckFunc(
16941607
isInstancePresent(tt, "scaleway_rdb_instance.main"),
1608+
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "engine", oldVersion),
16951609
resource.TestCheckResourceAttrSet("scaleway_rdb_instance.main", "upgradable_versions.#"),
1610+
// Capture old instance ID and verify upgradable_versions fields
16961611
func(s *terraform.State) error {
16971612
rs, ok := s.RootModule().Resources["scaleway_rdb_instance.main"]
16981613
if !ok {
16991614
return fmt.Errorf("resource not found: scaleway_rdb_instance.main")
17001615
}
17011616

1617+
// Capture the old instance ID
1618+
_, _, ID, err := rdb.NewAPIWithRegionAndID(tt.Meta, rs.Primary.ID)
1619+
if err != nil {
1620+
return err
1621+
}
1622+
oldInstanceID = ID
1623+
1624+
// Verify upgradable_versions is populated
17021625
upgradableVersionsCount := rs.Primary.Attributes["upgradable_versions.#"]
17031626
if upgradableVersionsCount == "" || upgradableVersionsCount == "0" {
17041627
return fmt.Errorf("expected at least one upgradable version, got %s", upgradableVersionsCount)
@@ -1729,76 +1652,47 @@ func TestAccInstance_UpgradableVersionsRead(t *testing.T) {
17291652
},
17301653
),
17311654
},
1732-
},
1733-
})
1734-
}
1735-
1736-
func TestAccInstance_EngineUpgrade_OldInstanceDestroyed(t *testing.T) {
1737-
tt := acctest.NewTestTools(t)
1738-
defer tt.Cleanup()
1739-
1740-
oldVersion, newVersion := rdbchecks.GetEngineVersionsForUpgrade(tt, postgreSQLEngineName)
1741-
if oldVersion == newVersion {
1742-
t.Skip("Need at least 2 different PostgreSQL versions for upgrade testing")
1743-
}
1744-
1745-
var oldInstanceID string
1746-
1747-
resource.ParallelTest(t, resource.TestCase{
1748-
PreCheck: func() { acctest.PreCheck(t) },
1749-
ProtoV6ProviderFactories: tt.ProviderFactories,
1750-
CheckDestroy: rdbchecks.IsInstanceDestroyed(tt),
1751-
Steps: []resource.TestStep{
1655+
// Step 2: Attempt upgrade to invalid version (should fail)
17521656
{
1753-
Config: fmt.Sprintf(`
1657+
Config: `
17541658
resource "scaleway_rdb_instance" "main" {
1755-
name = "test-rdb-old-destroyed"
1659+
name = "test-rdb-engine-upgrade"
17561660
node_type = "db-dev-s"
1757-
engine = %q
1661+
engine = "PostgreSQL-99.99"
17581662
is_ha_cluster = false
17591663
disable_backup = true
17601664
user_name = "test_user"
17611665
password = "thiZ_is_v&ry_s3cret"
1762-
tags = ["terraform-test", "old-instance-check"]
1666+
tags = ["terraform-test", "engine-upgrade"]
17631667
volume_type = "sbs_5k"
17641668
volume_size_in_gb = 10
17651669
}
1766-
`, oldVersion),
1767-
Check: resource.ComposeTestCheckFunc(
1768-
isInstancePresent(tt, "scaleway_rdb_instance.main"),
1769-
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "engine", oldVersion),
1770-
func(s *terraform.State) error {
1771-
rs, ok := s.RootModule().Resources["scaleway_rdb_instance.main"]
1772-
if !ok {
1773-
return fmt.Errorf("resource not found: scaleway_rdb_instance.main")
1774-
}
1775-
_, _, ID, err := rdb.NewAPIWithRegionAndID(tt.Meta, rs.Primary.ID)
1776-
if err != nil {
1777-
return err
1778-
}
1779-
oldInstanceID = ID
1780-
return nil
1781-
},
1782-
),
1670+
`,
1671+
ExpectError: regexp.MustCompile(`engine version PostgreSQL-99\.99 is not available for upgrade`),
17831672
},
1673+
// Step 3: Upgrade to valid new version and verify old instance destroyed
17841674
{
17851675
Config: fmt.Sprintf(`
17861676
resource "scaleway_rdb_instance" "main" {
1787-
name = "test-rdb-old-destroyed"
1677+
name = "test-rdb-engine-upgrade"
17881678
node_type = "db-dev-s"
17891679
engine = %q
17901680
is_ha_cluster = false
17911681
disable_backup = true
17921682
user_name = "test_user"
17931683
password = "thiZ_is_v&ry_s3cret"
1794-
tags = ["terraform-test", "old-instance-check"]
1684+
tags = ["terraform-test", "engine-upgrade"]
17951685
volume_type = "sbs_5k"
17961686
volume_size_in_gb = 10
17971687
}
17981688
`, newVersion),
17991689
Check: resource.ComposeTestCheckFunc(
18001690
isInstancePresent(tt, "scaleway_rdb_instance.main"),
18011691
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "engine", newVersion),
1692+
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "name", "test-rdb-engine-upgrade"),
1693+
// Verify endpoints are preserved
1694+
resource.TestCheckResourceAttrSet("scaleway_rdb_instance.main", "load_balancer.0.ip"),
1695+
// Verify instance ID changed and old instance is destroyed
18021696
func(s *terraform.State) error {
18031697
rs, ok := s.RootModule().Resources["scaleway_rdb_instance.main"]
18041698
if !ok {
@@ -1837,26 +1731,3 @@ func TestAccInstance_EngineUpgrade_OldInstanceDestroyed(t *testing.T) {
18371731
})
18381732
}
18391733

1840-
func isInstancePresent(tt *acctest.TestTools, n string) resource.TestCheckFunc {
1841-
return func(s *terraform.State) error {
1842-
rs, ok := s.RootModule().Resources[n]
1843-
if !ok {
1844-
return fmt.Errorf("resource not found: %s", n)
1845-
}
1846-
1847-
rdbAPI, region, ID, err := rdb.NewAPIWithRegionAndID(tt.Meta, rs.Primary.ID)
1848-
if err != nil {
1849-
return err
1850-
}
1851-
1852-
_, err = rdbAPI.GetInstance(&rdbSDK.GetInstanceRequest{
1853-
InstanceID: ID,
1854-
Region: region,
1855-
})
1856-
if err != nil {
1857-
return err
1858-
}
1859-
1860-
return nil
1861-
}
1862-
}

0 commit comments

Comments
 (0)