80 lines
2.1 KiB
Go
80 lines
2.1 KiB
Go
|
package test
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/hashicorp/terraform/helper/resource"
|
||
|
"github.com/hashicorp/terraform/terraform"
|
||
|
)
|
||
|
|
||
|
// This is actually a test of some core functionality in conjunction with
|
||
|
// helper/schema, rather than of the test provider itself.
|
||
|
//
|
||
|
// Here we're just verifying that unknown splats get flattened when assigned
|
||
|
// to list and set attributes. A variety of other situations are tested in
|
||
|
// an apply context test in the core package, but for this part we lean on
|
||
|
// helper/schema and thus need to exercise it at a higher level.
|
||
|
|
||
|
func TestSplatFlatten(t *testing.T) {
|
||
|
resource.UnitTest(t, resource.TestCase{
|
||
|
Providers: testAccProviders,
|
||
|
CheckDestroy: testAccCheckResourceDestroy,
|
||
|
Steps: []resource.TestStep{
|
||
|
resource.TestStep{
|
||
|
Config: `
|
||
|
resource "test_resource" "source" {
|
||
|
required = "foo ${count.index}"
|
||
|
required_map = {
|
||
|
key = "value"
|
||
|
}
|
||
|
count = 3
|
||
|
}
|
||
|
|
||
|
resource "test_resource" "splatted" {
|
||
|
# This legacy form of splatting into a list is still supported for
|
||
|
# backward-compatibility but no longer suggested.
|
||
|
set = ["${test_resource.source.*.computed_from_required}"]
|
||
|
list = ["${test_resource.source.*.computed_from_required}"]
|
||
|
|
||
|
required = "yep"
|
||
|
required_map = {
|
||
|
key = "value"
|
||
|
}
|
||
|
}
|
||
|
`,
|
||
|
Check: func(s *terraform.State) error {
|
||
|
gotAttrs := s.RootModule().Resources["test_resource.splatted"].Primary.Attributes
|
||
|
t.Logf("attrs %#v", gotAttrs)
|
||
|
wantAttrs := map[string]string{
|
||
|
"list.#": "3",
|
||
|
"list.0": "foo 0",
|
||
|
"list.1": "foo 1",
|
||
|
"list.2": "foo 2",
|
||
|
|
||
|
// This depends on the default set hash implementation.
|
||
|
// If that changes, these keys will need to be updated.
|
||
|
"set.#": "3",
|
||
|
"set.1136855734": "foo 0",
|
||
|
"set.885275168": "foo 1",
|
||
|
"set.2915920794": "foo 2",
|
||
|
}
|
||
|
errored := false
|
||
|
for k, want := range wantAttrs {
|
||
|
got := gotAttrs[k]
|
||
|
if got != want {
|
||
|
t.Errorf("Wrong %s value %q; want %q", k, got, want)
|
||
|
errored = true
|
||
|
}
|
||
|
}
|
||
|
if errored {
|
||
|
return errors.New("incorrect attribute values")
|
||
|
}
|
||
|
return nil
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
})
|
||
|
|
||
|
}
|