Merge pull request #19950 from hashicorp/jbardin/resource-tests
Container checks in TestCheckFuncs
This commit is contained in:
commit
35365e8ccf
|
@ -971,7 +971,19 @@ func TestCheckModuleResourceAttr(mp []string, name string, key string, value str
|
||||||
}
|
}
|
||||||
|
|
||||||
func testCheckResourceAttr(is *terraform.InstanceState, name string, key string, value string) error {
|
func testCheckResourceAttr(is *terraform.InstanceState, name string, key string, value string) error {
|
||||||
|
// Empty containers may be elided from the state.
|
||||||
|
// If the intent here is to check for an empty container, allow the key to
|
||||||
|
// also be non-existent.
|
||||||
|
emptyCheck := false
|
||||||
|
if value == "0" && (strings.HasSuffix(key, ".#") || strings.HasSuffix(key, ".%")) {
|
||||||
|
emptyCheck = true
|
||||||
|
}
|
||||||
|
|
||||||
if v, ok := is.Attributes[key]; !ok || v != value {
|
if v, ok := is.Attributes[key]; !ok || v != value {
|
||||||
|
if emptyCheck && !ok {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
if !ok {
|
if !ok {
|
||||||
return fmt.Errorf("%s: Attribute '%s' not found", name, key)
|
return fmt.Errorf("%s: Attribute '%s' not found", name, key)
|
||||||
}
|
}
|
||||||
|
@ -1014,7 +1026,20 @@ func TestCheckModuleNoResourceAttr(mp []string, name string, key string) TestChe
|
||||||
}
|
}
|
||||||
|
|
||||||
func testCheckNoResourceAttr(is *terraform.InstanceState, name string, key string) error {
|
func testCheckNoResourceAttr(is *terraform.InstanceState, name string, key string) error {
|
||||||
if _, ok := is.Attributes[key]; ok {
|
// Empty containers may sometimes be included in the state.
|
||||||
|
// If the intent here is to check for an empty container, allow the value to
|
||||||
|
// also be "0".
|
||||||
|
emptyCheck := false
|
||||||
|
if strings.HasSuffix(key, ".#") || strings.HasSuffix(key, ".%") {
|
||||||
|
emptyCheck = true
|
||||||
|
}
|
||||||
|
|
||||||
|
val, exists := is.Attributes[key]
|
||||||
|
if emptyCheck && val == "0" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if exists {
|
||||||
return fmt.Errorf("%s: Attribute '%s' found when not expected", name, key)
|
return fmt.Errorf("%s: Attribute '%s' found when not expected", name, key)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1113,3 +1113,65 @@ resource "test_instance" "foo" {}
|
||||||
const testConfigStrProvider = `
|
const testConfigStrProvider = `
|
||||||
provider "test" {}
|
provider "test" {}
|
||||||
`
|
`
|
||||||
|
|
||||||
|
func TestCheckResourceAttr_empty(t *testing.T) {
|
||||||
|
s := terraform.NewState()
|
||||||
|
s.AddModuleState(&terraform.ModuleState{
|
||||||
|
Path: []string{"root"},
|
||||||
|
Resources: map[string]*terraform.ResourceState{
|
||||||
|
"test_resource": &terraform.ResourceState{
|
||||||
|
Primary: &terraform.InstanceState{
|
||||||
|
Attributes: map[string]string{
|
||||||
|
"empty_list.#": "0",
|
||||||
|
"empty_map.%": "0",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
for _, key := range []string{
|
||||||
|
"empty_list.#",
|
||||||
|
"empty_map.%",
|
||||||
|
"missing_list.#",
|
||||||
|
"missing_map.%",
|
||||||
|
} {
|
||||||
|
t.Run(key, func(t *testing.T) {
|
||||||
|
check := TestCheckResourceAttr("test_resource", key, "0")
|
||||||
|
if err := check(s); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCheckNoResourceAttr_empty(t *testing.T) {
|
||||||
|
s := terraform.NewState()
|
||||||
|
s.AddModuleState(&terraform.ModuleState{
|
||||||
|
Path: []string{"root"},
|
||||||
|
Resources: map[string]*terraform.ResourceState{
|
||||||
|
"test_resource": &terraform.ResourceState{
|
||||||
|
Primary: &terraform.InstanceState{
|
||||||
|
Attributes: map[string]string{
|
||||||
|
"empty_list.#": "0",
|
||||||
|
"empty_map.%": "0",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
for _, key := range []string{
|
||||||
|
"empty_list.#",
|
||||||
|
"empty_map.%",
|
||||||
|
"missing_list.#",
|
||||||
|
"missing_map.%",
|
||||||
|
} {
|
||||||
|
t.Run(key, func(t *testing.T) {
|
||||||
|
check := TestCheckNoResourceAttr("test_resource", key)
|
||||||
|
if err := check(s); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue