From c01dfa7757613151642e95e478a0942394860e19 Mon Sep 17 00:00:00 2001 From: James Bardin Date: Tue, 24 Oct 2017 16:00:42 -0400 Subject: [PATCH] failing test for changing intermediate modules This test highlights how changing an intermediate source path prevents reloading of submodules. While this is somewhat of an edge case now, it becomes quite common in the cacse where module versions are updated. --- .../change-intermediate-source/a/b/main.tf | 1 + .../change-intermediate-source/a/main.tf | 3 + .../change-intermediate-source/c/b/main.tf | 1 + .../change-intermediate-source/c/main.tf | 3 + .../change-intermediate-source/main.tf | 3 + .../main.tf.disabled | 3 + config/module/tree_test.go | 64 +++++++++++++++++++ 7 files changed, 78 insertions(+) create mode 100644 config/module/test-fixtures/change-intermediate-source/a/b/main.tf create mode 100644 config/module/test-fixtures/change-intermediate-source/a/main.tf create mode 100644 config/module/test-fixtures/change-intermediate-source/c/b/main.tf create mode 100644 config/module/test-fixtures/change-intermediate-source/c/main.tf create mode 100644 config/module/test-fixtures/change-intermediate-source/main.tf create mode 100644 config/module/test-fixtures/change-intermediate-source/main.tf.disabled diff --git a/config/module/test-fixtures/change-intermediate-source/a/b/main.tf b/config/module/test-fixtures/change-intermediate-source/a/b/main.tf new file mode 100644 index 0000000000..b91fad57a4 --- /dev/null +++ b/config/module/test-fixtures/change-intermediate-source/a/b/main.tf @@ -0,0 +1 @@ +resource "test_resource" "a-b" {} diff --git a/config/module/test-fixtures/change-intermediate-source/a/main.tf b/config/module/test-fixtures/change-intermediate-source/a/main.tf new file mode 100644 index 0000000000..acbf03927e --- /dev/null +++ b/config/module/test-fixtures/change-intermediate-source/a/main.tf @@ -0,0 +1,3 @@ +module "b" { + source = "./b" +} diff --git a/config/module/test-fixtures/change-intermediate-source/c/b/main.tf b/config/module/test-fixtures/change-intermediate-source/c/b/main.tf new file mode 100644 index 0000000000..5a3565b33f --- /dev/null +++ b/config/module/test-fixtures/change-intermediate-source/c/b/main.tf @@ -0,0 +1 @@ +resource "test_resource" "c-b" {} diff --git a/config/module/test-fixtures/change-intermediate-source/c/main.tf b/config/module/test-fixtures/change-intermediate-source/c/main.tf new file mode 100644 index 0000000000..acbf03927e --- /dev/null +++ b/config/module/test-fixtures/change-intermediate-source/c/main.tf @@ -0,0 +1,3 @@ +module "b" { + source = "./b" +} diff --git a/config/module/test-fixtures/change-intermediate-source/main.tf b/config/module/test-fixtures/change-intermediate-source/main.tf new file mode 100644 index 0000000000..2326ee22ac --- /dev/null +++ b/config/module/test-fixtures/change-intermediate-source/main.tf @@ -0,0 +1,3 @@ +module "a" { + source = "./a" +} diff --git a/config/module/test-fixtures/change-intermediate-source/main.tf.disabled b/config/module/test-fixtures/change-intermediate-source/main.tf.disabled new file mode 100644 index 0000000000..52dabca933 --- /dev/null +++ b/config/module/test-fixtures/change-intermediate-source/main.tf.disabled @@ -0,0 +1,3 @@ +module "a" { + source = "./c" +} diff --git a/config/module/tree_test.go b/config/module/tree_test.go index 705f90859a..26a1729775 100644 --- a/config/module/tree_test.go +++ b/config/module/tree_test.go @@ -724,7 +724,71 @@ func TestTreeLoad_conflictingSubmoduleNames(t *testing.T) { t.Fatal("found wrong resource in b/c:", res.Name) } } + } + } +} + +// changing the source for a module but not the module "path" +func TestTreeLoad_changeIntermediateSource(t *testing.T) { + // copy the config to our tempdir this time, since we're going to edit it + td, err := ioutil.TempDir("", "tf") + if err != nil { + t.Fatalf("err: %s", err) + } + defer os.RemoveAll(td) + + if err := copyDir(td, filepath.Join(fixtureDir, "change-intermediate-source")); err != nil { + t.Fatal(err) + } + + wd, err := os.Getwd() + if err != nil { + t.Fatal(err) + } + if err := os.Chdir(td); err != nil { + t.Fatal(err) + } + defer os.Chdir(wd) + + if err := os.MkdirAll(".terraform/modules", 0777); err != nil { + t.Fatal(err) + } + storage := &getter.FolderStorage{StorageDir: ".terraform/modules"} + cfg, err := config.LoadDir("./") + if err != nil { + t.Fatal(err) + } + tree := NewTree("", cfg) + if err := tree.Load(storage, GetModeGet); err != nil { + t.Fatalf("load failed: %s", err) + } + + // now we change the source of our module, without changing its path + if err := os.Rename("main.tf.disabled", "main.tf"); err != nil { + t.Fatal(err) + } + + // reload the tree + cfg, err = config.LoadDir("./") + if err != nil { + t.Fatal(err) + } + tree = NewTree("", cfg) + if err := tree.Load(storage, GetModeGet); err != nil { + t.Fatalf("load failed: %s", err) + } + // check for our resource in b + for _, c := range tree.Children() { + for _, gc := range c.Children() { + if len(gc.config.Resources) != 1 { + t.Fatalf("expected 1 resource in %s, got %d", gc.name, len(gc.config.Resources)) + } + res := gc.config.Resources[0] + expected := "c-b" + if res.Name != expected { + t.Fatalf("expexted resource %q, got %q", expected, res.Name) + } } } }