From bfb347603977a7221c8d372382ec10dc97cc0a01 Mon Sep 17 00:00:00 2001 From: Daniel Banck Date: Thu, 19 Mar 2026 17:30:42 +0000 Subject: [PATCH] backport of commit 80fd008309fdf45269735851c8d82f89ca956d0f --- internal/command/cloud_mock.go | 57 ++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/internal/command/cloud_mock.go b/internal/command/cloud_mock.go index 1295fac498..cf324624e9 100644 --- a/internal/command/cloud_mock.go +++ b/internal/command/cloud_mock.go @@ -4,6 +4,7 @@ package command import ( + "context" "fmt" "io" "net/http" @@ -11,6 +12,15 @@ import ( "os" "path/filepath" "testing" + + "github.com/hashicorp/terraform/internal/backend" + "github.com/hashicorp/terraform/internal/backend/backendrun" + "github.com/hashicorp/terraform/internal/command/arguments" + "github.com/hashicorp/terraform/internal/configs" + "github.com/hashicorp/terraform/internal/terraform" + "github.com/hashicorp/terraform/internal/tfdiags" + + backendLocal "github.com/hashicorp/terraform/internal/backend/local" ) func cloudTestServerWithVars(t *testing.T) *httptest.Server { @@ -116,3 +126,50 @@ func cloudTestServerWithVars(t *testing.T) *httptest.Server { return httptest.NewServer(mux) } + +// TestVariableBackend is a backend used in test that are fetching variable +// values for constant values. +type TestVariableBackend struct { + *backendLocal.Local + + vars map[string]string +} + +func TestNewVariableBackend(result map[string]string) backend.Backend { + return &TestVariableBackend{ + Local: backendLocal.New(), + vars: result, + } +} + +var _ backendrun.ConstVariableSupplier = (*TestVariableBackend)(nil) + +func (b *TestVariableBackend) FetchVariables(ctx context.Context, workspace string) (map[string]arguments.UnparsedVariableValue, tfdiags.Diagnostics) { + result := make(map[string]arguments.UnparsedVariableValue) + + for name, value := range b.vars { + result[name] = testUnparsedVariableValueString{ + str: value, + name: name, + } + } + + return result, nil +} + +type testUnparsedVariableValueString struct { + str string + name string +} + +func (v testUnparsedVariableValueString) ParseVariableValue(mode configs.VariableParsingMode) (*terraform.InputValue, tfdiags.Diagnostics) { + var diags tfdiags.Diagnostics + + val, hclDiags := mode.Parse(v.name, v.str) + diags = diags.Append(hclDiags) + + return &terraform.InputValue{ + Value: val, + SourceType: terraform.ValueFromInput, + }, diags +}