github.com/trawler/terraform@v0.10.8-0.20171106022149-4b1c7a1d9b48/config/module/registry_test.go (about) 1 package module 2 3 import ( 4 "os" 5 "testing" 6 7 version "github.com/hashicorp/go-version" 8 "github.com/hashicorp/terraform/registry/regsrc" 9 "github.com/hashicorp/terraform/svchost" 10 "github.com/hashicorp/terraform/svchost/auth" 11 "github.com/hashicorp/terraform/svchost/disco" 12 ) 13 14 func TestLookupModuleVersions(t *testing.T) { 15 server := mockRegistry() 16 defer server.Close() 17 18 regDisco := testDisco(server) 19 20 // test with and without a hostname 21 for _, src := range []string{ 22 "example.com/test-versions/name/provider", 23 "test-versions/name/provider", 24 } { 25 modsrc, err := regsrc.ParseModuleSource(src) 26 if err != nil { 27 t.Fatal(err) 28 } 29 30 s := &Storage{Services: regDisco} 31 resp, err := s.lookupModuleVersions(modsrc) 32 if err != nil { 33 t.Fatal(err) 34 } 35 36 if len(resp.Modules) != 1 { 37 t.Fatal("expected 1 module, got", len(resp.Modules)) 38 } 39 40 mod := resp.Modules[0] 41 name := "test-versions/name/provider" 42 if mod.Source != name { 43 t.Fatalf("expected module name %q, got %q", name, mod.Source) 44 } 45 46 if len(mod.Versions) != 4 { 47 t.Fatal("expected 4 versions, got", len(mod.Versions)) 48 } 49 50 for _, v := range mod.Versions { 51 _, err := version.NewVersion(v.Version) 52 if err != nil { 53 t.Fatalf("invalid version %q: %s", v.Version, err) 54 } 55 } 56 } 57 } 58 59 func TestRegistryAuth(t *testing.T) { 60 server := mockRegistry() 61 defer server.Close() 62 63 regDisco := testDisco(server) 64 storage := testStorage(t, regDisco) 65 66 src := "private/name/provider" 67 mod, err := regsrc.ParseModuleSource(src) 68 if err != nil { 69 t.Fatal(err) 70 } 71 72 // both should fail without auth 73 _, err = storage.lookupModuleVersions(mod) 74 if err == nil { 75 t.Fatal("expected error") 76 } 77 _, err = storage.lookupModuleLocation(mod, "1.0.0") 78 if err == nil { 79 t.Fatal("expected error") 80 } 81 82 storage.Creds = auth.StaticCredentialsSource(map[svchost.Hostname]map[string]interface{}{ 83 svchost.Hostname(defaultRegistry): {"token": testCredentials}, 84 }) 85 86 _, err = storage.lookupModuleVersions(mod) 87 if err != nil { 88 t.Fatal(err) 89 } 90 _, err = storage.lookupModuleLocation(mod, "1.0.0") 91 if err != nil { 92 t.Fatal(err) 93 } 94 95 } 96 func TestLookupModuleLocationRelative(t *testing.T) { 97 server := mockRegistry() 98 defer server.Close() 99 100 regDisco := testDisco(server) 101 storage := testStorage(t, regDisco) 102 103 src := "relative/foo/bar" 104 mod, err := regsrc.ParseModuleSource(src) 105 if err != nil { 106 t.Fatal(err) 107 } 108 109 got, err := storage.lookupModuleLocation(mod, "0.2.0") 110 if err != nil { 111 t.Fatal(err) 112 } 113 114 want := server.URL + "/relative-path" 115 if got != want { 116 t.Errorf("wrong location %s; want %s", got, want) 117 } 118 119 } 120 func TestAccLookupModuleVersions(t *testing.T) { 121 if os.Getenv("TF_ACC") == "" { 122 t.Skip() 123 } 124 regDisco := disco.NewDisco() 125 126 // test with and without a hostname 127 for _, src := range []string{ 128 "terraform-aws-modules/vpc/aws", 129 defaultRegistry + "/terraform-aws-modules/vpc/aws", 130 } { 131 modsrc, err := regsrc.ParseModuleSource(src) 132 if err != nil { 133 t.Fatal(err) 134 } 135 136 s := &Storage{ 137 Services: regDisco, 138 } 139 resp, err := s.lookupModuleVersions(modsrc) 140 if err != nil { 141 t.Fatal(err) 142 } 143 144 if len(resp.Modules) != 1 { 145 t.Fatal("expected 1 module, got", len(resp.Modules)) 146 } 147 148 mod := resp.Modules[0] 149 name := "terraform-aws-modules/vpc/aws" 150 if mod.Source != name { 151 t.Fatalf("expected module name %q, got %q", name, mod.Source) 152 } 153 154 if len(mod.Versions) == 0 { 155 t.Fatal("expected multiple versions, got 0") 156 } 157 158 for _, v := range mod.Versions { 159 _, err := version.NewVersion(v.Version) 160 if err != nil { 161 t.Fatalf("invalid version %q: %s", v.Version, err) 162 } 163 } 164 } 165 }