From 8f6583c264dbce8273e95b0e28fa992dff2d9974 Mon Sep 17 00:00:00 2001 From: James Bardin Date: Mon, 21 Nov 2016 10:06:40 -0500 Subject: [PATCH] Add test for ResourceConfig.Get ResourceConfig.Get could previously return (nil, true) when looking up an interpolated map in a list because of the indexing ambiguity. Make sure we test that a non-existent value always returns false. --- terraform/resource_test.go | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/terraform/resource_test.go b/terraform/resource_test.go index 7e116b550c..dde22b1ff4 100644 --- a/terraform/resource_test.go +++ b/terraform/resource_test.go @@ -160,6 +160,18 @@ func TestResourceConfigGet(t *testing.T) { Key: "mapname.0.listkey.0.key", Value: 3, }, + + // A map assigned to a list via interpolation should Get a non-existent + // value. The test code now also checks that Get doesn't return (nil, + // true), which it previously did for this configuration. + { + Config: map[string]interface{}{ + "maplist": "${var.maplist}", + }, + Key: "maplist.0", + Value: nil, + }, + // FIXME: this is ambiguous, and matches the nested map // leaving here to catch this behaviour if it changes. { @@ -226,7 +238,11 @@ func TestResourceConfigGet(t *testing.T) { // Test getting a key t.Run(fmt.Sprintf("get-%d", i), func(t *testing.T) { - v, _ := rc.Get(tc.Key) + v, ok := rc.Get(tc.Key) + if ok && v == nil { + t.Fatal("(nil, true) returned from Get") + } + if !reflect.DeepEqual(v, tc.Value) { t.Fatalf("%d bad: %#v", i, v) }