github.com/eliastor/durgaform@v0.0.0-20220816172711-d0ab2d17673e/internal/providercache/dir_test.go (about) 1 package providercache 2 3 import ( 4 "testing" 5 6 "github.com/apparentlymart/go-versions/versions" 7 "github.com/google/go-cmp/cmp" 8 9 "github.com/eliastor/durgaform/internal/addrs" 10 "github.com/eliastor/durgaform/internal/getproviders" 11 ) 12 13 func TestDirReading(t *testing.T) { 14 testDir := "testdata/cachedir" 15 16 // We'll force using particular platforms for unit testing purposes, 17 // so that we'll get consistent results on all platforms. 18 windowsPlatform := getproviders.Platform{ // only null 2.0.0 is cached 19 OS: "windows", 20 Arch: "amd64", 21 } 22 linuxPlatform := getproviders.Platform{ // various provider versions are cached 23 OS: "linux", 24 Arch: "amd64", 25 } 26 27 nullProvider := addrs.NewProvider( 28 addrs.DefaultProviderRegistryHost, "hashicorp", "null", 29 ) 30 randomProvider := addrs.NewProvider( 31 addrs.DefaultProviderRegistryHost, "hashicorp", "random", 32 ) 33 randomBetaProvider := addrs.NewProvider( 34 addrs.DefaultProviderRegistryHost, "hashicorp", "random-beta", 35 ) 36 nonExistProvider := addrs.NewProvider( 37 addrs.DefaultProviderRegistryHost, "bloop", "nonexist", 38 ) 39 legacyProvider := addrs.NewLegacyProvider("legacy") 40 missingExecutableProvider := addrs.NewProvider( 41 addrs.DefaultProviderRegistryHost, "missing", "executable", 42 ) 43 44 t.Run("ProviderLatestVersion", func(t *testing.T) { 45 t.Run("exists", func(t *testing.T) { 46 dir := NewDirWithPlatform(testDir, windowsPlatform) 47 48 got := dir.ProviderLatestVersion(nullProvider) 49 want := &CachedProvider{ 50 Provider: nullProvider, 51 52 // We want 2.0.0 rather than 2.1.0 because the 2.1.0 package is 53 // still packed and thus not considered to be a cache member. 54 Version: versions.MustParseVersion("2.0.0"), 55 56 PackageDir: "testdata/cachedir/registry.durgaform.io/hashicorp/null/2.0.0/windows_amd64", 57 } 58 59 if diff := cmp.Diff(want, got); diff != "" { 60 t.Errorf("wrong result\n%s", diff) 61 } 62 }) 63 t.Run("no package for current platform", func(t *testing.T) { 64 dir := NewDirWithPlatform(testDir, windowsPlatform) 65 66 // random provider is only cached for linux_amd64 in our fixtures dir 67 got := dir.ProviderLatestVersion(randomProvider) 68 var want *CachedProvider 69 70 if diff := cmp.Diff(want, got); diff != "" { 71 t.Errorf("wrong result\n%s", diff) 72 } 73 }) 74 t.Run("no versions available at all", func(t *testing.T) { 75 dir := NewDirWithPlatform(testDir, windowsPlatform) 76 77 // nonexist provider is not present in our fixtures dir at all 78 got := dir.ProviderLatestVersion(nonExistProvider) 79 var want *CachedProvider 80 81 if diff := cmp.Diff(want, got); diff != "" { 82 t.Errorf("wrong result\n%s", diff) 83 } 84 }) 85 }) 86 87 t.Run("ProviderVersion", func(t *testing.T) { 88 t.Run("exists", func(t *testing.T) { 89 dir := NewDirWithPlatform(testDir, windowsPlatform) 90 91 got := dir.ProviderVersion(nullProvider, versions.MustParseVersion("2.0.0")) 92 want := &CachedProvider{ 93 Provider: nullProvider, 94 Version: versions.MustParseVersion("2.0.0"), 95 96 PackageDir: "testdata/cachedir/registry.durgaform.io/hashicorp/null/2.0.0/windows_amd64", 97 } 98 99 if diff := cmp.Diff(want, got); diff != "" { 100 t.Errorf("wrong result\n%s", diff) 101 } 102 }) 103 t.Run("specified version is not cached", func(t *testing.T) { 104 dir := NewDirWithPlatform(testDir, windowsPlatform) 105 106 // there is no v5.0.0 package in our fixtures dir 107 got := dir.ProviderVersion(nullProvider, versions.MustParseVersion("5.0.0")) 108 var want *CachedProvider 109 110 if diff := cmp.Diff(want, got); diff != "" { 111 t.Errorf("wrong result\n%s", diff) 112 } 113 }) 114 t.Run("no package for current platform", func(t *testing.T) { 115 dir := NewDirWithPlatform(testDir, windowsPlatform) 116 117 // random provider 1.2.0 is only cached for linux_amd64 in our fixtures dir 118 got := dir.ProviderVersion(randomProvider, versions.MustParseVersion("1.2.0")) 119 var want *CachedProvider 120 121 if diff := cmp.Diff(want, got); diff != "" { 122 t.Errorf("wrong result\n%s", diff) 123 } 124 }) 125 t.Run("no versions available at all", func(t *testing.T) { 126 dir := NewDirWithPlatform(testDir, windowsPlatform) 127 128 // nonexist provider is not present in our fixtures dir at all 129 got := dir.ProviderVersion(nonExistProvider, versions.MustParseVersion("1.0.0")) 130 var want *CachedProvider 131 132 if diff := cmp.Diff(want, got); diff != "" { 133 t.Errorf("wrong result\n%s", diff) 134 } 135 }) 136 }) 137 138 t.Run("AllAvailablePackages", func(t *testing.T) { 139 dir := NewDirWithPlatform(testDir, linuxPlatform) 140 141 got := dir.AllAvailablePackages() 142 want := map[addrs.Provider][]CachedProvider{ 143 legacyProvider: { 144 { 145 Provider: legacyProvider, 146 Version: versions.MustParseVersion("1.0.0"), 147 PackageDir: "testdata/cachedir/registry.durgaform.io/-/legacy/1.0.0/linux_amd64", 148 }, 149 }, 150 nullProvider: { 151 { 152 Provider: nullProvider, 153 Version: versions.MustParseVersion("2.0.0"), 154 PackageDir: "testdata/cachedir/registry.durgaform.io/hashicorp/null/2.0.0/linux_amd64", 155 }, 156 }, 157 randomProvider: { 158 { 159 Provider: randomProvider, 160 Version: versions.MustParseVersion("1.2.0"), 161 PackageDir: "testdata/cachedir/registry.durgaform.io/hashicorp/random/1.2.0/linux_amd64", 162 }, 163 }, 164 randomBetaProvider: { 165 { 166 Provider: randomBetaProvider, 167 Version: versions.MustParseVersion("1.2.0"), 168 PackageDir: "testdata/cachedir/registry.durgaform.io/hashicorp/random-beta/1.2.0/linux_amd64", 169 }, 170 }, 171 missingExecutableProvider: { 172 { 173 Provider: missingExecutableProvider, 174 Version: versions.MustParseVersion("2.0.0"), 175 PackageDir: "testdata/cachedir/registry.durgaform.io/missing/executable/2.0.0/linux_amd64", 176 }, 177 }, 178 } 179 180 if diff := cmp.Diff(want, got); diff != "" { 181 t.Errorf("wrong result\n%s", diff) 182 } 183 }) 184 }