@ -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
}