terraform/internal/providercache/cached_provider_test.go

114 lines
3.8 KiB
Go

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)
}
})
}
}