@@ -5,7 +5,7 @@ package providersdkv2
55
66import (
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-
113104func testAccPackerDataBucketNamesBuilder (uniqueName string ) testAccConfigBuilderInterface {
114105 return testAccResourceConfigBuilder {
115106 isData : true ,
0 commit comments