tfexec/internal/e2etest: Skip TestShow_noInitEtcdBackend on >=1.3.0 and prereleases (#325)
Reference: https://github.com/hashicorp/terraform/pull/31326
Fixes the new test failures against Terraform `main` branch. This also adds testing for the `cloud` and `remote` backends, which should be more stable as they are integral to the Terraform experience.
Previously:
```console
$ TFEXEC_E2ETEST_VERSIONS=refs/heads/main go test -count=1 -run='TestShow_noInitEtcdBackend' -v ./tfexec/internal/e2etest
=== RUN TestShow_noInitEtcdBackend
=== RUN TestShow_noInitEtcdBackend/etcd_backend-refs/heads/main
util_test.go:112: caching exec "gitref:refs/heads/main" in dir "/var/folders/w8/05f3x02n27x72g0mc2jy6_180000gp/T/tfinstall2067874872/gitref-refs-heads-main"
2022/06/30 15:56:57 git_revision.go:88: running terraform pre-clone check (timeout: 1m0s)
2022/06/30 15:56:57 git_revision.go:94: terraform pre-clone check finished
2022/06/30 15:56:57 git_revision.go:123: cloning terraform repository from https://github.com/hashicorp/terraform.git to /var/folders/w8/05f3x02n27x72g0mc2jy6_180000gp/T/hc-install-build-terraform3971808670 (timeout: 5m0s)
2022/06/30 15:57:37 git_revision.go:136: cloning terraform finished
2022/06/30 15:57:37 git_revision.go:142: terraform repository HEAD is at acb79a75451e39126f1cdc596ff802a91d64d712
2022/06/30 15:57:37 git_revision.go:169: building terraform (timeout: 10m0s)
2022/06/30 15:57:37 go_build.go:55: executing go ["build" "-o" "/var/folders/w8/05f3x02n27x72g0mc2jy6_180000gp/T/hc-install-terraform-acb79a75451e39126f1cdc596ff802a91d64d7123048666161/terraform"] in "/var/folders/w8/05f3x02n27x72g0mc2jy6_180000gp/T/hc-install-build-terraform3971808670"
2022/06/30 15:57:51 git_revision.go:171: building of terraform finished
util_test.go:173: [INFO] running Terraform command: /var/folders/w8/05f3x02n27x72g0mc2jy6_180000gp/T/hc-install-terraform-acb79a75451e39126f1cdc596ff802a91d64d7123048666161/terraform show -json -no-color
show_test.go:232: expected error ErrNoInit, got *fmt.wrapError: exit status 1
Error: Invalid backend type
on main.tf line 2, in terraform:
2: backend "etcd" {
The "etcd" backend is not supported in Terraform v1.3 or later.
--- FAIL: TestShow_noInitEtcdBackend (55.76s)
--- FAIL: TestShow_noInitEtcdBackend/etcd_backend-refs/heads/main (55.76s)
FAIL
FAIL github.com/hashicorp/terraform-exec/tfexec/internal/e2etest 56.060s
FAIL
```
After change:
```console
$ TFEXEC_E2ETEST_VERSIONS=refs/heads/main go test -count=1 -run='TestShow_noInitEtcdBackend' -v ./tfexec/internal/e2etest
=== RUN TestShow_noInitEtcdBackend
=== RUN TestShow_noInitEtcdBackend/etcd_backend-refs/heads/main
util_test.go:112: caching exec "gitref:refs/heads/main" in dir "/var/folders/w8/05f3x02n27x72g0mc2jy6_180000gp/T/tfinstall2843106250/gitref-refs-heads-main"
2022/06/30 15:59:17 git_revision.go:88: running terraform pre-clone check (timeout: 1m0s)
2022/06/30 15:59:17 git_revision.go:94: terraform pre-clone check finished
2022/06/30 15:59:17 git_revision.go:123: cloning terraform repository from https://github.com/hashicorp/terraform.git to /var/folders/w8/05f3x02n27x72g0mc2jy6_180000gp/T/hc-install-build-terraform22313428 (timeout: 5m0s)
2022/06/30 15:59:59 git_revision.go:136: cloning terraform finished
2022/06/30 15:59:59 git_revision.go:142: terraform repository HEAD is at acb79a75451e39126f1cdc596ff802a91d64d712
2022/06/30 15:59:59 git_revision.go:169: building terraform (timeout: 10m0s)
2022/06/30 15:59:59 go_build.go:55: executing go ["build" "-o" "/var/folders/w8/05f3x02n27x72g0mc2jy6_180000gp/T/hc-install-terraform-acb79a75451e39126f1cdc596ff802a91d64d7122130413204/terraform"] in "/var/folders/w8/05f3x02n27x72g0mc2jy6_180000gp/T/hc-install-build-terraform22313428"
2022/06/30 16:00:12 git_revision.go:171: building of terraform finished
show_test.go:223: etcd backend was removed in Terraform 1.3, so test is not valid
--- PASS: TestShow_noInitEtcdBackend (56.66s)
--- SKIP: TestShow_noInitEtcdBackend/etcd_backend-refs/heads/main (56.66s)
PASS
ok github.com/hashicorp/terraform-exec/tfexec/internal/e2etest 57.704s
```diff --git a/tfexec/internal/e2etest/show_test.go b/tfexec/internal/e2etest/show_test.go
index c8636d2..29e7711 100644
--- a/tfexec/internal/e2etest/show_test.go
+++ b/tfexec/internal/e2etest/show_test.go
@@ -185,7 +185,7 @@
})
}
-func TestShow_noInitNonLocalBackend(t *testing.T) {
+func TestShow_noInitInmemBackend(t *testing.T) {
runTest(t, "inmem_backend", func(t *testing.T, tfv *version.Version, tf *tfexec.Terraform) {
if tfv.LessThan(showMinVersion) {
t.Skip("terraform show was added in Terraform 0.12, so test is not valid")
@@ -213,12 +213,44 @@
})
}
+func TestShow_noInitCloudBackend(t *testing.T) {
+ runTest(t, "cloud_backend", func(t *testing.T, tfv *version.Version, tf *tfexec.Terraform) {
+ if tfv.LessThan(version.Must(version.NewVersion("1.1.0"))) {
+ t.Skip("cloud backend was added in Terraform 1.1, so test is not valid")
+ }
+
+ var noInit *tfexec.ErrNoInit
+ _, err := tf.Show(context.Background())
+ if !errors.As(err, &noInit) {
+ t.Fatalf("expected error ErrNoInit, got %T: %s", err, err)
+ }
+ })
+}
+
func TestShow_noInitEtcdBackend(t *testing.T) {
runTest(t, "etcd_backend", func(t *testing.T, tfv *version.Version, tf *tfexec.Terraform) {
if tfv.LessThan(showMinVersion) {
t.Skip("terraform show was added in Terraform 0.12, so test is not valid")
}
+ if tfv.GreaterThanOrEqual(version.Must(version.NewVersion("1.3.0"))) || tfv.Prerelease() != "" {
+ t.Skip("etcd backend was removed in Terraform 1.3, so test is not valid")
+ }
+
+ var noInit *tfexec.ErrNoInit
+ _, err := tf.Show(context.Background())
+ if !errors.As(err, &noInit) {
+ t.Fatalf("expected error ErrNoInit, got %T: %s", err, err)
+ }
+ })
+}
+
+func TestShow_noInitRemoteBackend(t *testing.T) {
+ runTest(t, "remote_backend", func(t *testing.T, tfv *version.Version, tf *tfexec.Terraform) {
+ if tfv.LessThan(showMinVersion) {
+ t.Skip("terraform show was added in Terraform 0.12, so test is not valid")
+ }
+
var noInit *tfexec.ErrNoInit
_, err := tf.Show(context.Background())
if !errors.As(err, &noInit) {
diff --git a/tfexec/internal/e2etest/testdata/cloud_backend/main.tf b/tfexec/internal/e2etest/testdata/cloud_backend/main.tf
new file mode 100644
index 0000000..f876346
--- /dev/null
+++ b/tfexec/internal/e2etest/testdata/cloud_backend/main.tf
@@ -0,0 +1,4 @@
+terraform {
+ backend "cloud" {
+ }
+}
diff --git a/tfexec/internal/e2etest/testdata/remote_backend/main.tf b/tfexec/internal/e2etest/testdata/remote_backend/main.tf
new file mode 100644
index 0000000..627d792
--- /dev/null
+++ b/tfexec/internal/e2etest/testdata/remote_backend/main.tf
@@ -0,0 +1,4 @@
+terraform {
+ backend "remote" {
+ }
+}