Skip to content

Commit 4c6b74b

Browse files
Fix and extend acceptance test sweeper. (#458)
* Fix sweeper. * Sweep Kubernetes clusters. * Sweep database clusters. * Set defaults as the sweeper does not have access to the provider DefaultFunc * Add warning to makefile target.
1 parent c932c35 commit 4c6b74b

4 files changed

Lines changed: 92 additions & 5 deletions

File tree

GNUmakefile

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
TEST?=$$(go list ./... |grep -v 'vendor')
22
GOFMT_FILES?=$$(find . -name '*.go' |grep -v vendor)
33
PKG_NAME=digitalocean
4-
SLUG=do
54

65
default: build
76

@@ -25,6 +24,10 @@ vet:
2524
exit 1; \
2625
fi
2726

27+
sweep:
28+
@echo "WARNING: This will destroy infrastructure. Use only in development accounts."
29+
go test $(TEST) -v -sweep=1
30+
2831
fmt:
2932
gofmt -w $(GOFMT_FILES)
3033

@@ -34,7 +37,6 @@ fmtcheck:
3437
errcheck:
3538
@sh -c "'$(CURDIR)/scripts/errcheck.sh'"
3639

37-
3840
test-compile:
3941
@if [ "$(TEST)" = "./..." ]; then \
4042
echo "ERROR: Set TEST to a specific package. For example,"; \
@@ -46,5 +48,4 @@ test-compile:
4648
website:
4749
@echo "Use this site to preview markdown rendering: https://registry.terraform.io/tools/doc-preview"
4850

49-
.PHONY: build test testacc vet fmt fmtcheck errcheck test-compile website
50-
51+
.PHONY: build test testacc vet fmt fmtcheck errcheck test-compile website sweep

digitalocean/resource_digitalocean_database_cluster_test.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,51 @@ package digitalocean
33
import (
44
"context"
55
"fmt"
6+
"log"
67
"regexp"
8+
"strings"
79
"testing"
810

911
"github.com/digitalocean/godo"
1012
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
1113
"github.com/hashicorp/terraform-plugin-sdk/terraform"
1214
)
1315

16+
func init() {
17+
resource.AddTestSweepers("digitalocean_database_cluster", &resource.Sweeper{
18+
Name: "digitalocean_database_cluster",
19+
F: testSweepDatabaseCluster,
20+
})
21+
22+
}
23+
24+
func testSweepDatabaseCluster(region string) error {
25+
meta, err := sharedConfigForRegion(region)
26+
if err != nil {
27+
return err
28+
}
29+
30+
client := meta.(*CombinedConfig).godoClient()
31+
32+
opt := &godo.ListOptions{PerPage: 200}
33+
databases, _, err := client.Databases.List(context.Background(), opt)
34+
if err != nil {
35+
return err
36+
}
37+
38+
for _, db := range databases {
39+
if strings.HasPrefix(db.Name, testNamePrefix) {
40+
log.Printf("Destroying database cluster %s", db.Name)
41+
42+
if _, err := client.Databases.Delete(context.Background(), db.ID); err != nil {
43+
return err
44+
}
45+
}
46+
}
47+
48+
return nil
49+
}
50+
1451
func TestAccDigitalOceanDatabaseCluster_Basic(t *testing.T) {
1552
var database godo.Database
1653
databaseName := randomTestName()

digitalocean/resource_digitalocean_kubernetes_cluster_test.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ import (
44
"context"
55
"encoding/base64"
66
"fmt"
7+
"log"
78
"reflect"
9+
"strings"
810
"testing"
911
"time"
1012

@@ -22,6 +24,41 @@ const (
2224
}`
2325
)
2426

27+
func init() {
28+
resource.AddTestSweepers("digitalocean_kubernetes_cluster", &resource.Sweeper{
29+
Name: "digitalocean_kubernetes_cluster",
30+
F: testSweepKubernetesClusters,
31+
})
32+
33+
}
34+
35+
func testSweepKubernetesClusters(region string) error {
36+
meta, err := sharedConfigForRegion(region)
37+
if err != nil {
38+
return err
39+
}
40+
41+
client := meta.(*CombinedConfig).godoClient()
42+
43+
opt := &godo.ListOptions{PerPage: 200}
44+
clusters, _, err := client.Kubernetes.List(context.Background(), opt)
45+
if err != nil {
46+
return err
47+
}
48+
log.Printf("[DEBUG] Found %d Kubernetes clusters to sweep", len(clusters))
49+
50+
for _, c := range clusters {
51+
if strings.HasPrefix(c.Name, testNamePrefix) {
52+
log.Printf("Destroying Kubernetes cluster %s", c.Name)
53+
if _, err := client.Kubernetes.Delete(context.Background(), c.ID); err != nil {
54+
return err
55+
}
56+
}
57+
}
58+
59+
return nil
60+
}
61+
2562
func TestAccDigitalOceanKubernetesCluster_Basic(t *testing.T) {
2663
t.Parallel()
2764
rName := randomTestName()

digitalocean/sweeper_test.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,20 @@ func sharedConfigForRegion(region string) (interface{}, error) {
1717
return nil, fmt.Errorf("empty DIGITALOCEAN_TOKEN")
1818
}
1919

20+
apiEndpoint := os.Getenv("DIGITALOCEAN_API_URL")
21+
if apiEndpoint == "" {
22+
apiEndpoint = "https://api.digitalocean.com"
23+
}
24+
25+
spacesEndpoint := os.Getenv("SPACES_ENDPOINT_URL")
26+
if spacesEndpoint == "" {
27+
spacesEndpoint = "https://{{.Region}}.digitaloceanspaces.com"
28+
}
29+
2030
config := Config{
21-
Token: os.Getenv("DIGITALOCEAN_TOKEN"),
31+
Token: os.Getenv("DIGITALOCEAN_TOKEN"),
32+
APIEndpoint: apiEndpoint,
33+
SpacesAPIEndpoint: spacesEndpoint,
2234
}
2335

2436
// configures a default client for the region, using the above env vars

0 commit comments

Comments
 (0)