mirror of
https://github.com/opentffoundation/opentf.git
synced 2026-03-12 16:00:25 -04:00
We're shifting terminology from "environment" to "workspace". This takes care of some of the main internal API surface that was using the old terminology, though is not intended to be entirely comprehensive and is mainly just to minimize the amount of confusion for maintainers as we continue moving towards eliminating the old terminology.
101 lines
2.7 KiB
Go
101 lines
2.7 KiB
Go
package local
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/hashicorp/terraform/backend"
|
|
"github.com/hashicorp/terraform/state"
|
|
"github.com/hashicorp/terraform/terraform"
|
|
)
|
|
|
|
// TestLocal returns a configured Local struct with temporary paths and
|
|
// in-memory ContextOpts.
|
|
//
|
|
// No operations will be called on the returned value, so you can still set
|
|
// public fields without any locks.
|
|
func TestLocal(t *testing.T) *Local {
|
|
tempDir := testTempDir(t)
|
|
return &Local{
|
|
StatePath: filepath.Join(tempDir, "state.tfstate"),
|
|
StateOutPath: filepath.Join(tempDir, "state.tfstate"),
|
|
StateBackupPath: filepath.Join(tempDir, "state.tfstate.bak"),
|
|
StateWorkspaceDir: filepath.Join(tempDir, "state.tfstate.d"),
|
|
ContextOpts: &terraform.ContextOpts{},
|
|
}
|
|
}
|
|
|
|
// TestLocalProvider modifies the ContextOpts of the *Local parameter to
|
|
// have a provider with the given name.
|
|
func TestLocalProvider(t *testing.T, b *Local, name string) *terraform.MockResourceProvider {
|
|
// Build a mock resource provider for in-memory operations
|
|
p := new(terraform.MockResourceProvider)
|
|
p.DiffReturn = &terraform.InstanceDiff{}
|
|
p.RefreshFn = func(
|
|
info *terraform.InstanceInfo,
|
|
s *terraform.InstanceState) (*terraform.InstanceState, error) {
|
|
return s, nil
|
|
}
|
|
p.ResourcesReturn = []terraform.ResourceType{
|
|
terraform.ResourceType{
|
|
Name: "test_instance",
|
|
},
|
|
}
|
|
|
|
// Initialize the opts
|
|
if b.ContextOpts == nil {
|
|
b.ContextOpts = &terraform.ContextOpts{}
|
|
}
|
|
|
|
// Setup our provider
|
|
b.ContextOpts.ProviderResolver = terraform.ResourceProviderResolverFixed(
|
|
map[string]terraform.ResourceProviderFactory{
|
|
name: terraform.ResourceProviderFactoryFixed(p),
|
|
},
|
|
)
|
|
|
|
return p
|
|
}
|
|
|
|
// TestNewLocalSingle is a factory for creating a TestLocalSingleState.
|
|
// This function matches the signature required for backend/init.
|
|
func TestNewLocalSingle() backend.Backend {
|
|
return &TestLocalSingleState{}
|
|
}
|
|
|
|
// TestLocalSingleState is a backend implementation that wraps Local
|
|
// and modifies it to only support single states (returns
|
|
// ErrNamedStatesNotSupported for multi-state operations).
|
|
//
|
|
// This isn't an actual use case, this is exported just to provide a
|
|
// easy way to test that behavior.
|
|
type TestLocalSingleState struct {
|
|
Local
|
|
}
|
|
|
|
func (b *TestLocalSingleState) State(name string) (state.State, error) {
|
|
if name != backend.DefaultStateName {
|
|
return nil, backend.ErrNamedStatesNotSupported
|
|
}
|
|
|
|
return b.Local.State(name)
|
|
}
|
|
|
|
func (b *TestLocalSingleState) States() ([]string, error) {
|
|
return nil, backend.ErrNamedStatesNotSupported
|
|
}
|
|
|
|
func (b *TestLocalSingleState) DeleteState(string) error {
|
|
return backend.ErrNamedStatesNotSupported
|
|
}
|
|
|
|
func testTempDir(t *testing.T) string {
|
|
d, err := ioutil.TempDir("", "tf")
|
|
if err != nil {
|
|
t.Fatalf("err: %s", err)
|
|
}
|
|
|
|
return d
|
|
}
|