From eb20db92cfc32f36d04d65448c74ca3eacaedb19 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sun, 23 Oct 2016 18:53:00 -0700 Subject: [PATCH] terraform: test that data sources can reference other data sources --- terraform/context_refresh_test.go | 37 +++++++++++++++++++ terraform/context_test.go | 12 ++++++ terraform/terraform_test.go | 14 +++++++ .../refresh-data-ref-data/main.tf | 7 ++++ 4 files changed, 70 insertions(+) create mode 100644 terraform/test-fixtures/refresh-data-ref-data/main.tf diff --git a/terraform/context_refresh_test.go b/terraform/context_refresh_test.go index 12e084cb4..8aa279fe0 100644 --- a/terraform/context_refresh_test.go +++ b/terraform/context_refresh_test.go @@ -640,6 +640,43 @@ func TestContext2Refresh_dataState(t *testing.T) { } } +func TestContext2Refresh_dataStateRefData(t *testing.T) { + p := testProvider("null") + m := testModule(t, "refresh-data-ref-data") + state := &State{ + Modules: []*ModuleState{ + &ModuleState{ + Path: rootModulePath, + // Intentionally no resources since data resources are + // supposed to refresh themselves even if they didn't + // already exist. + Resources: map[string]*ResourceState{}, + }, + }, + } + ctx := testContext2(t, &ContextOpts{ + Module: m, + Providers: map[string]ResourceProviderFactory{ + "null": testProviderFuncFixed(p), + }, + State: state, + }) + + p.ReadDataDiffFn = testDataDiffFn + p.ReadDataApplyFn = testDataApplyFn + + s, err := ctx.Refresh() + if err != nil { + t.Fatalf("err: %s", err) + } + + actual := strings.TrimSpace(s.String()) + expected := strings.TrimSpace(testTerraformRefreshDataRefDataStr) + if actual != expected { + t.Fatalf("bad:\n\n%s\n\n%s", actual, expected) + } +} + func TestContext2Refresh_tainted(t *testing.T) { p := testProvider("aws") m := testModule(t, "refresh-basic") diff --git a/terraform/context_test.go b/terraform/context_test.go index ed5ca3c65..f849d21dc 100644 --- a/terraform/context_test.go +++ b/terraform/context_test.go @@ -79,6 +79,18 @@ func testContext2(t *testing.T, opts *ContextOpts) *Context { return ctx } +func testDataApplyFn( + info *InstanceInfo, + d *InstanceDiff) (*InstanceState, error) { + return testApplyFn(info, new(InstanceState), d) +} + +func testDataDiffFn( + info *InstanceInfo, + c *ResourceConfig) (*InstanceDiff, error) { + return testDiffFn(info, new(InstanceState), c) +} + func testApplyFn( info *InstanceInfo, s *InstanceState, diff --git a/terraform/terraform_test.go b/terraform/terraform_test.go index f58e3b116..40a4b962d 100644 --- a/terraform/terraform_test.go +++ b/terraform/terraform_test.go @@ -1492,3 +1492,17 @@ hcl_instance.hcltest: foo.1 = b type = hcl_instance ` + +const testTerraformRefreshDataRefDataStr = ` +data.null_data_source.bar: + ID = foo + bar = yes + type = null_data_source + + Dependencies: + data.null_data_source.foo +data.null_data_source.foo: + ID = foo + foo = yes + type = null_data_source +` diff --git a/terraform/test-fixtures/refresh-data-ref-data/main.tf b/terraform/test-fixtures/refresh-data-ref-data/main.tf new file mode 100644 index 000000000..5512be233 --- /dev/null +++ b/terraform/test-fixtures/refresh-data-ref-data/main.tf @@ -0,0 +1,7 @@ +data "null_data_source" "foo" { + foo = "yes" +} + +data "null_data_source" "bar" { + bar = "${data.null_data_source.foo.foo}" +}