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  }