mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-26 08:51:02 -06:00
6694cfaa0e
The logic for what constitutes a valid hash and how different hash schemes are represented was starting to get sprawled over many different files and packages. Consistently with other cases where we've used named types to gather the definition of a particular string into a single place and have the Go compiler help us use it properly, this introduces both getproviders.Hash representing a hash value and getproviders.HashScheme representing the idea of a particular hash scheme. Most of this changeset is updating existing uses of primitive strings to uses of getproviders.Hash. The new type definitions are in internal/getproviders/hash.go.
114 lines
3.7 KiB
Go
114 lines
3.7 KiB
Go
package providercache
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/hashicorp/terraform/addrs"
|
|
"github.com/hashicorp/terraform/internal/getproviders"
|
|
)
|
|
|
|
func TestCachedProviderHash(t *testing.T) {
|
|
cp := &CachedProvider{
|
|
Provider: addrs.NewProvider(
|
|
addrs.DefaultRegistryHost,
|
|
"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.DefaultRegistryHost,
|
|
"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.DefaultRegistryHost, "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.DefaultRegistryHost, "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.DefaultRegistryHost, "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.DefaultRegistryHost, "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)
|
|
}
|
|
})
|
|
}
|
|
}
|