mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-25 16:31:10 -06:00
fedd315275
This commit replaces `ioutil.TempDir` with `t.TempDir` in tests. The directory created by `t.TempDir` is automatically removed when the test and all its subtests complete. Prior to this commit, temporary directory created using `ioutil.TempDir` needs to be removed manually by calling `os.RemoveAll`, which is omitted in some tests. The error handling boilerplate e.g. defer func() { if err := os.RemoveAll(dir); err != nil { t.Fatal(err) } } is also tedious, but `t.TempDir` handles this for us nicely. Reference: https://pkg.go.dev/testing#T.TempDir Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>
74 lines
2.6 KiB
Go
74 lines
2.6 KiB
Go
package e2etest
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"sort"
|
|
"testing"
|
|
|
|
"github.com/google/go-cmp/cmp"
|
|
"github.com/hashicorp/terraform/internal/e2e"
|
|
)
|
|
|
|
// The tests in this file are for the "terraform providers mirror" command,
|
|
// which is tested in an e2etest mode rather than a unit test mode because it
|
|
// interacts directly with Terraform Registry and the full details of that are
|
|
// tricky to mock. Such a mock is _possible_, but we're using e2etest as a
|
|
// compromise for now to keep these tests relatively simple.
|
|
|
|
func TestTerraformProvidersMirror(t *testing.T) {
|
|
// This test reaches out to releases.hashicorp.com to download the
|
|
// template and null providers, so it can only run if network access is
|
|
// allowed.
|
|
skipIfCannotAccessNetwork(t)
|
|
|
|
outputDir := t.TempDir()
|
|
t.Logf("creating mirror directory in %s", outputDir)
|
|
|
|
fixturePath := filepath.Join("testdata", "terraform-providers-mirror")
|
|
tf := e2e.NewBinary(t, terraformBin, fixturePath)
|
|
|
|
stdout, stderr, err := tf.Run("providers", "mirror", "-platform=linux_amd64", "-platform=windows_386", outputDir)
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %s\nstdout:\n%s\nstderr:\n%s", err, stdout, stderr)
|
|
}
|
|
|
|
// The test fixture includes exact version constraints for the two
|
|
// providers it depends on so that the following should remain stable.
|
|
// In the (unlikely) event that these particular versions of these
|
|
// providers are removed from the registry, this test will start to fail.
|
|
want := []string{
|
|
"registry.terraform.io/hashicorp/null/2.1.0.json",
|
|
"registry.terraform.io/hashicorp/null/index.json",
|
|
"registry.terraform.io/hashicorp/null/terraform-provider-null_2.1.0_linux_amd64.zip",
|
|
"registry.terraform.io/hashicorp/null/terraform-provider-null_2.1.0_windows_386.zip",
|
|
"registry.terraform.io/hashicorp/template/2.1.1.json",
|
|
"registry.terraform.io/hashicorp/template/index.json",
|
|
"registry.terraform.io/hashicorp/template/terraform-provider-template_2.1.1_linux_amd64.zip",
|
|
"registry.terraform.io/hashicorp/template/terraform-provider-template_2.1.1_windows_386.zip",
|
|
}
|
|
var got []string
|
|
walkErr := filepath.Walk(outputDir, func(path string, info os.FileInfo, err error) error {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if info.IsDir() {
|
|
return nil // we only care about leaf files for this test
|
|
}
|
|
relPath, err := filepath.Rel(outputDir, path)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
got = append(got, filepath.ToSlash(relPath))
|
|
return nil
|
|
})
|
|
if walkErr != nil {
|
|
t.Fatal(walkErr)
|
|
}
|
|
sort.Strings(got)
|
|
|
|
if diff := cmp.Diff(want, got); diff != "" {
|
|
t.Errorf("unexpected files in result\n%s", diff)
|
|
}
|
|
}
|