From d6c8b402011ef2045e8d73e5b2a1bf0ae0e14335 Mon Sep 17 00:00:00 2001 From: James Bardin Date: Wed, 10 Aug 2016 11:37:55 -0400 Subject: [PATCH] unify some of the test code Have all the values in the testDiffFn go through the same code path --- terraform/context_plan_test.go | 1 + terraform/context_test.go | 51 +++++++++++++++++----------------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/terraform/context_plan_test.go b/terraform/context_plan_test.go index 65ba03566a..5a5d50ed10 100644 --- a/terraform/context_plan_test.go +++ b/terraform/context_plan_test.go @@ -1223,6 +1223,7 @@ func TestContext2Plan_countZero(t *testing.T) { actual := strings.TrimSpace(plan.String()) expected := strings.TrimSpace(testTerraformPlanCountZeroStr) if actual != expected { + t.Logf("expected:\n%s", expected) t.Fatalf("bad:\n%s", actual) } } diff --git a/terraform/context_test.go b/terraform/context_test.go index 0d6da97fe7..3ec4d9892c 100644 --- a/terraform/context_test.go +++ b/terraform/context_test.go @@ -2,7 +2,6 @@ package terraform import ( "fmt" - "reflect" "strings" "testing" "time" @@ -167,32 +166,15 @@ func testDiffFn( v = c.Config[k] } - attrDiff := &ResourceAttrDiff{ - Old: "", - } - - if reflect.DeepEqual(v, []interface{}{}) { - attrDiff.New = "" - } else { - if s, ok := v.(string); ok { - attrDiff.New = s - } else { - // the value is something other than a string - // flatmap it, adding the diff for each value. - for k, attrDiff := range testFlatAttrDiffs(k, v) { - diff.Attributes[k] = attrDiff - } - continue + for k, attrDiff := range testFlatAttrDiffs(k, v) { + if k == "require_new" { + attrDiff.RequiresNew = true } + if _, ok := c.Raw["__"+k+"_requires_new"]; ok { + attrDiff.RequiresNew = true + } + diff.Attributes[k] = attrDiff } - - if k == "require_new" { - attrDiff.RequiresNew = true - } - if _, ok := c.Raw["__"+k+"_requires_new"]; ok { - attrDiff.RequiresNew = true - } - diff.Attributes[k] = attrDiff } for _, k := range c.ComputedKeys { @@ -232,8 +214,25 @@ func testDiffFn( // generate ResourceAttrDiffs for nested data structures in tests func testFlatAttrDiffs(k string, i interface{}) map[string]*ResourceAttrDiff { - flat := flatmap.Flatten(map[string]interface{}{k: i}) diffs := make(map[string]*ResourceAttrDiff) + // check for strings and empty containers first + switch t := i.(type) { + case string: + diffs[k] = &ResourceAttrDiff{New: t} + return diffs + case map[string]interface{}: + if len(t) == 0 { + diffs[k] = &ResourceAttrDiff{New: ""} + return diffs + } + case []interface{}: + if len(t) == 0 { + diffs[k] = &ResourceAttrDiff{New: ""} + return diffs + } + } + + flat := flatmap.Flatten(map[string]interface{}{k: i}) for k, v := range flat { attrDiff := &ResourceAttrDiff{