mirror of
https://github.com/opentofu/opentofu.git
synced 2025-02-25 18:45:20 -06:00
command: Make suitable provider schemas available for all "plan" tests
This commit is contained in:
parent
73318a436b
commit
ca314afc0d
@ -15,6 +15,7 @@ import (
|
|||||||
"github.com/zclconf/go-cty/cty"
|
"github.com/zclconf/go-cty/cty"
|
||||||
|
|
||||||
"github.com/hashicorp/terraform/addrs"
|
"github.com/hashicorp/terraform/addrs"
|
||||||
|
"github.com/hashicorp/terraform/configs/configschema"
|
||||||
"github.com/hashicorp/terraform/helper/copy"
|
"github.com/hashicorp/terraform/helper/copy"
|
||||||
"github.com/hashicorp/terraform/providers"
|
"github.com/hashicorp/terraform/providers"
|
||||||
"github.com/hashicorp/terraform/states"
|
"github.com/hashicorp/terraform/states"
|
||||||
@ -31,7 +32,7 @@ func TestPlan(t *testing.T) {
|
|||||||
}
|
}
|
||||||
defer os.Chdir(cwd)
|
defer os.Chdir(cwd)
|
||||||
|
|
||||||
p := testProvider()
|
p := planFixtureProvider()
|
||||||
ui := new(cli.MockUi)
|
ui := new(cli.MockUi)
|
||||||
c := &PlanCommand{
|
c := &PlanCommand{
|
||||||
Meta: Meta{
|
Meta: Meta{
|
||||||
@ -64,7 +65,7 @@ func TestPlan_lockedState(t *testing.T) {
|
|||||||
}
|
}
|
||||||
defer os.Chdir(cwd)
|
defer os.Chdir(cwd)
|
||||||
|
|
||||||
p := testProvider()
|
p := planFixtureProvider()
|
||||||
ui := new(cli.MockUi)
|
ui := new(cli.MockUi)
|
||||||
c := &PlanCommand{
|
c := &PlanCommand{
|
||||||
Meta: Meta{
|
Meta: Meta{
|
||||||
@ -127,7 +128,7 @@ func TestPlan_destroy(t *testing.T) {
|
|||||||
outPath := testTempFile(t)
|
outPath := testTempFile(t)
|
||||||
statePath := testStateFile(t, originalState)
|
statePath := testStateFile(t, originalState)
|
||||||
|
|
||||||
p := testProvider()
|
p := planFixtureProvider()
|
||||||
ui := new(cli.MockUi)
|
ui := new(cli.MockUi)
|
||||||
c := &PlanCommand{
|
c := &PlanCommand{
|
||||||
Meta: Meta{
|
Meta: Meta{
|
||||||
@ -164,7 +165,7 @@ func TestPlan_noState(t *testing.T) {
|
|||||||
tmp, cwd := testCwd(t)
|
tmp, cwd := testCwd(t)
|
||||||
defer testFixCwd(t, tmp, cwd)
|
defer testFixCwd(t, tmp, cwd)
|
||||||
|
|
||||||
p := testProvider()
|
p := planFixtureProvider()
|
||||||
ui := new(cli.MockUi)
|
ui := new(cli.MockUi)
|
||||||
c := &PlanCommand{
|
c := &PlanCommand{
|
||||||
Meta: Meta{
|
Meta: Meta{
|
||||||
@ -187,7 +188,7 @@ func TestPlan_noState(t *testing.T) {
|
|||||||
|
|
||||||
// Verify that the provider was called with the existing state
|
// Verify that the provider was called with the existing state
|
||||||
actual := p.PlanResourceChangeRequest.PriorState
|
actual := p.PlanResourceChangeRequest.PriorState
|
||||||
expected := cty.NullVal(cty.EmptyObject)
|
expected := cty.NullVal(p.GetSchemaReturn.ResourceTypes["test_instance"].ImpliedType())
|
||||||
if !expected.RawEquals(actual) {
|
if !expected.RawEquals(actual) {
|
||||||
t.Fatalf("wrong prior state\ngot: %#v\nwant: %#v", actual, expected)
|
t.Fatalf("wrong prior state\ngot: %#v\nwant: %#v", actual, expected)
|
||||||
}
|
}
|
||||||
@ -200,7 +201,7 @@ func TestPlan_outPath(t *testing.T) {
|
|||||||
td := testTempDir(t)
|
td := testTempDir(t)
|
||||||
outPath := filepath.Join(td, "test.plan")
|
outPath := filepath.Join(td, "test.plan")
|
||||||
|
|
||||||
p := testProvider()
|
p := planFixtureProvider()
|
||||||
ui := new(cli.MockUi)
|
ui := new(cli.MockUi)
|
||||||
c := &PlanCommand{
|
c := &PlanCommand{
|
||||||
Meta: Meta{
|
Meta: Meta{
|
||||||
@ -252,7 +253,7 @@ func TestPlan_outPathNoChange(t *testing.T) {
|
|||||||
td := testTempDir(t)
|
td := testTempDir(t)
|
||||||
outPath := filepath.Join(td, "test.plan")
|
outPath := filepath.Join(td, "test.plan")
|
||||||
|
|
||||||
p := testProvider()
|
p := planFixtureProvider()
|
||||||
ui := new(cli.MockUi)
|
ui := new(cli.MockUi)
|
||||||
c := &PlanCommand{
|
c := &PlanCommand{
|
||||||
Meta: Meta{
|
Meta: Meta{
|
||||||
@ -341,7 +342,7 @@ func TestPlan_refreshFalse(t *testing.T) {
|
|||||||
tmp, cwd := testCwd(t)
|
tmp, cwd := testCwd(t)
|
||||||
defer testFixCwd(t, tmp, cwd)
|
defer testFixCwd(t, tmp, cwd)
|
||||||
|
|
||||||
p := testProvider()
|
p := planFixtureProvider()
|
||||||
ui := new(cli.MockUi)
|
ui := new(cli.MockUi)
|
||||||
c := &PlanCommand{
|
c := &PlanCommand{
|
||||||
Meta: Meta{
|
Meta: Meta{
|
||||||
@ -367,7 +368,7 @@ func TestPlan_state(t *testing.T) {
|
|||||||
originalState := testState()
|
originalState := testState()
|
||||||
statePath := testStateFile(t, originalState)
|
statePath := testStateFile(t, originalState)
|
||||||
|
|
||||||
p := testProvider()
|
p := planFixtureProvider()
|
||||||
ui := new(cli.MockUi)
|
ui := new(cli.MockUi)
|
||||||
c := &PlanCommand{
|
c := &PlanCommand{
|
||||||
Meta: Meta{
|
Meta: Meta{
|
||||||
@ -387,7 +388,12 @@ func TestPlan_state(t *testing.T) {
|
|||||||
// Verify that the provider was called with the existing state
|
// Verify that the provider was called with the existing state
|
||||||
actual := p.PlanResourceChangeRequest.PriorState
|
actual := p.PlanResourceChangeRequest.PriorState
|
||||||
expected := cty.ObjectVal(map[string]cty.Value{
|
expected := cty.ObjectVal(map[string]cty.Value{
|
||||||
"id": cty.StringVal("bar"),
|
"id": cty.StringVal("bar"),
|
||||||
|
"ami": cty.NullVal(cty.String),
|
||||||
|
"network_interface": cty.NullVal(cty.List(cty.Object(map[string]cty.Type{
|
||||||
|
"device_index": cty.String,
|
||||||
|
"description": cty.String,
|
||||||
|
}))),
|
||||||
})
|
})
|
||||||
if !expected.RawEquals(actual) {
|
if !expected.RawEquals(actual) {
|
||||||
t.Fatalf("wrong prior state\ngot: %#v\nwant: %#v", actual, expected)
|
t.Fatalf("wrong prior state\ngot: %#v\nwant: %#v", actual, expected)
|
||||||
@ -408,7 +414,7 @@ func TestPlan_stateDefault(t *testing.T) {
|
|||||||
}
|
}
|
||||||
defer os.Chdir(cwd)
|
defer os.Chdir(cwd)
|
||||||
|
|
||||||
p := testProvider()
|
p := planFixtureProvider()
|
||||||
ui := new(cli.MockUi)
|
ui := new(cli.MockUi)
|
||||||
c := &PlanCommand{
|
c := &PlanCommand{
|
||||||
Meta: Meta{
|
Meta: Meta{
|
||||||
@ -429,6 +435,11 @@ func TestPlan_stateDefault(t *testing.T) {
|
|||||||
actual := p.PlanResourceChangeRequest.PriorState
|
actual := p.PlanResourceChangeRequest.PriorState
|
||||||
expected := cty.ObjectVal(map[string]cty.Value{
|
expected := cty.ObjectVal(map[string]cty.Value{
|
||||||
"id": cty.StringVal("bar"),
|
"id": cty.StringVal("bar"),
|
||||||
|
"ami": cty.NullVal(cty.String),
|
||||||
|
"network_interface": cty.NullVal(cty.List(cty.Object(map[string]cty.Type{
|
||||||
|
"device_index": cty.String,
|
||||||
|
"description": cty.String,
|
||||||
|
}))),
|
||||||
})
|
})
|
||||||
if !expected.RawEquals(actual) {
|
if !expected.RawEquals(actual) {
|
||||||
t.Fatalf("wrong prior state\ngot: %#v\nwant: %#v", actual, expected)
|
t.Fatalf("wrong prior state\ngot: %#v\nwant: %#v", actual, expected)
|
||||||
@ -450,6 +461,20 @@ func TestPlan_validate(t *testing.T) {
|
|||||||
defer os.Chdir(cwd)
|
defer os.Chdir(cwd)
|
||||||
|
|
||||||
p := testProvider()
|
p := testProvider()
|
||||||
|
p.GetSchemaReturn = &terraform.ProviderSchema{
|
||||||
|
ResourceTypes: map[string]*configschema.Block{
|
||||||
|
"test_instance": {
|
||||||
|
Attributes: map[string]*configschema.Attribute{
|
||||||
|
"id": {Type: cty.String, Optional: true, Computed: true},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
p.PlanResourceChangeFn = func(req providers.PlanResourceChangeRequest) providers.PlanResourceChangeResponse {
|
||||||
|
return providers.PlanResourceChangeResponse{
|
||||||
|
PlannedState: req.ProposedNewState,
|
||||||
|
}
|
||||||
|
}
|
||||||
ui := new(cli.MockUi)
|
ui := new(cli.MockUi)
|
||||||
c := &PlanCommand{
|
c := &PlanCommand{
|
||||||
Meta: Meta{
|
Meta: Meta{
|
||||||
@ -473,7 +498,7 @@ func TestPlan_vars(t *testing.T) {
|
|||||||
tmp, cwd := testCwd(t)
|
tmp, cwd := testCwd(t)
|
||||||
defer testFixCwd(t, tmp, cwd)
|
defer testFixCwd(t, tmp, cwd)
|
||||||
|
|
||||||
p := testProvider()
|
p := planVarsFixtureProvider()
|
||||||
ui := new(cli.MockUi)
|
ui := new(cli.MockUi)
|
||||||
c := &PlanCommand{
|
c := &PlanCommand{
|
||||||
Meta: Meta{
|
Meta: Meta{
|
||||||
@ -517,7 +542,7 @@ func TestPlan_varsUnset(t *testing.T) {
|
|||||||
|
|
||||||
defaultInputReader = bytes.NewBufferString("bar\n")
|
defaultInputReader = bytes.NewBufferString("bar\n")
|
||||||
|
|
||||||
p := testProvider()
|
p := planVarsFixtureProvider()
|
||||||
ui := new(cli.MockUi)
|
ui := new(cli.MockUi)
|
||||||
c := &PlanCommand{
|
c := &PlanCommand{
|
||||||
Meta: Meta{
|
Meta: Meta{
|
||||||
@ -543,7 +568,7 @@ func TestPlan_varFile(t *testing.T) {
|
|||||||
t.Fatalf("err: %s", err)
|
t.Fatalf("err: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
p := testProvider()
|
p := planVarsFixtureProvider()
|
||||||
ui := new(cli.MockUi)
|
ui := new(cli.MockUi)
|
||||||
c := &PlanCommand{
|
c := &PlanCommand{
|
||||||
Meta: Meta{
|
Meta: Meta{
|
||||||
@ -593,7 +618,7 @@ func TestPlan_varFileDefault(t *testing.T) {
|
|||||||
}
|
}
|
||||||
defer os.Chdir(cwd)
|
defer os.Chdir(cwd)
|
||||||
|
|
||||||
p := testProvider()
|
p := planVarsFixtureProvider()
|
||||||
ui := new(cli.MockUi)
|
ui := new(cli.MockUi)
|
||||||
c := &PlanCommand{
|
c := &PlanCommand{
|
||||||
Meta: Meta{
|
Meta: Meta{
|
||||||
@ -636,7 +661,7 @@ func TestPlan_detailedExitcode(t *testing.T) {
|
|||||||
}
|
}
|
||||||
defer os.Chdir(cwd)
|
defer os.Chdir(cwd)
|
||||||
|
|
||||||
p := testProvider()
|
p := planFixtureProvider()
|
||||||
ui := new(cli.MockUi)
|
ui := new(cli.MockUi)
|
||||||
c := &PlanCommand{
|
c := &PlanCommand{
|
||||||
Meta: Meta{
|
Meta: Meta{
|
||||||
@ -736,6 +761,79 @@ func TestPlan_shutdown(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// planFixtureSchema returns a schema suitable for processing the
|
||||||
|
// configuration in test-fixtures/plan . This schema should be
|
||||||
|
// assigned to a mock provider named "test".
|
||||||
|
func planFixtureSchema() *terraform.ProviderSchema {
|
||||||
|
return &terraform.ProviderSchema{
|
||||||
|
ResourceTypes: map[string]*configschema.Block{
|
||||||
|
"test_instance": {
|
||||||
|
Attributes: map[string]*configschema.Attribute{
|
||||||
|
"id": {Type: cty.String, Optional: true, Computed: true},
|
||||||
|
"ami": {Type: cty.String, Optional: true},
|
||||||
|
},
|
||||||
|
BlockTypes: map[string]*configschema.NestedBlock{
|
||||||
|
"network_interface": {
|
||||||
|
Nesting: configschema.NestingList,
|
||||||
|
Block: configschema.Block{
|
||||||
|
Attributes: map[string]*configschema.Attribute{
|
||||||
|
"device_index": {Type: cty.String, Optional: true},
|
||||||
|
"description": {Type: cty.String, Optional: true},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// planFixtureProvider returns a mock provider that is configured for basic
|
||||||
|
// operation with the configuration in test-fixtures/plan. This mock has
|
||||||
|
// GetSchemaReturn and PlanResourceChangeFn populated, with the plan
|
||||||
|
// step just passing through the new object proposed by Terraform Core.
|
||||||
|
func planFixtureProvider() *terraform.MockProvider {
|
||||||
|
p := testProvider()
|
||||||
|
p.GetSchemaReturn = planFixtureSchema()
|
||||||
|
p.PlanResourceChangeFn = func(req providers.PlanResourceChangeRequest) providers.PlanResourceChangeResponse {
|
||||||
|
return providers.PlanResourceChangeResponse{
|
||||||
|
PlannedState: req.ProposedNewState,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
|
// planVarsFixtureSchema returns a schema suitable for processing the
|
||||||
|
// configuration in test-fixtures/plan-vars . This schema should be
|
||||||
|
// assigned to a mock provider named "test".
|
||||||
|
func planVarsFixtureSchema() *terraform.ProviderSchema {
|
||||||
|
return &terraform.ProviderSchema{
|
||||||
|
ResourceTypes: map[string]*configschema.Block{
|
||||||
|
"test_instance": {
|
||||||
|
Attributes: map[string]*configschema.Attribute{
|
||||||
|
"id": {Type: cty.String, Optional: true, Computed: true},
|
||||||
|
"value": {Type: cty.String, Optional: true},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// planVarsFixtureProvider returns a mock provider that is configured for basic
|
||||||
|
// operation with the configuration in test-fixtures/plan-vars. This mock has
|
||||||
|
// GetSchemaReturn and PlanResourceChangeFn populated, with the plan
|
||||||
|
// step just passing through the new object proposed by Terraform Core.
|
||||||
|
func planVarsFixtureProvider() *terraform.MockProvider {
|
||||||
|
p := testProvider()
|
||||||
|
p.GetSchemaReturn = planVarsFixtureSchema()
|
||||||
|
p.PlanResourceChangeFn = func(req providers.PlanResourceChangeRequest) providers.PlanResourceChangeResponse {
|
||||||
|
return providers.PlanResourceChangeResponse{
|
||||||
|
PlannedState: req.ProposedNewState,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
const planVarFile = `
|
const planVarFile = `
|
||||||
foo = "bar"
|
foo = "bar"
|
||||||
`
|
`
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
resource "test_instance" "foo" {
|
resource "test_instance" "foo" {
|
||||||
ami = "bar"
|
ami = "bar"
|
||||||
|
|
||||||
# This is here because at some point it caused a test failure
|
# This is here because at some point it caused a test failure
|
||||||
network_interface {
|
network_interface {
|
||||||
device_index = 0
|
device_index = 0
|
||||||
description = "Main network interface"
|
description = "Main network interface"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user