// Copyright (c) The OpenTofu Authors // SPDX-License-Identifier: MPL-2.0 // Copyright (c) 2023 HashiCorp, Inc. // SPDX-License-Identifier: MPL-2.0 package getproviders import ( "path/filepath" "testing" "github.com/google/go-cmp/cmp" "github.com/opentofu/opentofu/internal/addrs" ) func TestSearchLocalDirectory(t *testing.T) { tests := []struct { Fixture string Subdir string Want map[addrs.Provider]PackageMetaList }{ { "symlinks", "symlink", map[addrs.Provider]PackageMetaList{ addrs.MustParseProviderSourceString("example.com/foo/bar"): { { Provider: addrs.MustParseProviderSourceString("example.com/foo/bar"), Version: MustParseVersion("1.0.0"), TargetPlatform: Platform{OS: "linux", Arch: "amd64"}, Filename: "terraform-provider-bar_1.0.0_linux_amd64.zip", Location: PackageLocalDir("testdata/search-local-directory/symlinks/real/example.com/foo/bar/1.0.0/linux_amd64"), }, }, // This search doesn't find example.net/foo/bar because only // the top-level search directory is supported as being a // symlink, and so we ignore the example.net symlink to // example.com that is one level deeper. }, }, } for _, test := range tests { t.Run(test.Fixture, func(t *testing.T) { fullDir := filepath.Join("testdata/search-local-directory", test.Fixture, test.Subdir) got, err := SearchLocalDirectory(fullDir) if err != nil { t.Errorf("unexpected error: %s", err) } want := test.Want if diff := cmp.Diff(want, got); diff != "" { t.Errorf("wrong result\n%s", diff) } }) } }