1
+ <% autogen_exception -%>
2
+ package networkconnectivity
3
+
4
+ <% unless version == "ga" -%>
5
+
6
+ import (
7
+ "context"
8
+ "log"
9
+ "strings"
10
+ "testing"
11
+
12
+ "github.com/hashicorp/terraform-provider-google/google/envvar"
13
+ "github.com/hashicorp/terraform-provider-google/google/sweeper"
14
+ "github.com/hashicorp/terraform-provider-google/google/tpgresource"
15
+ transport_tpg "github.com/hashicorp/terraform-provider-google/google/transport"
16
+ )
17
+
18
+ func init() {
19
+ sweeper.AddTestSweepers("NetworkConnectivitySpoke", testSweepNetworkConnectivitySpoke)
20
+ }
21
+
22
+ // At the time of writing, the CI only passes us-central1 as the region
23
+ func testSweepNetworkConnectivitySpoke(region string) error {
24
+ resourceName := "NetworkConnectivitySpoke"
25
+ log.Printf("[INFO][SWEEPER_LOG] Starting sweeper for %s", resourceName)
26
+
27
+ config, err := sweeper.SharedConfigForRegion(region)
28
+ if err != nil {
29
+ log.Printf("[INFO][SWEEPER_LOG] error getting shared config for region: %s", err)
30
+ return err
31
+ }
32
+
33
+ err = config.LoadAndValidate(context.Background())
34
+ if err != nil {
35
+ log.Printf("[INFO][SWEEPER_LOG] error loading: %s", err)
36
+ return err
37
+ }
38
+
39
+ t := &testing.T{}
40
+ billingId := envvar.GetTestBillingAccountFromEnv(t)
41
+
42
+ // Setup variables to replace in list template
43
+ d := &tpgresource.ResourceDataMock{
44
+ FieldsInSchema: map[string]interface{}{
45
+ "project": config.Project,
46
+ "region": region,
47
+ "location": region,
48
+ "zone": "-",
49
+ "billing_account": billingId,
50
+ },
51
+ }
52
+
53
+ listTemplate := strings.Split("https://networkconnectivity.googleapis.com/v1/projects/{{project}}/locations/global/spokes", "?")[0]
54
+ listUrl, err := tpgresource.ReplaceVars(d, config, listTemplate)
55
+ if err != nil {
56
+ log.Printf("[INFO][SWEEPER_LOG] error preparing sweeper list url: %s", err)
57
+ return nil
58
+ }
59
+
60
+ res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
61
+ Config: config,
62
+ Method: "GET",
63
+ Project: config.Project,
64
+ RawURL: listUrl,
65
+ UserAgent: config.UserAgent,
66
+ })
67
+ if err != nil {
68
+ log.Printf("[INFO][SWEEPER_LOG] Error in response from request %s: %s", listUrl, err)
69
+ return nil
70
+ }
71
+
72
+ resourceList, ok := res["spokes"]
73
+ if !ok {
74
+ log.Printf("[INFO][SWEEPER_LOG] Nothing found in response.")
75
+ return nil
76
+ }
77
+
78
+ rl := resourceList.([]interface{})
79
+
80
+ log.Printf("[INFO][SWEEPER_LOG] Found %d items in %s list response.", len(rl), resourceName)
81
+ // Keep count of items that aren't sweepable for logging.
82
+ nonPrefixCount := 0
83
+ for _, ri := range rl {
84
+ obj := ri.(map[string]interface{})
85
+ if obj["name"] == nil {
86
+ log.Printf("[INFO][SWEEPER_LOG] %s resource name was nil", resourceName)
87
+ return nil
88
+ }
89
+
90
+ name := tpgresource.GetResourceNameFromSelfLink(obj["name"].(string))
91
+ // Skip resources that shouldn't be sweeped
92
+ if !sweeper.IsSweepableTestResource(name) {
93
+ nonPrefixCount++
94
+ continue
95
+ }
96
+
97
+ deleteTemplate := "https://networkconnectivity.googleapis.com/v1/projects/{{project}}/locations/global/spokes/{{name}}"
98
+ deleteUrl, err := tpgresource.ReplaceVars(d, config, deleteTemplate)
99
+ if err != nil {
100
+ log.Printf("[INFO][SWEEPER_LOG] error preparing delete url: %s", err)
101
+ return nil
102
+ }
103
+ deleteUrl = deleteUrl + name
104
+
105
+ // Don't wait on operations as we may have a lot to delete
106
+ _, err = transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
107
+ Config: config,
108
+ Method: "DELETE",
109
+ Project: config.Project,
110
+ RawURL: deleteUrl,
111
+ UserAgent: config.UserAgent,
112
+ })
113
+ if err != nil {
114
+ log.Printf("[INFO][SWEEPER_LOG] Error deleting for url %s : %s", deleteUrl, err)
115
+ } else {
116
+ log.Printf("[INFO][SWEEPER_LOG] Sent delete request for %s resource: %s", resourceName, name)
117
+ }
118
+ }
119
+
120
+ if nonPrefixCount > 0 {
121
+ log.Printf("[INFO][SWEEPER_LOG] %d items were non-sweepable and skipped.", nonPrefixCount)
122
+ }
123
+
124
+ return nil
125
+ }
126
+
127
+ <% end -%>
0 commit comments