Skip to content

Commit 8d5d3f9

Browse files
committed
acceptance tests updates
1 parent 8d9b168 commit 8d5d3f9

File tree

2 files changed

+26
-55
lines changed

2 files changed

+26
-55
lines changed

internal/providersdkv2/data_source_packer_bucket_names_test.go

Lines changed: 26 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ package providersdkv2
55

66
import (
77
"fmt"
8-
"strconv"
8+
"strings"
99
"testing"
1010

1111
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
@@ -21,8 +21,8 @@ func TestAcc_Packer_dataSourcePackerBucketNames(t *testing.T) {
2121
config := testConfig(testAccConfigBuildersToString(bucketNames))
2222
dataAddr := bucketNames.BlockName()
2323

24-
// Must not be Parallel: steps share API state and compare list length deltas.
25-
var baselineCount int
24+
// Assertions use only our slug names, not names.#, so this test stays valid when
25+
// other TestAcc_Packer_* run in parallel (-parallel=N) against the same HCP project.
2626

2727
resource.Test(t, resource.TestCase{
2828
PreCheck: func() { testAccPreCheck(t, map[string]bool{"aws": false, "azure": false}) },
@@ -34,10 +34,10 @@ func TestAcc_Packer_dataSourcePackerBucketNames(t *testing.T) {
3434
},
3535
Config: config,
3636
Check: resource.ComposeTestCheckFunc(
37-
func(*terraform.State) error {
38-
baselineCount = testAccPackerListBucketCount(t)
39-
return nil
40-
},
37+
resource.TestCheckResourceAttrSet(dataAddr, "id"),
38+
testAccCheckPackerBucketNamesNotContains(dataAddr, bucket0),
39+
testAccCheckPackerBucketNamesNotContains(dataAddr, bucket1),
40+
testAccCheckPackerBucketNamesNotContains(dataAddr, bucket2),
4141
),
4242
},
4343
{
@@ -46,8 +46,9 @@ func TestAcc_Packer_dataSourcePackerBucketNames(t *testing.T) {
4646
},
4747
Config: config,
4848
Check: resource.ComposeTestCheckFunc(
49-
testAccCheckPackerBucketNamesCountEquals(dataAddr, baselineCount+1),
5049
resource.TestCheckTypeSetElemAttr(dataAddr, "names.*", bucket0),
50+
testAccCheckPackerBucketNamesNotContains(dataAddr, bucket1),
51+
testAccCheckPackerBucketNamesNotContains(dataAddr, bucket2),
5152
),
5253
},
5354
{
@@ -57,7 +58,6 @@ func TestAcc_Packer_dataSourcePackerBucketNames(t *testing.T) {
5758
},
5859
Config: config,
5960
Check: resource.ComposeTestCheckFunc(
60-
testAccCheckPackerBucketNamesCountEquals(dataAddr, baselineCount+3),
6161
resource.TestCheckTypeSetElemAttr(dataAddr, "names.*", bucket0),
6262
resource.TestCheckTypeSetElemAttr(dataAddr, "names.*", bucket1),
6363
resource.TestCheckTypeSetElemAttr(dataAddr, "names.*", bucket2),
@@ -71,45 +71,36 @@ func TestAcc_Packer_dataSourcePackerBucketNames(t *testing.T) {
7171
},
7272
Config: config,
7373
Check: resource.ComposeTestCheckFunc(
74-
testAccCheckPackerBucketNamesCountEquals(dataAddr, baselineCount),
74+
testAccCheckPackerBucketNamesNotContains(dataAddr, bucket0),
75+
testAccCheckPackerBucketNamesNotContains(dataAddr, bucket1),
76+
testAccCheckPackerBucketNamesNotContains(dataAddr, bucket2),
7577
),
7678
},
7779
},
7880
})
7981
}
8082

81-
func testAccCheckPackerBucketNamesCountEquals(addr string, want int) resource.TestCheckFunc {
83+
func testAccCheckPackerBucketNamesNotContains(addr, bucketName string) resource.TestCheckFunc {
8284
return func(s *terraform.State) error {
83-
got, err := testAccPackerBucketNamesCount(s, addr)
84-
if err != nil {
85-
return err
85+
rs, ok := s.RootModule().Resources[addr]
86+
if !ok {
87+
return fmt.Errorf("resource not found: %s", addr)
8688
}
87-
if got != want {
88-
return fmt.Errorf("%s: names.# expected %d, got %d", addr, want, got)
89+
if rs.Primary == nil {
90+
return fmt.Errorf("no primary instance: %s", addr)
91+
}
92+
for k, v := range rs.Primary.Attributes {
93+
if !strings.HasPrefix(k, "names.") || k == "names.#" {
94+
continue
95+
}
96+
if v == bucketName {
97+
return fmt.Errorf("%s: expected names set not to include %q, but it does (attribute %q)", addr, bucketName, k)
98+
}
8999
}
90100
return nil
91101
}
92102
}
93103

94-
func testAccPackerBucketNamesCount(s *terraform.State, addr string) (int, error) {
95-
rs, ok := s.RootModule().Resources[addr]
96-
if !ok {
97-
return 0, fmt.Errorf("resource not found: %s", addr)
98-
}
99-
if rs.Primary == nil {
100-
return 0, fmt.Errorf("no primary instance: %s", addr)
101-
}
102-
raw, ok := rs.Primary.Attributes["names.#"]
103-
if !ok {
104-
return 0, fmt.Errorf("%s: names.# not in state", addr)
105-
}
106-
n, err := strconv.Atoi(raw)
107-
if err != nil {
108-
return 0, fmt.Errorf("parse names.#: %w", err)
109-
}
110-
return n, nil
111-
}
112-
113104
func testAccPackerDataBucketNamesBuilder(uniqueName string) testAccConfigBuilderInterface {
114105
return testAccResourceConfigBuilder{
115106
isData: true,

internal/providersdkv2/test_helpers_for_packer_test.go

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
package providersdkv2
55

66
import (
7-
"context"
87
"errors"
98
"fmt"
109
"net/http"
@@ -23,25 +22,6 @@ import (
2322
"google.golang.org/grpc/codes"
2423
)
2524

26-
// testAccPackerListBucketCount returns the number of Packer buckets in the test project via the
27-
// same ListBuckets API the data source uses. Prefer this over reading names.# from Terraform
28-
// state for baselines: the first data source read can briefly disagree with the API after
29-
// registry upsert.
30-
func testAccPackerListBucketCount(t *testing.T) int {
31-
t.Helper()
32-
33-
client := testAccProvider.Meta().(*clients.Client)
34-
loc := &sharedmodels.HashicorpCloudLocationLocation{
35-
OrganizationID: client.Config.OrganizationID,
36-
ProjectID: client.Config.ProjectID,
37-
}
38-
buckets, err := packerv2.ListBuckets(context.Background(), client, loc)
39-
if err != nil {
40-
t.Fatalf("ListBuckets: %v", err)
41-
}
42-
return len(buckets)
43-
}
44-
4525
func upsertRegistry(t *testing.T) {
4626
t.Helper()
4727

0 commit comments

Comments
 (0)