Skip to content

Commit

Permalink
Merge pull request #984 from hashicorp/b-zero-diffs
Browse files Browse the repository at this point in the history
helper/schema: Diff should be empty if the zero value is in the state
  • Loading branch information
mitchellh committed Feb 17, 2015
2 parents c2f3f05 + c22ba7d commit 1a39903
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 0 deletions.
3 changes: 3 additions & 0 deletions helper/schema/schema.go
Original file line number Diff line number Diff line change
Expand Up @@ -810,6 +810,9 @@ func (m schemaMap) diffString(
originalN = n
n = schema.StateFunc(n)
}
if n == nil {
n = schema.Type.Zero()
}
if err := mapstructure.WeakDecode(o, &os); err != nil {
return fmt.Errorf("%s: %s", k, err)
}
Expand Down
66 changes: 66 additions & 0 deletions helper/schema/schema_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1943,6 +1943,72 @@ func TestSchemaMap_Diff(t *testing.T) {
Diff: nil,
Err: false,
},

// #48 - Zero value in state shouldn't result in diff
{
Schema: map[string]*Schema{
"port": &Schema{
Type: TypeBool,
Optional: true,
ForceNew: true,
},
},

State: &terraform.InstanceState{
Attributes: map[string]string{
"port": "false",
},
},

Config: map[string]interface{}{},

Diff: nil,

Err: false,
},

// #49 Set - Same as #47 but for sets
{
Schema: map[string]*Schema{
"route": &Schema{
Type: TypeSet,
Optional: true,
Elem: &Resource{
Schema: map[string]*Schema{
"index": &Schema{
Type: TypeInt,
Required: true,
},

"gateway": &Schema{
Type: TypeSet,
Optional: true,
Elem: &Schema{Type: TypeInt},
Set: func(a interface{}) int {
return a.(int)
},
},
},
},
Set: func(v interface{}) int {
m := v.(map[string]interface{})
return m["index"].(int)
},
},
},

State: &terraform.InstanceState{
Attributes: map[string]string{
"route.#": "0",
},
},

Config: map[string]interface{}{},

Diff: nil,

Err: false,
},
}

for i, tc := range cases {
Expand Down

0 comments on commit 1a39903

Please sign in to comment.