github.com/paultyng/terraform@v0.6.11-0.20180227224804-66ff8f8bed40/configs/configload/loader_init_from_module_test.go (about) 1 package configload 2 3 import ( 4 "os" 5 "path/filepath" 6 "strings" 7 "testing" 8 9 version "github.com/hashicorp/go-version" 10 "github.com/hashicorp/terraform/configs" 11 ) 12 13 func TestLoaderInitDirFromModule_registry(t *testing.T) { 14 if os.Getenv("TF_ACC") == "" { 15 t.Skip("this test accesses registry.terraform.io and github.com; set TF_ACC=1 to run it") 16 } 17 18 fixtureDir := filepath.Clean("test-fixtures/empty") 19 loader, done := tempChdirLoader(t, fixtureDir) 20 defer done() 21 22 hooks := &testInstallHooks{} 23 24 diags := loader.InitDirFromModule(".", "hashicorp/module-installer-acctest/aws//examples/main", hooks) 25 assertNoDiagnostics(t, diags) 26 27 v := version.Must(version.NewVersion("0.0.1")) 28 29 wantCalls := []testInstallHookCall{ 30 // The module specified to populate the root directory is not mentioned 31 // here, because the hook mechanism is defined to talk about descendent 32 // modules only and so a caller to InitDirFromModule is expected to 33 // produce its own user-facing announcement about the root module being 34 // installed. 35 36 // Note that "root" in the following examples is, confusingly, the 37 // label on the module block in the example we've installed here: 38 // module "root" { 39 40 { 41 Name: "Download", 42 ModuleAddr: "root", 43 PackageAddr: "hashicorp/module-installer-acctest/aws", 44 Version: v, 45 }, 46 { 47 Name: "Install", 48 ModuleAddr: "root", 49 Version: v, 50 LocalPath: ".terraform/modules/root/hashicorp-terraform-aws-module-installer-acctest-5e87aff", 51 }, 52 { 53 Name: "Install", 54 ModuleAddr: "root.child_a", 55 LocalPath: ".terraform/modules/root/hashicorp-terraform-aws-module-installer-acctest-5e87aff/modules/child_a", 56 }, 57 { 58 Name: "Install", 59 ModuleAddr: "root.child_a.child_b", 60 LocalPath: ".terraform/modules/root/hashicorp-terraform-aws-module-installer-acctest-5e87aff/modules/child_b", 61 }, 62 } 63 64 if assertResultDeepEqual(t, hooks.Calls, wantCalls) { 65 return 66 } 67 68 // Make sure the configuration is loadable now. 69 // (This ensures that correct information is recorded in the manifest.) 70 config, loadDiags := loader.LoadConfig(".") 71 if assertNoDiagnostics(t, loadDiags) { 72 return 73 } 74 75 wantTraces := map[string]string{ 76 "": "in example", 77 "root": "in root module", 78 "root.child_a": "in child_a module", 79 "root.child_a.child_b": "in child_b module", 80 } 81 gotTraces := map[string]string{} 82 config.DeepEach(func(c *configs.Config) { 83 path := strings.Join(c.Path, ".") 84 if c.Module.Variables["v"] == nil { 85 gotTraces[path] = "<missing>" 86 return 87 } 88 varDesc := c.Module.Variables["v"].Description 89 gotTraces[path] = varDesc 90 }) 91 assertResultDeepEqual(t, gotTraces, wantTraces) 92 }