| package providercache |
| |
| import ( |
| "testing" |
| |
| "github.com/hashicorp/terraform/internal/addrs" |
| "github.com/hashicorp/terraform/internal/getproviders" |
| ) |
| |
| func TestCachedProviderHash(t *testing.T) { |
| cp := &CachedProvider{ |
| Provider: addrs.NewProvider( |
| addrs.DefaultProviderRegistryHost, |
| "hashicorp", "null", |
| ), |
| Version: getproviders.MustParseVersion("2.0.0"), |
| |
| PackageDir: "testdata/cachedir/registry.terraform.io/hashicorp/null/2.0.0/darwin_amd64", |
| } |
| |
| want := getproviders.MustParseHash("h1:qjsREM4DqEWECD43FcPqddZ9oxCG+IaMTxvWPciS05g=") |
| got, err := cp.Hash() |
| if err != nil { |
| t.Fatalf("unexpected error: %s", err) |
| } |
| |
| if got != want { |
| t.Errorf("wrong Hash result\ngot: %s\nwant: %s", got, want) |
| } |
| |
| gotMatches, err := cp.MatchesHash(want) |
| if err != nil { |
| t.Fatalf("unexpected error: %s", err) |
| } |
| if wantMatches := true; gotMatches != wantMatches { |
| t.Errorf("wrong MatchesHash result\ngot: %#v\nwant: %#v", gotMatches, wantMatches) |
| } |
| |
| // The windows build has a different hash because its executable filename |
| // has a .exe suffix, but the darwin build (hashed above) does not. |
| cp2 := &CachedProvider{ |
| Provider: addrs.NewProvider( |
| addrs.DefaultProviderRegistryHost, |
| "hashicorp", "null", |
| ), |
| Version: getproviders.MustParseVersion("2.0.0"), |
| |
| PackageDir: "testdata/cachedir/registry.terraform.io/hashicorp/null/2.0.0/windows_amd64", |
| } |
| gotMatches, err = cp2.MatchesHash(want) |
| if err != nil { |
| t.Fatalf("unexpected error: %s", err) |
| } |
| if wantMatches := false; gotMatches != wantMatches { |
| t.Errorf("wrong MatchesHash result for other package\ngot: %#v\nwant: %#v", gotMatches, wantMatches) |
| } |
| |
| } |
| |
| func TestExecutableFile(t *testing.T) { |
| testCases := map[string]struct { |
| cp *CachedProvider |
| file string |
| err string |
| }{ |
| "linux": { |
| cp: &CachedProvider{ |
| Provider: addrs.NewProvider(addrs.DefaultProviderRegistryHost, "hashicorp", "null"), |
| Version: getproviders.MustParseVersion("2.0.0"), |
| PackageDir: "testdata/cachedir/registry.terraform.io/hashicorp/null/2.0.0/linux_amd64", |
| }, |
| file: "testdata/cachedir/registry.terraform.io/hashicorp/null/2.0.0/linux_amd64/terraform-provider-null", |
| }, |
| "windows": { |
| cp: &CachedProvider{ |
| Provider: addrs.NewProvider(addrs.DefaultProviderRegistryHost, "hashicorp", "null"), |
| Version: getproviders.MustParseVersion("2.0.0"), |
| PackageDir: "testdata/cachedir/registry.terraform.io/hashicorp/null/2.0.0/windows_amd64", |
| }, |
| file: "testdata/cachedir/registry.terraform.io/hashicorp/null/2.0.0/windows_amd64/terraform-provider-null.exe", |
| }, |
| "missing-executable": { |
| cp: &CachedProvider{ |
| Provider: addrs.NewProvider(addrs.DefaultProviderRegistryHost, "missing", "executable"), |
| Version: getproviders.MustParseVersion("2.0.0"), |
| PackageDir: "testdata/cachedir/registry.terraform.io/missing/executable/2.0.0/linux_amd64", |
| }, |
| err: "could not find executable file starting with terraform-provider-executable", |
| }, |
| "missing-dir": { |
| cp: &CachedProvider{ |
| Provider: addrs.NewProvider(addrs.DefaultProviderRegistryHost, "missing", "packagedir"), |
| Version: getproviders.MustParseVersion("2.0.0"), |
| PackageDir: "testdata/cachedir/registry.terraform.io/missing/packagedir/2.0.0/linux_amd64", |
| }, |
| err: "could not read package directory: open testdata/cachedir/registry.terraform.io/missing/packagedir/2.0.0/linux_amd64: no such file or directory", |
| }, |
| } |
| |
| for name, tc := range testCases { |
| t.Run(name, func(t *testing.T) { |
| file, err := tc.cp.ExecutableFile() |
| if file != tc.file { |
| t.Errorf("wrong file\n got: %q\nwant: %q", file, tc.file) |
| } |
| if err == nil && tc.err != "" { |
| t.Fatalf("no error returned, want: %q", tc.err) |
| } else if err != nil && err.Error() != tc.err { |
| t.Errorf("wrong error\n got: %q\nwant: %q", err, tc.err) |
| } |
| }) |
| } |
| } |