Skip to content

Commit 80388c0

Browse files
Bootstrap storage pool in tests (#11598) (#8127)
[upstream:ea614874795283c33d234e32219c5274a3f13ffa] Signed-off-by: Modular Magician <[email protected]>
1 parent 2464da3 commit 80388c0

File tree

4 files changed

+79
-131
lines changed

4 files changed

+79
-131
lines changed

.changelog/11598.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:none
2+
3+
```

google-beta/acctest/bootstrap_test_utils.go

+72
Original file line numberDiff line numberDiff line change
@@ -1109,6 +1109,78 @@ func BootstrapFirewallForDataprocSharedNetwork(t *testing.T, firewallName string
11091109
return firewall.Name
11101110
}
11111111

1112+
const SharedStoragePoolPrefix = "tf-bootstrap-storage-pool-"
1113+
1114+
func BootstrapComputeStoragePool(t *testing.T, storagePoolName, storagePoolType string) string {
1115+
projectID := envvar.GetTestProjectFromEnv()
1116+
zone := envvar.GetTestZoneFromEnv()
1117+
1118+
storagePoolName = SharedStoragePoolPrefix + storagePoolType + "-" + storagePoolName
1119+
1120+
config := BootstrapConfig(t)
1121+
if config == nil {
1122+
t.Fatal("Could not bootstrap config.")
1123+
}
1124+
1125+
computeService := config.NewComputeClient(config.UserAgent)
1126+
if computeService == nil {
1127+
t.Fatal("Could not create compute client.")
1128+
}
1129+
1130+
_, err := computeService.StoragePools.Get(projectID, zone, storagePoolName).Do()
1131+
if err != nil && transport_tpg.IsGoogleApiErrorWithCode(err, 404) {
1132+
log.Printf("[DEBUG] Storage pool %q not found, bootstrapping", storagePoolName)
1133+
1134+
url := fmt.Sprintf("%sprojects/%s/zones/%s/storagePools", config.ComputeBasePath, projectID, zone)
1135+
storagePoolTypeUrl := fmt.Sprintf("/projects/%s/zones/%s/storagePoolTypes/%s", projectID, zone, storagePoolType)
1136+
1137+
storagePoolObj := map[string]interface{}{
1138+
"name": storagePoolName,
1139+
"poolProvisionedCapacityGb": 10240,
1140+
"poolProvisionedThroughput": 180,
1141+
"storagePoolType": storagePoolTypeUrl,
1142+
"capacityProvisioningType": "ADVANCED",
1143+
}
1144+
1145+
if storagePoolType == "hyperdisk-balanced" {
1146+
storagePoolObj["poolProvisionedIops"] = 10000
1147+
storagePoolObj["poolProvisionedThroughput"] = 1024
1148+
}
1149+
1150+
res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
1151+
Config: config,
1152+
Method: "POST",
1153+
Project: projectID,
1154+
RawURL: url,
1155+
UserAgent: config.UserAgent,
1156+
Body: storagePoolObj,
1157+
Timeout: 20 * time.Minute,
1158+
})
1159+
1160+
log.Printf("Response is, %s", res)
1161+
if err != nil {
1162+
t.Fatalf("Error bootstrapping storage pool %s: %s", storagePoolName, err)
1163+
}
1164+
1165+
log.Printf("[DEBUG] Waiting for storage pool creation to finish")
1166+
err = tpgcompute.ComputeOperationWaitTime(config, res, projectID, "Error bootstrapping storage pool", config.UserAgent, 4*time.Minute)
1167+
if err != nil {
1168+
t.Fatalf("Error bootstrapping test storage pool %s: %s", storagePoolName, err)
1169+
}
1170+
}
1171+
1172+
storagePool, err := computeService.StoragePools.Get(projectID, zone, storagePoolName).Do()
1173+
1174+
if storagePool == nil {
1175+
t.Fatalf("Error getting storage pool %s: is nil", storagePoolName)
1176+
}
1177+
1178+
if err != nil {
1179+
t.Fatalf("Error getting storage pool %s: %s", storagePoolName, err)
1180+
}
1181+
return storagePool.SelfLink
1182+
}
1183+
11121184
func SetupProjectsAndGetAccessToken(org, billing, pid, service string, config *transport_tpg.Config) (string, error) {
11131185
// Create project-1 and project-2
11141186
rmService := config.NewResourceManagerClient(config.UserAgent)

google-beta/services/compute/resource_compute_disk_test.go

+2-80
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,14 @@ package compute_test
44

55
import (
66
"fmt"
7-
"net/http"
87
"os"
98
"testing"
10-
"time"
119

1210
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
1311
"github.com/hashicorp/terraform-plugin-testing/terraform"
1412
"github.com/hashicorp/terraform-provider-google-beta/google-beta/acctest"
1513
"github.com/hashicorp/terraform-provider-google-beta/google-beta/envvar"
1614
tpgcompute "github.com/hashicorp/terraform-provider-google-beta/google-beta/services/compute"
17-
transport_tpg "github.com/hashicorp/terraform-provider-google-beta/google-beta/transport"
1815

1916
compute "google.golang.org/api/compute/v0.beta"
2017
)
@@ -1597,24 +1594,17 @@ resource "google_compute_disk" "foobar" {
15971594
}
15981595

15991596
func TestAccComputeDisk_storagePoolSpecified(t *testing.T) {
1600-
// Currently failing
1601-
acctest.SkipIfVcr(t)
16021597
t.Parallel()
16031598

1604-
storagePoolName := fmt.Sprintf("tf-test-storage-pool-%s", acctest.RandString(t, 10))
1605-
storagePoolUrl := fmt.Sprintf("/projects/%s/zones/%s/storagePools/%s", envvar.GetTestProjectFromEnv(), envvar.GetTestZoneFromEnv(), storagePoolName)
1599+
storagePoolNameLong := acctest.BootstrapComputeStoragePool(t, "basic-1", "hyperdisk-throughput")
16061600
diskName := fmt.Sprintf("tf-test-disk-%s", acctest.RandString(t, 10))
16071601

16081602
acctest.VcrTest(t, resource.TestCase{
16091603
PreCheck: func() { acctest.AccTestPreCheck(t) },
16101604
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
16111605
Steps: []resource.TestStep{
16121606
{
1613-
PreConfig: setupTestingStoragePool(t, storagePoolName),
1614-
Config: testAccComputeDisk_storagePoolSpecified(diskName, storagePoolUrl),
1615-
Check: resource.ComposeTestCheckFunc(
1616-
resource.TestCheckResourceAttr("google_compute_disk.foobar", "storage_pool", storagePoolName),
1617-
),
1607+
Config: testAccComputeDisk_storagePoolSpecified(diskName, storagePoolNameLong),
16181608
},
16191609
{
16201610
ResourceName: "google_compute_disk.foobar",
@@ -1623,74 +1613,6 @@ func TestAccComputeDisk_storagePoolSpecified(t *testing.T) {
16231613
},
16241614
},
16251615
})
1626-
1627-
cleanupTestingStoragePool(t, storagePoolName)
1628-
}
1629-
1630-
func setupTestingStoragePool(t *testing.T, storagePoolName string) func() {
1631-
return func() {
1632-
config := acctest.GoogleProviderConfig(t)
1633-
headers := make(http.Header)
1634-
project := envvar.GetTestProjectFromEnv()
1635-
zone := envvar.GetTestZoneFromEnv()
1636-
url := fmt.Sprintf("%sprojects/%s/zones/%s/storagePools", config.ComputeBasePath, project, zone)
1637-
storagePoolTypeUrl := fmt.Sprintf("/projects/%s/zones/%s/storagePoolTypes/hyperdisk-throughput", project, zone)
1638-
defaultTimeout := 20 * time.Minute
1639-
obj := make(map[string]interface{})
1640-
obj["name"] = storagePoolName
1641-
obj["poolProvisionedCapacityGb"] = 10240
1642-
obj["poolProvisionedThroughput"] = 180
1643-
obj["storagePoolType"] = storagePoolTypeUrl
1644-
obj["capacityProvisioningType"] = "ADVANCED"
1645-
1646-
res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
1647-
Config: config,
1648-
Method: "POST",
1649-
Project: project,
1650-
RawURL: url,
1651-
UserAgent: config.UserAgent,
1652-
Body: obj,
1653-
Timeout: defaultTimeout,
1654-
Headers: headers,
1655-
})
1656-
if err != nil {
1657-
t.Errorf("Error creating StoragePool: %s", err)
1658-
}
1659-
1660-
err = tpgcompute.ComputeOperationWaitTime(config, res, project, "Creating StoragePool", config.UserAgent, defaultTimeout)
1661-
if err != nil {
1662-
t.Errorf("Error waiting to create StoragePool: %s", err)
1663-
}
1664-
}
1665-
}
1666-
1667-
func cleanupTestingStoragePool(t *testing.T, storagePoolName string) {
1668-
config := acctest.GoogleProviderConfig(t)
1669-
headers := make(http.Header)
1670-
project := envvar.GetTestProjectFromEnv()
1671-
zone := envvar.GetTestZoneFromEnv()
1672-
url := fmt.Sprintf("%sprojects/%s/zones/%s/storagePools/%s", config.ComputeBasePath, project, zone, storagePoolName)
1673-
defaultTimeout := 20 * time.Minute
1674-
var obj map[string]interface{}
1675-
1676-
res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
1677-
Config: config,
1678-
Method: "DELETE",
1679-
Project: project,
1680-
RawURL: url,
1681-
UserAgent: config.UserAgent,
1682-
Body: obj,
1683-
Timeout: defaultTimeout,
1684-
Headers: headers,
1685-
})
1686-
if err != nil {
1687-
t.Errorf("Error deleting StoragePool: %s", err)
1688-
}
1689-
1690-
err = tpgcompute.ComputeOperationWaitTime(config, res, project, "Deleting StoragePool", config.UserAgent, defaultTimeout)
1691-
if err != nil {
1692-
t.Errorf("Error waiting to delete StoragePool: %s", err)
1693-
}
16941616
}
16951617

16961618
func testAccComputeDisk_storagePoolSpecified(diskName, storagePoolUrl string) string {

google-beta/services/compute/resource_compute_instance_test.go

+2-51
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"encoding/json"
77
"fmt"
88
"google.golang.org/api/googleapi"
9-
"net/http"
109
"reflect"
1110
"regexp"
1211
"sort"
@@ -22,7 +21,6 @@ import (
2221
"github.com/hashicorp/terraform-provider-google-beta/google-beta/envvar"
2322
tpgcompute "github.com/hashicorp/terraform-provider-google-beta/google-beta/services/compute"
2423
"github.com/hashicorp/terraform-provider-google-beta/google-beta/tpgresource"
25-
transport_tpg "github.com/hashicorp/terraform-provider-google-beta/google-beta/transport"
2624
"github.com/stretchr/testify/assert"
2725

2826
compute "google.golang.org/api/compute/v0.beta"
@@ -10207,24 +10205,17 @@ resource "google_compute_instance" "foobar" {
1020710205
}
1020810206

1020910207
func TestAccComputeInstance_bootDisk_storagePoolSpecified(t *testing.T) {
10210-
// Currently failing
10211-
acctest.SkipIfVcr(t)
1021210208
t.Parallel()
1021310209

1021410210
instanceName := fmt.Sprintf("tf-test-instance-%s", acctest.RandString(t, 10))
10215-
storagePoolName := fmt.Sprintf("tf-test-storage-pool-%s", acctest.RandString(t, 10))
10216-
storagePoolUrl := fmt.Sprintf("/projects/%s/zones/%s/storagePools/%s", envvar.GetTestProjectFromEnv(), envvar.GetTestZoneFromEnv(), storagePoolName)
10211+
storagePoolNameLong := acctest.BootstrapComputeStoragePool(t, "basic-1", "hyperdisk-balanced")
1021710212

1021810213
acctest.VcrTest(t, resource.TestCase{
1021910214
PreCheck: func() { acctest.AccTestPreCheck(t) },
1022010215
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
1022110216
Steps: []resource.TestStep{
1022210217
{
10223-
PreConfig: setupTestingStoragePool_HyperdiskBalanced(t, storagePoolName),
10224-
Config: testAccComputeInstance_bootDisk_storagePoolSpecified(instanceName, storagePoolUrl, envvar.GetTestZoneFromEnv()),
10225-
Check: resource.ComposeTestCheckFunc(
10226-
resource.TestCheckResourceAttr("google_compute_instance.foobar", "boot_disk.0.initialize_params.0.storage_pool", storagePoolName),
10227-
),
10218+
Config: testAccComputeInstance_bootDisk_storagePoolSpecified(instanceName, storagePoolNameLong, envvar.GetTestZoneFromEnv()),
1022810219
},
1022910220
{
1023010221
ResourceName: "google_compute_instance.foobar",
@@ -10233,46 +10224,6 @@ func TestAccComputeInstance_bootDisk_storagePoolSpecified(t *testing.T) {
1023310224
},
1023410225
},
1023510226
})
10236-
10237-
cleanupTestingStoragePool(t, storagePoolName)
10238-
}
10239-
10240-
func setupTestingStoragePool_HyperdiskBalanced(t *testing.T, storagePoolName string) func() {
10241-
return func() {
10242-
config := acctest.GoogleProviderConfig(t)
10243-
headers := make(http.Header)
10244-
project := envvar.GetTestProjectFromEnv()
10245-
zone := envvar.GetTestZoneFromEnv()
10246-
url := fmt.Sprintf("%sprojects/%s/zones/%s/storagePools", config.ComputeBasePath, project, zone)
10247-
storagePoolTypeUrl := fmt.Sprintf("/projects/%s/zones/%s/storagePoolTypes/hyperdisk-balanced", project, zone)
10248-
defaultTimeout := 20 * time.Minute
10249-
obj := make(map[string]interface{})
10250-
obj["name"] = storagePoolName
10251-
obj["poolProvisionedCapacityGb"] = 10240
10252-
obj["poolProvisionedIops"] = 10000
10253-
obj["poolProvisionedThroughput"] = 1024
10254-
obj["storagePoolType"] = storagePoolTypeUrl
10255-
obj["capacityProvisioningType"] = "ADVANCED"
10256-
10257-
res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
10258-
Config: config,
10259-
Method: "POST",
10260-
Project: project,
10261-
RawURL: url,
10262-
UserAgent: config.UserAgent,
10263-
Body: obj,
10264-
Timeout: defaultTimeout,
10265-
Headers: headers,
10266-
})
10267-
if err != nil {
10268-
t.Errorf("Error creating StoragePool: %s", err)
10269-
}
10270-
10271-
err = tpgcompute.ComputeOperationWaitTime(config, res, project, "Creating StoragePool", config.UserAgent, defaultTimeout)
10272-
if err != nil {
10273-
t.Errorf("Error waiting to create StoragePool: %s", err)
10274-
}
10275-
}
1027610227
}
1027710228

1027810229
func testAccComputeInstance_bootDisk_storagePoolSpecified(instanceName, storagePoolUrl, zone string) string {

0 commit comments

Comments
 (0)