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  }