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)) + } +}