@@ -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+ }
15471570func 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