backend/local WIP commit - fixing tests
This commit is contained in:
parent
2a8aa6a139
commit
2808df48ec
|
@ -330,8 +330,8 @@ func (b *Local) Operation(ctx context.Context, op *backend.Operation) (*backend.
|
|||
err := op.StateLocker.Unlock(nil)
|
||||
if err != nil {
|
||||
b.ShowDiagnostics(err)
|
||||
runningOp.Result = backend.OperationFailure
|
||||
}
|
||||
runningOp.Result = backend.OperationFailure
|
||||
}()
|
||||
|
||||
defer b.opLock.Unlock()
|
||||
|
|
|
@ -84,6 +84,7 @@ func (b *Local) opApply(
|
|||
}
|
||||
|
||||
trivialPlan := plan.Changes.Empty()
|
||||
|
||||
hasUI := op.UIOut != nil && op.UIIn != nil
|
||||
mustConfirm := hasUI && ((op.Destroy && (!op.DestroyForce && !op.AutoApprove)) || (!op.Destroy && !op.AutoApprove && !trivialPlan))
|
||||
if mustConfirm {
|
||||
|
|
|
@ -16,6 +16,7 @@ import (
|
|||
"github.com/hashicorp/terraform/backend"
|
||||
"github.com/hashicorp/terraform/configs/configload"
|
||||
"github.com/hashicorp/terraform/configs/configschema"
|
||||
"github.com/hashicorp/terraform/providers"
|
||||
"github.com/hashicorp/terraform/states"
|
||||
"github.com/hashicorp/terraform/states/statemgr"
|
||||
"github.com/hashicorp/terraform/terraform"
|
||||
|
@ -26,7 +27,10 @@ func TestLocal_applyBasic(t *testing.T) {
|
|||
defer cleanup()
|
||||
p := TestLocalProvider(t, b, "test", applyFixtureSchema())
|
||||
|
||||
p.ApplyReturn = &terraform.InstanceState{ID: "yes"}
|
||||
p.ApplyResourceChangeResponse = providers.ApplyResourceChangeResponse{NewState: cty.ObjectVal(map[string]cty.Value{
|
||||
"id": cty.StringVal("yes"),
|
||||
"ami": cty.StringVal("bar"),
|
||||
})}
|
||||
|
||||
op, configCleanup := testOperationApply(t, "./test-fixtures/apply")
|
||||
defer configCleanup()
|
||||
|
@ -40,15 +44,15 @@ func TestLocal_applyBasic(t *testing.T) {
|
|||
t.Fatal("operation failed")
|
||||
}
|
||||
|
||||
if p.RefreshCalled {
|
||||
t.Fatal("refresh should not be called")
|
||||
if p.ReadResourceCalled {
|
||||
t.Fatal("ReadResource should not be called")
|
||||
}
|
||||
|
||||
if !p.DiffCalled {
|
||||
if !p.PlanResourceChangeCalled {
|
||||
t.Fatal("diff should be called")
|
||||
}
|
||||
|
||||
if !p.ApplyCalled {
|
||||
if !p.ApplyResourceChangeCalled {
|
||||
t.Fatal("apply should be called")
|
||||
}
|
||||
|
||||
|
@ -56,7 +60,8 @@ func TestLocal_applyBasic(t *testing.T) {
|
|||
test_instance.foo:
|
||||
ID = yes
|
||||
provider = provider.test
|
||||
`)
|
||||
ami = bar
|
||||
`)
|
||||
}
|
||||
|
||||
func TestLocal_applyEmptyDir(t *testing.T) {
|
||||
|
@ -64,8 +69,7 @@ func TestLocal_applyEmptyDir(t *testing.T) {
|
|||
defer cleanup()
|
||||
|
||||
p := TestLocalProvider(t, b, "test", &terraform.ProviderSchema{})
|
||||
|
||||
p.ApplyReturn = &terraform.InstanceState{ID: "yes"}
|
||||
p.ApplyResourceChangeResponse = providers.ApplyResourceChangeResponse{NewState: cty.ObjectVal(map[string]cty.Value{"id": cty.StringVal("yes")})}
|
||||
|
||||
op, configCleanup := testOperationApply(t, "./test-fixtures/empty")
|
||||
defer configCleanup()
|
||||
|
@ -79,7 +83,7 @@ func TestLocal_applyEmptyDir(t *testing.T) {
|
|||
t.Fatal("operation succeeded; want error")
|
||||
}
|
||||
|
||||
if p.ApplyCalled {
|
||||
if p.ApplyResourceChangeCalled {
|
||||
t.Fatal("apply should not be called")
|
||||
}
|
||||
|
||||
|
@ -93,7 +97,7 @@ func TestLocal_applyEmptyDirDestroy(t *testing.T) {
|
|||
defer cleanup()
|
||||
p := TestLocalProvider(t, b, "test", &terraform.ProviderSchema{})
|
||||
|
||||
p.ApplyReturn = nil
|
||||
p.ApplyResourceChangeResponse = providers.ApplyResourceChangeResponse{}
|
||||
|
||||
op, configCleanup := testOperationApply(t, "./test-fixtures/empty")
|
||||
defer configCleanup()
|
||||
|
@ -108,7 +112,7 @@ func TestLocal_applyEmptyDirDestroy(t *testing.T) {
|
|||
t.Fatalf("apply operation failed")
|
||||
}
|
||||
|
||||
if p.ApplyCalled {
|
||||
if p.ApplyResourceChangeCalled {
|
||||
t.Fatal("apply should not be called")
|
||||
}
|
||||
|
||||
|
@ -199,7 +203,7 @@ func TestLocal_applyBackendFail(t *testing.T) {
|
|||
b.CLI = new(cli.MockUi)
|
||||
p := TestLocalProvider(t, b, "test", applyFixtureSchema())
|
||||
|
||||
p.ApplyReturn = &terraform.InstanceState{ID: "yes"}
|
||||
p.ApplyResourceChangeResponse = providers.ApplyResourceChangeResponse{NewState: cty.ObjectVal(map[string]cty.Value{"id": cty.StringVal("yes")})}
|
||||
|
||||
run, err := b.Operation(context.Background(), op)
|
||||
if err != nil {
|
||||
|
@ -283,6 +287,7 @@ func applyFixtureSchema() *terraform.ProviderSchema {
|
|||
"test_instance": {
|
||||
Attributes: map[string]*configschema.Attribute{
|
||||
"ami": {Type: cty.String, Optional: true},
|
||||
"id": {Type: cty.String, Computed: true},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
@ -9,8 +9,8 @@ import (
|
|||
"testing"
|
||||
|
||||
"github.com/hashicorp/terraform/backend"
|
||||
"github.com/hashicorp/terraform/configs/configschema"
|
||||
"github.com/hashicorp/terraform/configs/configload"
|
||||
"github.com/hashicorp/terraform/configs/configschema"
|
||||
"github.com/hashicorp/terraform/terraform"
|
||||
"github.com/mitchellh/cli"
|
||||
"github.com/zclconf/go-cty/cty"
|
||||
|
@ -34,8 +34,8 @@ func TestLocal_planBasic(t *testing.T) {
|
|||
t.Fatalf("plan operation failed")
|
||||
}
|
||||
|
||||
if !p.DiffCalled {
|
||||
t.Fatal("diff should be called")
|
||||
if !p.PlanResourceChangeCalled {
|
||||
t.Fatal("PlanResourceChange should be called")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -144,8 +144,8 @@ func TestLocal_planRefreshFalse(t *testing.T) {
|
|||
t.Fatalf("plan operation failed")
|
||||
}
|
||||
|
||||
if p.RefreshCalled {
|
||||
t.Fatal("refresh should not be called")
|
||||
if p.ReadResourceCalled {
|
||||
t.Fatal("ReadResource should not be called")
|
||||
}
|
||||
|
||||
if !run.PlanEmpty {
|
||||
|
@ -178,8 +178,8 @@ func TestLocal_planDestroy(t *testing.T) {
|
|||
t.Fatalf("plan operation failed")
|
||||
}
|
||||
|
||||
if !p.RefreshCalled {
|
||||
t.Fatal("refresh should be called")
|
||||
if !p.ReadResourceCalled {
|
||||
t.Fatal("ReadResource should be called")
|
||||
}
|
||||
|
||||
if run.PlanEmpty {
|
||||
|
|
|
@ -6,8 +6,8 @@ import (
|
|||
"testing"
|
||||
|
||||
"github.com/hashicorp/terraform/backend"
|
||||
"github.com/hashicorp/terraform/configs/configschema"
|
||||
"github.com/hashicorp/terraform/configs/configload"
|
||||
"github.com/hashicorp/terraform/configs/configschema"
|
||||
"github.com/hashicorp/terraform/terraform"
|
||||
"github.com/zclconf/go-cty/cty"
|
||||
)
|
||||
|
@ -19,8 +19,8 @@ func TestLocal_refresh(t *testing.T) {
|
|||
p := TestLocalProvider(t, b, "test", refreshFixtureSchema())
|
||||
terraform.TestStateFile(t, b.StatePath, testRefreshState())
|
||||
|
||||
p.RefreshFn = nil
|
||||
p.RefreshReturn = &terraform.InstanceState{ID: "yes"}
|
||||
// p.RefreshFn = nil
|
||||
// p.RefreshReturn = &terraform.InstanceState{ID: "yes"}
|
||||
|
||||
op, configCleanup := testOperationRefresh(t, "./test-fixtures/refresh")
|
||||
defer configCleanup()
|
||||
|
@ -31,8 +31,8 @@ func TestLocal_refresh(t *testing.T) {
|
|||
}
|
||||
<-run.Done()
|
||||
|
||||
if !p.RefreshCalled {
|
||||
t.Fatal("refresh should be called")
|
||||
if !p.ReadResourceCalled {
|
||||
t.Fatal("ReadResource should be called")
|
||||
}
|
||||
|
||||
checkState(t, b.StateOutPath, `
|
||||
|
@ -48,8 +48,8 @@ func TestLocal_refreshNoConfig(t *testing.T) {
|
|||
p := TestLocalProvider(t, b, "test", &terraform.ProviderSchema{})
|
||||
terraform.TestStateFile(t, b.StatePath, testRefreshState())
|
||||
|
||||
p.RefreshFn = nil
|
||||
p.RefreshReturn = &terraform.InstanceState{ID: "yes"}
|
||||
// p.RefreshFn = nil
|
||||
// p.RefreshReturn = &terraform.InstanceState{ID: "yes"}
|
||||
|
||||
op, configCleanup := testOperationRefresh(t, "./test-fixtures/empty")
|
||||
defer configCleanup()
|
||||
|
@ -60,8 +60,8 @@ func TestLocal_refreshNoConfig(t *testing.T) {
|
|||
}
|
||||
<-run.Done()
|
||||
|
||||
if !p.RefreshCalled {
|
||||
t.Fatal("refresh should be called")
|
||||
if !p.ReadResourceCalled {
|
||||
t.Fatal("ReadResource should be called")
|
||||
}
|
||||
|
||||
checkState(t, b.StateOutPath, `
|
||||
|
@ -78,8 +78,8 @@ func TestLocal_refreshNilModuleWithInput(t *testing.T) {
|
|||
p := TestLocalProvider(t, b, "test", &terraform.ProviderSchema{})
|
||||
terraform.TestStateFile(t, b.StatePath, testRefreshState())
|
||||
|
||||
p.RefreshFn = nil
|
||||
p.RefreshReturn = &terraform.InstanceState{ID: "yes"}
|
||||
// p.RefreshFn = nil
|
||||
// p.RefreshReturn = &terraform.InstanceState{ID: "yes"}
|
||||
|
||||
b.OpInput = true
|
||||
|
||||
|
@ -92,8 +92,8 @@ func TestLocal_refreshNilModuleWithInput(t *testing.T) {
|
|||
}
|
||||
<-run.Done()
|
||||
|
||||
if !p.RefreshCalled {
|
||||
t.Fatal("refresh should be called")
|
||||
if !p.ReadResourceCalled {
|
||||
t.Fatal("ReadResource should be called")
|
||||
}
|
||||
|
||||
checkState(t, b.StateOutPath, `
|
||||
|
@ -131,8 +131,8 @@ func TestLocal_refreshInput(t *testing.T) {
|
|||
return nil
|
||||
}
|
||||
|
||||
p.RefreshFn = nil
|
||||
p.RefreshReturn = &terraform.InstanceState{ID: "yes"}
|
||||
// p.RefreshFn = nil
|
||||
// p.RefreshReturn = &terraform.InstanceState{ID: "yes"}
|
||||
|
||||
// Enable input asking since it is normally disabled by default
|
||||
b.OpInput = true
|
||||
|
@ -148,8 +148,8 @@ func TestLocal_refreshInput(t *testing.T) {
|
|||
}
|
||||
<-run.Done()
|
||||
|
||||
if !p.RefreshCalled {
|
||||
t.Fatal("refresh should be called")
|
||||
if !p.ReadResourceCalled {
|
||||
t.Fatal("ReadResource should be called")
|
||||
}
|
||||
|
||||
checkState(t, b.StateOutPath, `
|
||||
|
@ -165,8 +165,8 @@ func TestLocal_refreshValidate(t *testing.T) {
|
|||
p := TestLocalProvider(t, b, "test", refreshFixtureSchema())
|
||||
terraform.TestStateFile(t, b.StatePath, testRefreshState())
|
||||
|
||||
p.RefreshFn = nil
|
||||
p.RefreshReturn = &terraform.InstanceState{ID: "yes"}
|
||||
// p.RefreshFn = nil
|
||||
// p.RefreshReturn = &terraform.InstanceState{ID: "yes"}
|
||||
|
||||
// Enable validation
|
||||
b.OpValidation = true
|
||||
|
@ -180,7 +180,8 @@ func TestLocal_refreshValidate(t *testing.T) {
|
|||
}
|
||||
<-run.Done()
|
||||
|
||||
if !p.ValidateCalled {
|
||||
// what are we validating?
|
||||
if !p.ValidateProviderConfigCalled {
|
||||
t.Fatal("validate should be called")
|
||||
}
|
||||
|
||||
|
|
|
@ -10,8 +10,8 @@ import (
|
|||
"testing"
|
||||
|
||||
"github.com/hashicorp/terraform/backend"
|
||||
"github.com/hashicorp/terraform/states/statefile"
|
||||
"github.com/hashicorp/terraform/states/statemgr"
|
||||
"github.com/hashicorp/terraform/terraform"
|
||||
)
|
||||
|
||||
func TestLocal_impl(t *testing.T) {
|
||||
|
@ -35,13 +35,13 @@ func checkState(t *testing.T, path, expected string) {
|
|||
t.Fatalf("err: %s", err)
|
||||
}
|
||||
|
||||
state, err := terraform.ReadState(f)
|
||||
state, err := statefile.Read(f)
|
||||
f.Close()
|
||||
if err != nil {
|
||||
t.Fatalf("err: %s", err)
|
||||
}
|
||||
|
||||
actual := strings.TrimSpace(state.String())
|
||||
actual := state.State.String()
|
||||
expected = strings.TrimSpace(expected)
|
||||
if actual != expected {
|
||||
t.Fatalf("state does not match! actual:\n%s\n\nexpected:\n%s", actual, expected)
|
||||
|
|
|
@ -7,6 +7,7 @@ import (
|
|||
"testing"
|
||||
|
||||
"github.com/hashicorp/terraform/backend"
|
||||
"github.com/hashicorp/terraform/providers"
|
||||
"github.com/hashicorp/terraform/states/statemgr"
|
||||
"github.com/hashicorp/terraform/terraform"
|
||||
"github.com/hashicorp/terraform/tfdiags"
|
||||
|
@ -41,7 +42,7 @@ func TestLocal(t *testing.T) (*Local, func()) {
|
|||
}
|
||||
cleanup := func() {
|
||||
if err := os.RemoveAll(tempDir); err != nil {
|
||||
t.Fatal("error clecanup up test:", err)
|
||||
t.Fatal("error cleanup up test:", err)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -50,39 +51,43 @@ func TestLocal(t *testing.T) (*Local, func()) {
|
|||
|
||||
// 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, schema *terraform.ProviderSchema) *terraform.MockResourceProvider {
|
||||
t.Fatalf("TestLocalProvider is not yet updated to use the new provider types")
|
||||
return nil
|
||||
/*
|
||||
// Build a mock resource provider for in-memory operations
|
||||
p := new(terraform.MockResourceProvider)
|
||||
p.GetSchemaReturn = schema
|
||||
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",
|
||||
},
|
||||
func TestLocalProvider(t *testing.T, b *Local, name string, schema *terraform.ProviderSchema) *terraform.MockProvider {
|
||||
// Build a mock resource provider for in-memory operations
|
||||
p := new(terraform.MockProvider)
|
||||
p.GetSchemaReturn = schema
|
||||
p.PlanResourceChangeFn = func(req providers.PlanResourceChangeRequest) providers.PlanResourceChangeResponse {
|
||||
return providers.PlanResourceChangeResponse{
|
||||
PlannedState: req.ProposedNewState,
|
||||
PlannedPrivate: req.PriorPrivate,
|
||||
}
|
||||
}
|
||||
// p.DiffReturn = &terraform.InstanceDiff{}
|
||||
|
||||
// Initialize the opts
|
||||
if b.ContextOpts == nil {
|
||||
b.ContextOpts = &terraform.ContextOpts{}
|
||||
}
|
||||
// p.RefreshFn = func(
|
||||
// info *terraform.InstanceInfo,
|
||||
// s *terraform.InstanceState) (*terraform.InstanceState, error) {
|
||||
// return s, nil
|
||||
// }
|
||||
// p.ResourcesReturn = []terraform.ResourceType{
|
||||
// terraform.ResourceType{
|
||||
// Name: "test_instance",
|
||||
// },
|
||||
// }
|
||||
|
||||
// Setup our provider
|
||||
b.ContextOpts.ProviderResolver = providers.ResolverFixed(
|
||||
map[string]providers.Factory{
|
||||
name: providers.FactoryFixed(p),
|
||||
},
|
||||
)
|
||||
// Initialize the opts
|
||||
if b.ContextOpts == nil {
|
||||
b.ContextOpts = &terraform.ContextOpts{}
|
||||
}
|
||||
|
||||
// Setup our provider
|
||||
b.ContextOpts.ProviderResolver = providers.ResolverFixed(
|
||||
map[string]providers.Factory{
|
||||
name: providers.FactoryFixed(p),
|
||||
},
|
||||
)
|
||||
|
||||
return p
|
||||
|
||||
return p
|
||||
*/
|
||||
}
|
||||
|
||||
// TestNewLocalSingle is a factory for creating a TestLocalSingleState.
|
||||
|
|
Loading…
Reference in New Issue