From ba9cb7ba2c9e66bb15d2066cbd6e290aad11cbc0 Mon Sep 17 00:00:00 2001 From: Shweta <35878561+shwetamurali@users.noreply.github.com> Date: Thu, 16 Jan 2025 12:06:39 -0800 Subject: [PATCH 01/15] Update backend.go --- internal/backend/remote/backend.go | 122 ++++++++++++++++++++++------- 1 file changed, 92 insertions(+), 30 deletions(-) diff --git a/internal/backend/remote/backend.go b/internal/backend/remote/backend.go index e956255b0b61..e31a819b4380 100644 --- a/internal/backend/remote/backend.go +++ b/internal/backend/remote/backend.go @@ -952,45 +952,94 @@ func (b *Remote) VerifyWorkspaceTerraformVersion(workspaceName string) tfdiags.D return nil } - remoteVersion, err := version.NewSemver(workspace.TerraformVersion) + remoteConstraint, err := version.NewConstraint(workspace.TerraformVersion) if err != nil { - diags = diags.Append(tfdiags.Sourceless( - tfdiags.Error, - "Error looking up workspace", - fmt.Sprintf("Invalid Terraform version: %s", err), - )) + message := fmt.Sprintf( + "The remote workspace specified an invalid Terraform version or constraint (%s), "+ + "and it isn't possible to determine whether the local Terraform version (%s) is compatible.", + workspace.TerraformVersion, + tfversion.String(), + ) + diags = diags.Append(incompatibleWorkspaceTerraformVersion(message, b.ignoreVersionConflict)) return diags } - v014 := version.Must(version.NewSemver("0.14.0")) - if tfversion.SemVer.LessThan(v014) || remoteVersion.LessThan(v014) { - // Versions of Terraform prior to 0.14.0 will refuse to load state files - // written by a newer version of Terraform, even if it is only a patch - // level difference. As a result we require an exact match. - if tfversion.SemVer.Equal(remoteVersion) { - return diags - } - } - if tfversion.SemVer.GreaterThanOrEqual(v014) && remoteVersion.GreaterThanOrEqual(v014) { - // Versions of Terraform after 0.14.0 should be compatible with each - // other. At the time this code was written, the only constraints we - // are aware of are: - // - // - 0.14.0 is guaranteed to be compatible with versions up to but not - // including 1.3.0 + // remoteVersion, err := version.NewSemver(workspace.TerraformVersion) + // if err != nil { + // diags = diags.Append(tfdiags.Sourceless( + // tfdiags.Error, + // "BYEE", + // fmt.Sprintf("Invalid Terraform version: %s", err), + // )) + // return diags + // } + + remoteVersion, _ := version.NewSemver(workspace.TerraformVersion) + + if remoteVersion != nil && remoteVersion.Prerelease() == "" { + v014 := version.Must(version.NewSemver("0.14.0")) v130 := version.Must(version.NewSemver("1.3.0")) - if tfversion.SemVer.LessThan(v130) && remoteVersion.LessThan(v130) { - return diags + + // Versions from 0.14 through the early 1.x series should be compatible + // (though we don't know about 1.3 yet). + if remoteVersion.GreaterThanOrEqual(v014) && remoteVersion.LessThan(v130) { + early1xCompatible, err := version.NewConstraint(fmt.Sprintf(">= 0.14.0, < %s", v130.String())) + if err != nil { + panic(err) + } + remoteConstraint = early1xCompatible } - // - Any new Terraform state version will require at least minor patch - // increment, so x.y.* will always be compatible with each other - tfvs := tfversion.SemVer.Segments64() - rwvs := remoteVersion.Segments64() - if len(tfvs) == 3 && len(rwvs) == 3 && tfvs[0] == rwvs[0] && tfvs[1] == rwvs[1] { - return diags + + // Any future new state format will require at least a minor version + // increment, so x.y.* will always be compatible with each other. + if remoteVersion.GreaterThanOrEqual(v130) { + rwvs := remoteVersion.Segments64() + if len(rwvs) >= 3 { + // ~> x.y.0 + minorVersionCompatible, err := version.NewConstraint(fmt.Sprintf("~> %d.%d.0", rwvs[0], rwvs[1])) + if err != nil { + panic(err) + } + remoteConstraint = minorVersionCompatible + } } } + fullTfversion := version.Must(version.NewSemver(tfversion.String())) + + if remoteConstraint.Check(fullTfversion) { + return diags + } + + // v014 := version.Must(version.NewSemver("0.14.0")) + // if tfversion.SemVer.LessThan(v014) || remoteVersion.LessThan(v014) { + // // Versions of Terraform prior to 0.14.0 will refuse to load state files + // // written by a newer version of Terraform, even if it is only a patch + // // level difference. As a result we require an exact match. + // if tfversion.SemVer.Equal(remoteVersion) { + // return diags + // } + // } + // if tfversion.SemVer.GreaterThanOrEqual(v014) && remoteVersion.GreaterThanOrEqual(v014) { + // // Versions of Terraform after 0.14.0 should be compatible with each + // // other. At the time this code was written, the only constraints we + // // are aware of are: + // // + // // - 0.14.0 is guaranteed to be compatible with versions up to but not + // // including 1.3.0 + // v130 := version.Must(version.NewSemver("1.3.0")) + // if tfversion.SemVer.LessThan(v130) && remoteVersion.LessThan(v130) { + // return diags + // } + // // - Any new Terraform state version will require at least minor patch + // // increment, so x.y.* will always be compatible with each other + // tfvs := tfversion.SemVer.Segments64() + // rwvs := remoteVersion.Segments64() + // if len(tfvs) == 3 && len(rwvs) == 3 && tfvs[0] == rwvs[0] && tfvs[1] == rwvs[1] { + // return diags + // } + // } + // Even if ignoring version conflicts, it may still be useful to call this // method and warn the user about a mismatch between the local and remote // Terraform versions. @@ -1019,6 +1068,19 @@ func (b *Remote) VerifyWorkspaceTerraformVersion(workspaceName string) tfdiags.D return diags } +func incompatibleWorkspaceTerraformVersion(message string, ignoreVersionConflict bool) tfdiags.Diagnostic { + severity := tfdiags.Error + suggestion := ignoreRemoteVersionHelp + if ignoreVersionConflict { + severity = tfdiags.Warning + suggestion = "" + } + description := strings.TrimSpace(fmt.Sprintf("%s\n\n%s", message, suggestion)) + return tfdiags.Sourceless(severity, "Incompatible Terraform version", description) +} + +const ignoreRemoteVersionHelp = "If you're sure you want to upgrade the state, you can force Terraform to continue using the -ignore-remote-version flag. This may result in an unusable workspace." + func (b *Remote) IsLocalOperations() bool { return b.forceLocal } From ede8eb728394f425a6cbd288dc40e235bdba5b14 Mon Sep 17 00:00:00 2001 From: Shweta <35878561+shwetamurali@users.noreply.github.com> Date: Thu, 16 Jan 2025 15:04:04 -0800 Subject: [PATCH 02/15] remove comments --- internal/backend/remote/backend.go | 39 ------------------------------ 1 file changed, 39 deletions(-) diff --git a/internal/backend/remote/backend.go b/internal/backend/remote/backend.go index e31a819b4380..426ccfb6645b 100644 --- a/internal/backend/remote/backend.go +++ b/internal/backend/remote/backend.go @@ -964,16 +964,6 @@ func (b *Remote) VerifyWorkspaceTerraformVersion(workspaceName string) tfdiags.D return diags } - // remoteVersion, err := version.NewSemver(workspace.TerraformVersion) - // if err != nil { - // diags = diags.Append(tfdiags.Sourceless( - // tfdiags.Error, - // "BYEE", - // fmt.Sprintf("Invalid Terraform version: %s", err), - // )) - // return diags - // } - remoteVersion, _ := version.NewSemver(workspace.TerraformVersion) if remoteVersion != nil && remoteVersion.Prerelease() == "" { @@ -1011,35 +1001,6 @@ func (b *Remote) VerifyWorkspaceTerraformVersion(workspaceName string) tfdiags.D return diags } - // v014 := version.Must(version.NewSemver("0.14.0")) - // if tfversion.SemVer.LessThan(v014) || remoteVersion.LessThan(v014) { - // // Versions of Terraform prior to 0.14.0 will refuse to load state files - // // written by a newer version of Terraform, even if it is only a patch - // // level difference. As a result we require an exact match. - // if tfversion.SemVer.Equal(remoteVersion) { - // return diags - // } - // } - // if tfversion.SemVer.GreaterThanOrEqual(v014) && remoteVersion.GreaterThanOrEqual(v014) { - // // Versions of Terraform after 0.14.0 should be compatible with each - // // other. At the time this code was written, the only constraints we - // // are aware of are: - // // - // // - 0.14.0 is guaranteed to be compatible with versions up to but not - // // including 1.3.0 - // v130 := version.Must(version.NewSemver("1.3.0")) - // if tfversion.SemVer.LessThan(v130) && remoteVersion.LessThan(v130) { - // return diags - // } - // // - Any new Terraform state version will require at least minor patch - // // increment, so x.y.* will always be compatible with each other - // tfvs := tfversion.SemVer.Segments64() - // rwvs := remoteVersion.Segments64() - // if len(tfvs) == 3 && len(rwvs) == 3 && tfvs[0] == rwvs[0] && tfvs[1] == rwvs[1] { - // return diags - // } - // } - // Even if ignoring version conflicts, it may still be useful to call this // method and warn the user about a mismatch between the local and remote // Terraform versions. From ae7644947575a14dc893a941a4435cb8a845a097 Mon Sep 17 00:00:00 2001 From: Shweta <35878561+shwetamurali@users.noreply.github.com> Date: Fri, 17 Jan 2025 14:10:03 -0800 Subject: [PATCH 03/15] Change error string --- internal/backend/remote/backend_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/backend/remote/backend_test.go b/internal/backend/remote/backend_test.go index c9ef63517c5a..3c8167e41c76 100644 --- a/internal/backend/remote/backend_test.go +++ b/internal/backend/remote/backend_test.go @@ -666,7 +666,7 @@ func TestRemote_VerifyWorkspaceTerraformVersion_workspaceErrors(t *testing.T) { if len(diags) != 1 { t.Fatal("expected diag, but none returned") } - if got := diags.Err().Error(); !strings.Contains(got, "Error looking up workspace: Invalid Terraform version") { + if got := diags.Err().Error(); !strings.Contains(got, "The remote workspace specified an invalid Terraform version or constraint") { t.Fatalf("unexpected error: %s", got) } } From 8323e45ae5aa277f313af321bc2041b88a76ccd9 Mon Sep 17 00:00:00 2001 From: Shweta <35878561+shwetamurali@users.noreply.github.com> Date: Fri, 17 Jan 2025 14:20:15 -0800 Subject: [PATCH 04/15] Add to changelog --- .changes/unreleased/.gitkeep | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.changes/unreleased/.gitkeep b/.changes/unreleased/.gitkeep index e69de29bb2d1..16e8789496b4 100644 --- a/.changes/unreleased/.gitkeep +++ b/.changes/unreleased/.gitkeep @@ -0,0 +1,5 @@ +## 1.12.0 (unreleased) + +FIXES: + +- Fixes error ("Invalid Terraform version: Malformed version") reading workspace when the remote workspace has the terraform version set to a constraint. \ No newline at end of file From fd98cede55e6c82470f802e5aa6a2edd37ba815d Mon Sep 17 00:00:00 2001 From: Shweta <35878561+shwetamurali@users.noreply.github.com> Date: Fri, 17 Jan 2025 14:35:12 -0800 Subject: [PATCH 05/15] add yaml to changelog --- .changes/unreleased/.gitkeep | 5 ----- .changes/unreleased/01-17-25.yaml | 4 ++++ 2 files changed, 4 insertions(+), 5 deletions(-) create mode 100644 .changes/unreleased/01-17-25.yaml diff --git a/.changes/unreleased/.gitkeep b/.changes/unreleased/.gitkeep index 16e8789496b4..e69de29bb2d1 100644 --- a/.changes/unreleased/.gitkeep +++ b/.changes/unreleased/.gitkeep @@ -1,5 +0,0 @@ -## 1.12.0 (unreleased) - -FIXES: - -- Fixes error ("Invalid Terraform version: Malformed version") reading workspace when the remote workspace has the terraform version set to a constraint. \ No newline at end of file diff --git a/.changes/unreleased/01-17-25.yaml b/.changes/unreleased/01-17-25.yaml new file mode 100644 index 000000000000..e87851ac159c --- /dev/null +++ b/.changes/unreleased/01-17-25.yaml @@ -0,0 +1,4 @@ +version: 1.12.0 (unreleased) + +fixes: + Fixes error ("Invalid Terraform version: Malformed version") reading workspace when the remote workspace has the terraform version set to a constraint. \ No newline at end of file From 4458b4533fffbca77749e23f511c67e122ac9428 Mon Sep 17 00:00:00 2001 From: Shweta <35878561+shwetamurali@users.noreply.github.com> Date: Fri, 17 Jan 2025 14:42:41 -0800 Subject: [PATCH 06/15] Change yaml format --- .changes/unreleased/01-17-25.yaml | 4 ---- .changes/unreleased/BUG FIXES-20250117-104335.yaml | 4 ++++ 2 files changed, 4 insertions(+), 4 deletions(-) delete mode 100644 .changes/unreleased/01-17-25.yaml create mode 100644 .changes/unreleased/BUG FIXES-20250117-104335.yaml diff --git a/.changes/unreleased/01-17-25.yaml b/.changes/unreleased/01-17-25.yaml deleted file mode 100644 index e87851ac159c..000000000000 --- a/.changes/unreleased/01-17-25.yaml +++ /dev/null @@ -1,4 +0,0 @@ -version: 1.12.0 (unreleased) - -fixes: - Fixes error ("Invalid Terraform version: Malformed version") reading workspace when the remote workspace has the terraform version set to a constraint. \ No newline at end of file diff --git a/.changes/unreleased/BUG FIXES-20250117-104335.yaml b/.changes/unreleased/BUG FIXES-20250117-104335.yaml new file mode 100644 index 000000000000..e734b0fa98fc --- /dev/null +++ b/.changes/unreleased/BUG FIXES-20250117-104335.yaml @@ -0,0 +1,4 @@ +kind: BUG FIXES +body: "Fixes error ('Invalid Terraform version: Malformed version') reading workspace when the remote workspace has the terraform version set to a constraint." +custom: + Issue: "21401" \ No newline at end of file From 9262dae3b0caf314c6208d6423e9ff4b2cefae1a Mon Sep 17 00:00:00 2001 From: Shweta <35878561+shwetamurali@users.noreply.github.com> Date: Thu, 23 Jan 2025 13:53:08 -0800 Subject: [PATCH 07/15] generate changelog with changie instead of manually --- .changes/unreleased/BUG FIXES-20250117-104335.yaml | 4 ---- .changes/unreleased/BUG FIXES-20250123-135228.yaml | 5 +++++ 2 files changed, 5 insertions(+), 4 deletions(-) delete mode 100644 .changes/unreleased/BUG FIXES-20250117-104335.yaml create mode 100644 .changes/unreleased/BUG FIXES-20250123-135228.yaml diff --git a/.changes/unreleased/BUG FIXES-20250117-104335.yaml b/.changes/unreleased/BUG FIXES-20250117-104335.yaml deleted file mode 100644 index e734b0fa98fc..000000000000 --- a/.changes/unreleased/BUG FIXES-20250117-104335.yaml +++ /dev/null @@ -1,4 +0,0 @@ -kind: BUG FIXES -body: "Fixes error ('Invalid Terraform version: Malformed version') reading workspace when the remote workspace has the terraform version set to a constraint." -custom: - Issue: "21401" \ No newline at end of file diff --git a/.changes/unreleased/BUG FIXES-20250123-135228.yaml b/.changes/unreleased/BUG FIXES-20250123-135228.yaml new file mode 100644 index 000000000000..e742720cdf7b --- /dev/null +++ b/.changes/unreleased/BUG FIXES-20250123-135228.yaml @@ -0,0 +1,5 @@ +kind: BUG FIXES +body: 'Fixes error (''Invalid Terraform version: Malformed version'') reading workspace when the remote workspace has the terraform version set to a constraint.' +time: 2025-01-23T13:52:28.378207-08:00 +custom: + Issue: "21401" From f3575c5ebafd402f701d6c3f93757c68046b912d Mon Sep 17 00:00:00 2001 From: Shweta <35878561+shwetamurali@users.noreply.github.com> Date: Thu, 23 Jan 2025 16:04:26 -0800 Subject: [PATCH 08/15] Add new test --- internal/backend/remote/backend_test.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/internal/backend/remote/backend_test.go b/internal/backend/remote/backend_test.go index 3c8167e41c76..99da17ec119c 100644 --- a/internal/backend/remote/backend_test.go +++ b/internal/backend/remote/backend_test.go @@ -671,6 +671,31 @@ func TestRemote_VerifyWorkspaceTerraformVersion_workspaceErrors(t *testing.T) { } } +func TestRemote_VerifyWorkspaceTerraformVersion_versionConstraint(t *testing.T) { + b, bCleanup := testBackendDefault(t) + defer bCleanup() + + // Update the mock remote workspace Terraform version to be a version constraint string + if _, err := b.client.Workspaces.Update( + context.Background(), + b.organization, + b.workspace, + tfe.WorkspaceUpdateOptions{ + TerraformVersion: tfe.String(">= 9.9.9"), + }, + ); err != nil { + t.Fatalf("error: %v", err) + } + diags := b.VerifyWorkspaceTerraformVersion(backend.DefaultStateName) + + if len(diags) != 1 { + t.Fatal("expected diag, but none returned") + } + if got := diags.Err().Error(); !strings.Contains(got, "Terraform version mismatch") { + t.Fatalf("unexpected error: %s", got) + } +} + func TestRemote_VerifyWorkspaceTerraformVersion_ignoreFlagSet(t *testing.T) { b, bCleanup := testBackendDefault(t) defer bCleanup() From 5c9fa39b1d6861a8ce45738315f54fbb96b47b13 Mon Sep 17 00:00:00 2001 From: Shweta <35878561+shwetamurali@users.noreply.github.com> Date: Fri, 24 Jan 2025 09:42:25 -0800 Subject: [PATCH 09/15] Change issue to PR number --- .changes/unreleased/BUG FIXES-20250123-135228.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changes/unreleased/BUG FIXES-20250123-135228.yaml b/.changes/unreleased/BUG FIXES-20250123-135228.yaml index e742720cdf7b..6fccf80415fe 100644 --- a/.changes/unreleased/BUG FIXES-20250123-135228.yaml +++ b/.changes/unreleased/BUG FIXES-20250123-135228.yaml @@ -2,4 +2,4 @@ kind: BUG FIXES body: 'Fixes error (''Invalid Terraform version: Malformed version'') reading workspace when the remote workspace has the terraform version set to a constraint.' time: 2025-01-23T13:52:28.378207-08:00 custom: - Issue: "21401" + Issue: "36356" From 720c93942590fce7fed41ec1beab2251d2c0ded7 Mon Sep 17 00:00:00 2001 From: Shweta <35878561+shwetamurali@users.noreply.github.com> Date: Thu, 30 Jan 2025 11:14:06 -0800 Subject: [PATCH 10/15] Update .changes/unreleased/BUG FIXES-20250123-135228.yaml Co-authored-by: Sebastian Rivera --- .changes/unreleased/BUG FIXES-20250123-135228.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changes/unreleased/BUG FIXES-20250123-135228.yaml b/.changes/unreleased/BUG FIXES-20250123-135228.yaml index 6fccf80415fe..3e6f836a0f9e 100644 --- a/.changes/unreleased/BUG FIXES-20250123-135228.yaml +++ b/.changes/unreleased/BUG FIXES-20250123-135228.yaml @@ -1,5 +1,5 @@ kind: BUG FIXES -body: 'Fixes error (''Invalid Terraform version: Malformed version'') reading workspace when the remote workspace has the terraform version set to a constraint.' +body: 'Fixes malformed Terraform version error when the remote backend reads a remote workspace that specifies a Terraform version constraint.' time: 2025-01-23T13:52:28.378207-08:00 custom: Issue: "36356" From b751b90ab4d38ec02e537c1837347e39087c771e Mon Sep 17 00:00:00 2001 From: Shweta <35878561+shwetamurali@users.noreply.github.com> Date: Fri, 31 Jan 2025 15:59:52 -0800 Subject: [PATCH 11/15] Update backend_test.go --- internal/backend/remote/backend_test.go | 104 ++++++++++++++++++++---- 1 file changed, 89 insertions(+), 15 deletions(-) diff --git a/internal/backend/remote/backend_test.go b/internal/backend/remote/backend_test.go index 99da17ec119c..7e723ad499dd 100644 --- a/internal/backend/remote/backend_test.go +++ b/internal/backend/remote/backend_test.go @@ -675,24 +675,98 @@ func TestRemote_VerifyWorkspaceTerraformVersion_versionConstraint(t *testing.T) b, bCleanup := testBackendDefault(t) defer bCleanup() - // Update the mock remote workspace Terraform version to be a version constraint string - if _, err := b.client.Workspaces.Update( - context.Background(), - b.organization, - b.workspace, - tfe.WorkspaceUpdateOptions{ - TerraformVersion: tfe.String(">= 9.9.9"), + p := tfversion.Prerelease + v := tfversion.Version + defer func() { + tfversion.Prerelease = p + tfversion.Version = v + }() + + // Define our test case struct + type testCase struct { + terraformVersion string + versionConstraint string + shouldSatisfy bool + prerelease string + } + + // Create a slice of test cases + testCases := []testCase{ + { + terraformVersion: "1.8.0", + versionConstraint: "> 1.9.0", + shouldSatisfy: false, + prerelease: "", + }, + { + terraformVersion: "1.10.1", + versionConstraint: "~> 1.10.0", + shouldSatisfy: true, + prerelease: "", + }, + { + terraformVersion: "1.10.0", + versionConstraint: "> 1.9.0", + shouldSatisfy: true, + prerelease: "", + }, + { + terraformVersion: "1.8.0", + versionConstraint: "~> 1.9.0", + shouldSatisfy: false, + prerelease: "", + }, + { + terraformVersion: "1.10.0", + versionConstraint: "> v1.9.4", + shouldSatisfy: true, + prerelease: "dev", + }, + { + terraformVersion: "1.10.0", + versionConstraint: "> 1.10.0", + shouldSatisfy: false, + prerelease: "dev", }, - ); err != nil { - t.Fatalf("error: %v", err) } - diags := b.VerifyWorkspaceTerraformVersion(backend.DefaultStateName) - if len(diags) != 1 { - t.Fatal("expected diag, but none returned") - } - if got := diags.Err().Error(); !strings.Contains(got, "Terraform version mismatch") { - t.Fatalf("unexpected error: %s", got) + // Now we loop through each test case, utilizing the values of each case + // to setup our test and assert accordingly. + for _, tc := range testCases { + + // Set the version for this test. + tfversion.Prerelease = tc.prerelease + tfversion.Version = tc.terraformVersion + + // Update the mock remote workspace Terraform version to be a version constraint string + if _, err := b.client.Workspaces.Update( + context.Background(), + b.organization, + b.workspace, + tfe.WorkspaceUpdateOptions{ + TerraformVersion: tfe.String(tc.versionConstraint), + }, + ); err != nil { + t.Fatalf("error: %v", err) + } + diags := b.VerifyWorkspaceTerraformVersion(backend.DefaultStateName) + + if tc.shouldSatisfy { + if len(diags) > 0 { + t.Fatalf("expected no diagnostics, but got: %v", diags.Err().Error()) + } + } else { + if len(diags) == 0 { + t.Fatal("expected diagnostic, but none returned") + } + if got := diags.Err().Error(); !strings.Contains(got, "Terraform version mismatch") { + t.Fatalf("unexpected error: %s", got) + } + } + // Mock the Terraform version + // Update the mocked workspace with the constraint + // Call `VerifyWorkspaceTerraformVersion` and assert any diagnostics depending on whether + // shouldSatisfy is true or not } } From 481a15c7a0d5d614ebfb1a5319ede51ed7685bcb Mon Sep 17 00:00:00 2001 From: Shweta <35878561+shwetamurali@users.noreply.github.com> Date: Mon, 3 Feb 2025 13:10:23 -0800 Subject: [PATCH 12/15] Update backend_test.go --- internal/backend/remote/backend_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/backend/remote/backend_test.go b/internal/backend/remote/backend_test.go index 7e723ad499dd..a347f5a94459 100644 --- a/internal/backend/remote/backend_test.go +++ b/internal/backend/remote/backend_test.go @@ -719,7 +719,7 @@ func TestRemote_VerifyWorkspaceTerraformVersion_versionConstraint(t *testing.T) { terraformVersion: "1.10.0", versionConstraint: "> v1.9.4", - shouldSatisfy: true, + shouldSatisfy: false, prerelease: "dev", }, { From 0cd2226b8774571d1c6a418239251eda3a429d9f Mon Sep 17 00:00:00 2001 From: Shweta <35878561+shwetamurali@users.noreply.github.com> Date: Mon, 3 Feb 2025 13:13:47 -0800 Subject: [PATCH 13/15] Update backend_test.go --- internal/backend/remote/backend_test.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/internal/backend/remote/backend_test.go b/internal/backend/remote/backend_test.go index a347f5a94459..32d4bef1fff2 100644 --- a/internal/backend/remote/backend_test.go +++ b/internal/backend/remote/backend_test.go @@ -734,9 +734,13 @@ func TestRemote_VerifyWorkspaceTerraformVersion_versionConstraint(t *testing.T) // to setup our test and assert accordingly. for _, tc := range testCases { - // Set the version for this test. - tfversion.Prerelease = tc.prerelease - tfversion.Version = tc.terraformVersion + // Save and restore the actual version. + p := tfversion.Prerelease + v := tfversion.Version + defer func() { + tfversion.Prerelease = p + tfversion.Version = v + }() // Update the mock remote workspace Terraform version to be a version constraint string if _, err := b.client.Workspaces.Update( From 91effb6c55282d87469196237d2059ef4ed78d48 Mon Sep 17 00:00:00 2001 From: Shweta <35878561+shwetamurali@users.noreply.github.com> Date: Mon, 3 Feb 2025 13:26:04 -0800 Subject: [PATCH 14/15] Update backend_test.go --- internal/backend/remote/backend_test.go | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/internal/backend/remote/backend_test.go b/internal/backend/remote/backend_test.go index 32d4bef1fff2..0920312f7796 100644 --- a/internal/backend/remote/backend_test.go +++ b/internal/backend/remote/backend_test.go @@ -675,13 +675,6 @@ func TestRemote_VerifyWorkspaceTerraformVersion_versionConstraint(t *testing.T) b, bCleanup := testBackendDefault(t) defer bCleanup() - p := tfversion.Prerelease - v := tfversion.Version - defer func() { - tfversion.Prerelease = p - tfversion.Version = v - }() - // Define our test case struct type testCase struct { terraformVersion string @@ -730,17 +723,20 @@ func TestRemote_VerifyWorkspaceTerraformVersion_versionConstraint(t *testing.T) }, } + // Save and restore the actual version. + p := tfversion.Prerelease + v := tfversion.Version + defer func() { + tfversion.Prerelease = p + tfversion.Version = v + }() + // Now we loop through each test case, utilizing the values of each case // to setup our test and assert accordingly. for _, tc := range testCases { - // Save and restore the actual version. - p := tfversion.Prerelease - v := tfversion.Version - defer func() { - tfversion.Prerelease = p - tfversion.Version = v - }() + tfversion.Prerelease = tc.prerelease + tfversion.Version = tc.terraformVersion // Update the mock remote workspace Terraform version to be a version constraint string if _, err := b.client.Workspaces.Update( From 88c93599e68ca5382a4ff61ccaa802237277967c Mon Sep 17 00:00:00 2001 From: Shweta <35878561+shwetamurali@users.noreply.github.com> Date: Mon, 3 Feb 2025 14:38:57 -0800 Subject: [PATCH 15/15] Update internal/backend/remote/backend_test.go Co-authored-by: Sebastian Rivera --- internal/backend/remote/backend_test.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/internal/backend/remote/backend_test.go b/internal/backend/remote/backend_test.go index 0920312f7796..87c3fd40ad5b 100644 --- a/internal/backend/remote/backend_test.go +++ b/internal/backend/remote/backend_test.go @@ -763,10 +763,6 @@ func TestRemote_VerifyWorkspaceTerraformVersion_versionConstraint(t *testing.T) t.Fatalf("unexpected error: %s", got) } } - // Mock the Terraform version - // Update the mocked workspace with the constraint - // Call `VerifyWorkspaceTerraformVersion` and assert any diagnostics depending on whether - // shouldSatisfy is true or not } }