From 58e15c7f0e235bebae07fadf7ad7c7996443b48f Mon Sep 17 00:00:00 2001 From: James Bardin Date: Wed, 7 Sep 2022 17:29:01 -0400 Subject: [PATCH] add terraform_data e2e test --- internal/command/e2etest/terraform_test.go | 55 +++++++++++++++++++ .../testdata/terraform-managed-data/main.tf | 18 ++++++ 2 files changed, 73 insertions(+) create mode 100644 internal/command/e2etest/terraform_test.go create mode 100644 internal/command/e2etest/testdata/terraform-managed-data/main.tf diff --git a/internal/command/e2etest/terraform_test.go b/internal/command/e2etest/terraform_test.go new file mode 100644 index 0000000000..a6e706c3bb --- /dev/null +++ b/internal/command/e2etest/terraform_test.go @@ -0,0 +1,55 @@ +package e2etest + +import ( + "path/filepath" + "strings" + "testing" + + "github.com/hashicorp/terraform/internal/addrs" + "github.com/hashicorp/terraform/internal/e2e" +) + +func TestTerraformProviderData(t *testing.T) { + + fixturePath := filepath.Join("testdata", "terraform-managed-data") + tf := e2e.NewBinary(t, terraformBin, fixturePath) + + _, stderr, err := tf.Run("init", "-input=false") + if err != nil { + t.Fatalf("unexpected init error: %s\nstderr:\n%s", err, stderr) + } + + stdout, stderr, err := tf.Run("plan", "-out=tfplan", "-input=false") + if err != nil { + t.Fatalf("unexpected plan error: %s\nstderr:\n%s", err, stderr) + } + + if !strings.Contains(stdout, "4 to add, 0 to change, 0 to destroy") { + t.Errorf("incorrect plan tally; want 4 to add:\n%s", stdout) + } + + stdout, stderr, err = tf.Run("apply", "-input=false", "tfplan") + if err != nil { + t.Fatalf("unexpected apply error: %s\nstderr:\n%s", err, stderr) + } + + if !strings.Contains(stdout, "Resources: 4 added, 0 changed, 0 destroyed") { + t.Errorf("incorrect apply tally; want 4 added:\n%s", stdout) + } + + state, err := tf.LocalState() + if err != nil { + t.Fatalf("failed to read state file: %s", err) + } + + // we'll check the final output to validate the resources + d := state.Module(addrs.RootModuleInstance).OutputValues["d"].Value + input := d.GetAttr("input") + output := d.GetAttr("output") + if input.IsNull() { + t.Fatal("missing input from resource d") + } + if !input.RawEquals(output) { + t.Fatalf("input %#v does not equal output %#v\n", input, output) + } +} diff --git a/internal/command/e2etest/testdata/terraform-managed-data/main.tf b/internal/command/e2etest/testdata/terraform-managed-data/main.tf new file mode 100644 index 0000000000..2e69094d0b --- /dev/null +++ b/internal/command/e2etest/testdata/terraform-managed-data/main.tf @@ -0,0 +1,18 @@ +resource "terraform_data" "a" { +} + +resource "terraform_data" "b" { + input = terraform_data.a.id +} + +resource "terraform_data" "c" { + trigger = terraform_data.b +} + +resource "terraform_data" "d" { + input = [ terraform_data.b, terraform_data.c ] +} + +output "d" { + value = terraform_data.d +}