From 01e3386e13527dbd75aea90da82df316bf107859 Mon Sep 17 00:00:00 2001 From: Chris Marchesi Date: Thu, 22 Jun 2017 03:44:16 -0700 Subject: [PATCH] core: Add resource count scale-out EvalTree test This test ensures that the right EvalSequence gets set for a refresh node with no state. This will ultimately assert that nodes on scale out will not go down the regular refresh path, which would result in an error due to the nil state - instead, we stub this node so that we get a diff on it that can be used to effect computed/unknown values on interpolations that may depend on this node. --- terraform/node_resource_refresh_test.go | 80 +++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/terraform/node_resource_refresh_test.go b/terraform/node_resource_refresh_test.go index 8eca1c1f8..5a542a9fe 100644 --- a/terraform/node_resource_refresh_test.go +++ b/terraform/node_resource_refresh_test.go @@ -1,8 +1,11 @@ package terraform import ( + "reflect" "sync" "testing" + + "github.com/davecgh/go-spew/spew" ) func TestNodeRefreshableManagedResourceDynamicExpand_scaleOut(t *testing.T) { @@ -152,3 +155,80 @@ root - terraform.graphNodeRoot t.Fatalf("Expected:\n%s\nGot:\n%s", expected, actual) } } + +func TestNodeRefreshableManagedResourceEvalTree_scaleOut(t *testing.T) { + var provider ResourceProvider + var state *InstanceState + var resourceConfig *ResourceConfig + + addr, err := ParseResourceAddress("aws_instance.foo[2]") + if err != nil { + t.Fatalf("bad: %s", err) + } + + m := testModule(t, "refresh-resource-scale-inout") + + n := &NodeRefreshableManagedResourceInstance{ + NodeAbstractResource: &NodeAbstractResource{ + Addr: addr, + Config: m.Config().Resources[0], + }, + } + + actual := n.EvalTree() + + expected := &EvalSequence{ + Nodes: []EvalNode{ + &EvalInterpolate{ + Config: n.Config.RawConfig.Copy(), + Resource: &Resource{ + Name: addr.Name, + Type: addr.Type, + CountIndex: addr.Index, + }, + Output: &resourceConfig, + }, + &EvalGetProvider{ + Name: n.ProvidedBy()[0], + Output: &provider, + }, + &EvalValidateResource{ + Provider: &provider, + Config: &resourceConfig, + ResourceName: n.Config.Name, + ResourceType: n.Config.Type, + ResourceMode: n.Config.Mode, + IgnoreWarnings: true, + }, + &EvalReadState{ + Name: addr.stateId(), + Output: &state, + }, + &EvalDiff{ + Name: addr.stateId(), + Info: &InstanceInfo{ + Id: addr.stateId(), + Type: addr.Type, + ModulePath: normalizeModulePath(addr.Path), + }, + Config: &resourceConfig, + Resource: n.Config, + Provider: &provider, + State: &state, + OutputState: &state, + Stub: true, + }, + &EvalWriteState{ + Name: addr.stateId(), + ResourceType: n.Config.Type, + Provider: n.Config.Provider, + Dependencies: n.StateReferences(), + State: &state, + }, + }, + } + + if !reflect.DeepEqual(expected, actual) { + t.Fatalf("Expected:\n\n%s\nGot:\n\n%s\n", spew.Sdump(expected), spew.Sdump(actual)) + } +}