mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-30 10:47:14 -06:00
e5f52e56f8
As the comment notes, this hostname is the default for provide source addresses. We'll shortly be adding some address types to represent module source addresses too, and so we'll also have DefaultModuleRegistryHost for that situation. (They'll actually both contain the the same hostname, but that's a coincidence rather than a requirement.)
185 lines
5.6 KiB
Go
185 lines
5.6 KiB
Go
package providercache
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/apparentlymart/go-versions/versions"
|
|
"github.com/google/go-cmp/cmp"
|
|
|
|
"github.com/hashicorp/terraform/internal/addrs"
|
|
"github.com/hashicorp/terraform/internal/getproviders"
|
|
)
|
|
|
|
func TestDirReading(t *testing.T) {
|
|
testDir := "testdata/cachedir"
|
|
|
|
// We'll force using particular platforms for unit testing purposes,
|
|
// so that we'll get consistent results on all platforms.
|
|
windowsPlatform := getproviders.Platform{ // only null 2.0.0 is cached
|
|
OS: "windows",
|
|
Arch: "amd64",
|
|
}
|
|
linuxPlatform := getproviders.Platform{ // various provider versions are cached
|
|
OS: "linux",
|
|
Arch: "amd64",
|
|
}
|
|
|
|
nullProvider := addrs.NewProvider(
|
|
addrs.DefaultProviderRegistryHost, "hashicorp", "null",
|
|
)
|
|
randomProvider := addrs.NewProvider(
|
|
addrs.DefaultProviderRegistryHost, "hashicorp", "random",
|
|
)
|
|
randomBetaProvider := addrs.NewProvider(
|
|
addrs.DefaultProviderRegistryHost, "hashicorp", "random-beta",
|
|
)
|
|
nonExistProvider := addrs.NewProvider(
|
|
addrs.DefaultProviderRegistryHost, "bloop", "nonexist",
|
|
)
|
|
legacyProvider := addrs.NewLegacyProvider("legacy")
|
|
missingExecutableProvider := addrs.NewProvider(
|
|
addrs.DefaultProviderRegistryHost, "missing", "executable",
|
|
)
|
|
|
|
t.Run("ProviderLatestVersion", func(t *testing.T) {
|
|
t.Run("exists", func(t *testing.T) {
|
|
dir := NewDirWithPlatform(testDir, windowsPlatform)
|
|
|
|
got := dir.ProviderLatestVersion(nullProvider)
|
|
want := &CachedProvider{
|
|
Provider: nullProvider,
|
|
|
|
// We want 2.0.0 rather than 2.1.0 because the 2.1.0 package is
|
|
// still packed and thus not considered to be a cache member.
|
|
Version: versions.MustParseVersion("2.0.0"),
|
|
|
|
PackageDir: "testdata/cachedir/registry.terraform.io/hashicorp/null/2.0.0/windows_amd64",
|
|
}
|
|
|
|
if diff := cmp.Diff(want, got); diff != "" {
|
|
t.Errorf("wrong result\n%s", diff)
|
|
}
|
|
})
|
|
t.Run("no package for current platform", func(t *testing.T) {
|
|
dir := NewDirWithPlatform(testDir, windowsPlatform)
|
|
|
|
// random provider is only cached for linux_amd64 in our fixtures dir
|
|
got := dir.ProviderLatestVersion(randomProvider)
|
|
var want *CachedProvider
|
|
|
|
if diff := cmp.Diff(want, got); diff != "" {
|
|
t.Errorf("wrong result\n%s", diff)
|
|
}
|
|
})
|
|
t.Run("no versions available at all", func(t *testing.T) {
|
|
dir := NewDirWithPlatform(testDir, windowsPlatform)
|
|
|
|
// nonexist provider is not present in our fixtures dir at all
|
|
got := dir.ProviderLatestVersion(nonExistProvider)
|
|
var want *CachedProvider
|
|
|
|
if diff := cmp.Diff(want, got); diff != "" {
|
|
t.Errorf("wrong result\n%s", diff)
|
|
}
|
|
})
|
|
})
|
|
|
|
t.Run("ProviderVersion", func(t *testing.T) {
|
|
t.Run("exists", func(t *testing.T) {
|
|
dir := NewDirWithPlatform(testDir, windowsPlatform)
|
|
|
|
got := dir.ProviderVersion(nullProvider, versions.MustParseVersion("2.0.0"))
|
|
want := &CachedProvider{
|
|
Provider: nullProvider,
|
|
Version: versions.MustParseVersion("2.0.0"),
|
|
|
|
PackageDir: "testdata/cachedir/registry.terraform.io/hashicorp/null/2.0.0/windows_amd64",
|
|
}
|
|
|
|
if diff := cmp.Diff(want, got); diff != "" {
|
|
t.Errorf("wrong result\n%s", diff)
|
|
}
|
|
})
|
|
t.Run("specified version is not cached", func(t *testing.T) {
|
|
dir := NewDirWithPlatform(testDir, windowsPlatform)
|
|
|
|
// there is no v5.0.0 package in our fixtures dir
|
|
got := dir.ProviderVersion(nullProvider, versions.MustParseVersion("5.0.0"))
|
|
var want *CachedProvider
|
|
|
|
if diff := cmp.Diff(want, got); diff != "" {
|
|
t.Errorf("wrong result\n%s", diff)
|
|
}
|
|
})
|
|
t.Run("no package for current platform", func(t *testing.T) {
|
|
dir := NewDirWithPlatform(testDir, windowsPlatform)
|
|
|
|
// random provider 1.2.0 is only cached for linux_amd64 in our fixtures dir
|
|
got := dir.ProviderVersion(randomProvider, versions.MustParseVersion("1.2.0"))
|
|
var want *CachedProvider
|
|
|
|
if diff := cmp.Diff(want, got); diff != "" {
|
|
t.Errorf("wrong result\n%s", diff)
|
|
}
|
|
})
|
|
t.Run("no versions available at all", func(t *testing.T) {
|
|
dir := NewDirWithPlatform(testDir, windowsPlatform)
|
|
|
|
// nonexist provider is not present in our fixtures dir at all
|
|
got := dir.ProviderVersion(nonExistProvider, versions.MustParseVersion("1.0.0"))
|
|
var want *CachedProvider
|
|
|
|
if diff := cmp.Diff(want, got); diff != "" {
|
|
t.Errorf("wrong result\n%s", diff)
|
|
}
|
|
})
|
|
})
|
|
|
|
t.Run("AllAvailablePackages", func(t *testing.T) {
|
|
dir := NewDirWithPlatform(testDir, linuxPlatform)
|
|
|
|
got := dir.AllAvailablePackages()
|
|
want := map[addrs.Provider][]CachedProvider{
|
|
legacyProvider: {
|
|
{
|
|
Provider: legacyProvider,
|
|
Version: versions.MustParseVersion("1.0.0"),
|
|
PackageDir: "testdata/cachedir/registry.terraform.io/-/legacy/1.0.0/linux_amd64",
|
|
},
|
|
},
|
|
nullProvider: {
|
|
{
|
|
Provider: nullProvider,
|
|
Version: versions.MustParseVersion("2.0.0"),
|
|
PackageDir: "testdata/cachedir/registry.terraform.io/hashicorp/null/2.0.0/linux_amd64",
|
|
},
|
|
},
|
|
randomProvider: {
|
|
{
|
|
Provider: randomProvider,
|
|
Version: versions.MustParseVersion("1.2.0"),
|
|
PackageDir: "testdata/cachedir/registry.terraform.io/hashicorp/random/1.2.0/linux_amd64",
|
|
},
|
|
},
|
|
randomBetaProvider: {
|
|
{
|
|
Provider: randomBetaProvider,
|
|
Version: versions.MustParseVersion("1.2.0"),
|
|
PackageDir: "testdata/cachedir/registry.terraform.io/hashicorp/random-beta/1.2.0/linux_amd64",
|
|
},
|
|
},
|
|
missingExecutableProvider: {
|
|
{
|
|
Provider: missingExecutableProvider,
|
|
Version: versions.MustParseVersion("2.0.0"),
|
|
PackageDir: "testdata/cachedir/registry.terraform.io/missing/executable/2.0.0/linux_amd64",
|
|
},
|
|
},
|
|
}
|
|
|
|
if diff := cmp.Diff(want, got); diff != "" {
|
|
t.Errorf("wrong result\n%s", diff)
|
|
}
|
|
})
|
|
}
|