fix tests
Update tests to match the new behavior. Some were incorrect, some no longer make sense, and some just weren't setup to handle th plan api calls.
This commit is contained in:
parent
4a6dac39a5
commit
bc82347a04
|
@ -51,76 +51,11 @@ test_instance.foo:
|
|||
assertBackendStateUnlocked(t, b)
|
||||
}
|
||||
|
||||
func TestLocal_refreshNoConfig(t *testing.T) {
|
||||
b, cleanup := TestLocal(t)
|
||||
defer cleanup()
|
||||
p := TestLocalProvider(t, b, "test", refreshFixtureSchema())
|
||||
testStateFile(t, b.StatePath, testRefreshState())
|
||||
p.ReadResourceFn = nil
|
||||
p.ReadResourceResponse = providers.ReadResourceResponse{NewState: cty.ObjectVal(map[string]cty.Value{
|
||||
"id": cty.StringVal("yes"),
|
||||
})}
|
||||
|
||||
op, configCleanup := testOperationRefresh(t, "./testdata/empty")
|
||||
defer configCleanup()
|
||||
|
||||
run, err := b.Operation(context.Background(), op)
|
||||
if err != nil {
|
||||
t.Fatalf("bad: %s", err)
|
||||
}
|
||||
<-run.Done()
|
||||
|
||||
if !p.ReadResourceCalled {
|
||||
t.Fatal("ReadResource should be called")
|
||||
}
|
||||
|
||||
checkState(t, b.StateOutPath, `
|
||||
test_instance.foo:
|
||||
ID = yes
|
||||
provider = provider["registry.terraform.io/hashicorp/test"]
|
||||
`)
|
||||
}
|
||||
|
||||
// GH-12174
|
||||
func TestLocal_refreshNilModuleWithInput(t *testing.T) {
|
||||
b, cleanup := TestLocal(t)
|
||||
defer cleanup()
|
||||
p := TestLocalProvider(t, b, "test", refreshFixtureSchema())
|
||||
testStateFile(t, b.StatePath, testRefreshState())
|
||||
p.ReadResourceFn = nil
|
||||
p.ReadResourceResponse = providers.ReadResourceResponse{NewState: cty.ObjectVal(map[string]cty.Value{
|
||||
"id": cty.StringVal("yes"),
|
||||
})}
|
||||
|
||||
b.OpInput = true
|
||||
|
||||
op, configCleanup := testOperationRefresh(t, "./testdata/empty")
|
||||
defer configCleanup()
|
||||
|
||||
run, err := b.Operation(context.Background(), op)
|
||||
if err != nil {
|
||||
t.Fatalf("bad: %s", err)
|
||||
}
|
||||
<-run.Done()
|
||||
|
||||
if !p.ReadResourceCalled {
|
||||
t.Fatal("ReadResource should be called")
|
||||
}
|
||||
|
||||
checkState(t, b.StateOutPath, `
|
||||
test_instance.foo:
|
||||
ID = yes
|
||||
provider = provider["registry.terraform.io/hashicorp/test"]
|
||||
`)
|
||||
}
|
||||
|
||||
func TestLocal_refreshInput(t *testing.T) {
|
||||
b, cleanup := TestLocal(t)
|
||||
defer cleanup()
|
||||
p := TestLocalProvider(t, b, "test", refreshFixtureSchema())
|
||||
testStateFile(t, b.StatePath, testRefreshState())
|
||||
|
||||
p.GetSchemaReturn = &terraform.ProviderSchema{
|
||||
schema := &terraform.ProviderSchema{
|
||||
Provider: &configschema.Block{
|
||||
Attributes: map[string]*configschema.Attribute{
|
||||
"value": {Type: cty.String, Optional: true},
|
||||
|
@ -129,12 +64,17 @@ func TestLocal_refreshInput(t *testing.T) {
|
|||
ResourceTypes: map[string]*configschema.Block{
|
||||
"test_instance": {
|
||||
Attributes: map[string]*configschema.Attribute{
|
||||
"id": {Type: cty.String, Computed: true},
|
||||
"foo": {Type: cty.String, Optional: true},
|
||||
"id": {Type: cty.String, Optional: true},
|
||||
"ami": {Type: cty.String, Optional: true},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
p := TestLocalProvider(t, b, "test", schema)
|
||||
testStateFile(t, b.StatePath, testRefreshState())
|
||||
|
||||
p.ReadResourceFn = nil
|
||||
p.ReadResourceResponse = providers.ReadResourceResponse{NewState: cty.ObjectVal(map[string]cty.Value{
|
||||
"id": cty.StringVal("yes"),
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
variable "should_ask" {}
|
||||
|
||||
provider "test" {
|
||||
value = "${var.should_ask}"
|
||||
value = var.should_ask
|
||||
}
|
||||
|
||||
resource "test_instance" "foo" {
|
||||
|
|
|
@ -3987,77 +3987,6 @@ func TestContext2Apply_nilDiff(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestContext2Apply_outputDependsOn(t *testing.T) {
|
||||
m := testModule(t, "apply-output-depends-on")
|
||||
p := testProvider("aws")
|
||||
p.DiffFn = testDiffFn
|
||||
|
||||
{
|
||||
// Create a custom apply function that sleeps a bit (to allow parallel
|
||||
// graph execution) and then returns an error to force a partial state
|
||||
// return. We then verify the output is NOT there.
|
||||
p.ApplyFn = func(
|
||||
info *InstanceInfo,
|
||||
is *InstanceState,
|
||||
id *InstanceDiff) (*InstanceState, error) {
|
||||
// Sleep to allow parallel execution
|
||||
time.Sleep(50 * time.Millisecond)
|
||||
|
||||
// Return error to force partial state
|
||||
return nil, fmt.Errorf("abcd")
|
||||
}
|
||||
|
||||
ctx := testContext2(t, &ContextOpts{
|
||||
Config: m,
|
||||
Providers: map[addrs.Provider]providers.Factory{
|
||||
addrs.NewDefaultProvider("aws"): testProviderFuncFixed(p),
|
||||
},
|
||||
})
|
||||
|
||||
if _, diags := ctx.Plan(); diags.HasErrors() {
|
||||
t.Fatalf("diags: %s", diags.Err())
|
||||
}
|
||||
|
||||
state, diags := ctx.Apply()
|
||||
if !diags.HasErrors() || !strings.Contains(diags.Err().Error(), "abcd") {
|
||||
t.Fatalf("err: %s", diags.Err())
|
||||
}
|
||||
|
||||
checkStateString(t, state, `<no state>`)
|
||||
}
|
||||
|
||||
{
|
||||
// Create the standard apply function and verify we get the output
|
||||
p.ApplyFn = testApplyFn
|
||||
|
||||
ctx := testContext2(t, &ContextOpts{
|
||||
Config: m,
|
||||
Providers: map[addrs.Provider]providers.Factory{
|
||||
addrs.NewDefaultProvider("aws"): testProviderFuncFixed(p),
|
||||
},
|
||||
})
|
||||
|
||||
if _, diags := ctx.Plan(); diags.HasErrors() {
|
||||
t.Fatalf("diags: %s", diags.Err())
|
||||
}
|
||||
|
||||
state, diags := ctx.Apply()
|
||||
if diags.HasErrors() {
|
||||
t.Fatalf("diags: %s", diags.Err())
|
||||
}
|
||||
|
||||
checkStateString(t, state, `
|
||||
aws_instance.foo:
|
||||
ID = foo
|
||||
provider = provider["registry.terraform.io/hashicorp/aws"]
|
||||
|
||||
Outputs:
|
||||
|
||||
value = result
|
||||
`)
|
||||
}
|
||||
}
|
||||
|
||||
func TestContext2Apply_outputOrphan(t *testing.T) {
|
||||
m := testModule(t, "apply-output-orphan")
|
||||
p := testProvider("aws")
|
||||
|
@ -8604,6 +8533,16 @@ func TestContext2Apply_ignoreChangesWithDep(t *testing.T) {
|
|||
&states.ResourceInstanceObjectSrc{
|
||||
Status: states.ObjectReady,
|
||||
AttrsJSON: []byte(`{"id":"eip-abc123","instance":"i-abc123"}`),
|
||||
Dependencies: []addrs.ConfigResource{
|
||||
addrs.ConfigResource{
|
||||
Resource: addrs.Resource{
|
||||
Mode: addrs.ManagedResourceMode,
|
||||
Type: "aws_instance",
|
||||
Name: "foo",
|
||||
},
|
||||
Module: addrs.RootModule,
|
||||
},
|
||||
},
|
||||
},
|
||||
mustProviderConfig(`provider["registry.terraform.io/hashicorp/aws"]`),
|
||||
)
|
||||
|
@ -8612,6 +8551,16 @@ func TestContext2Apply_ignoreChangesWithDep(t *testing.T) {
|
|||
&states.ResourceInstanceObjectSrc{
|
||||
Status: states.ObjectReady,
|
||||
AttrsJSON: []byte(`{"id":"eip-bcd234","instance":"i-bcd234"}`),
|
||||
Dependencies: []addrs.ConfigResource{
|
||||
addrs.ConfigResource{
|
||||
Resource: addrs.Resource{
|
||||
Mode: addrs.ManagedResourceMode,
|
||||
Type: "aws_instance",
|
||||
Name: "foo",
|
||||
},
|
||||
Module: addrs.RootModule,
|
||||
},
|
||||
},
|
||||
},
|
||||
mustProviderConfig(`provider["registry.terraform.io/hashicorp/aws"]`),
|
||||
)
|
||||
|
@ -8621,7 +8570,7 @@ func TestContext2Apply_ignoreChangesWithDep(t *testing.T) {
|
|||
Providers: map[addrs.Provider]providers.Factory{
|
||||
addrs.NewDefaultProvider("aws"): testProviderFuncFixed(p),
|
||||
},
|
||||
State: state,
|
||||
State: state.DeepCopy(),
|
||||
})
|
||||
|
||||
_, diags := ctx.Plan()
|
||||
|
@ -8801,10 +8750,7 @@ resource "null_instance" "depends" {
|
|||
}
|
||||
}
|
||||
|
||||
_, diags := ctx.Refresh()
|
||||
assertNoErrors(t, diags)
|
||||
|
||||
_, diags = ctx.Plan()
|
||||
_, diags := ctx.Plan()
|
||||
assertNoErrors(t, diags)
|
||||
|
||||
state, diags := ctx.Apply()
|
||||
|
@ -10594,45 +10540,6 @@ func TestContext2Apply_ProviderMeta_refresh_set(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestContext2Apply_ProviderMeta_refresh_unset(t *testing.T) {
|
||||
m := testModule(t, "provider-meta-unset")
|
||||
p := testProvider("test")
|
||||
p.ApplyFn = testApplyFn
|
||||
p.DiffFn = testDiffFn
|
||||
schema := p.GetSchemaReturn
|
||||
schema.ProviderMeta = &configschema.Block{
|
||||
Attributes: map[string]*configschema.Attribute{
|
||||
"baz": {
|
||||
Type: cty.String,
|
||||
Required: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
p.GetSchemaReturn = schema
|
||||
ctx := testContext2(t, &ContextOpts{
|
||||
Config: m,
|
||||
Providers: map[addrs.Provider]providers.Factory{
|
||||
addrs.NewDefaultProvider("test"): testProviderFuncFixed(p),
|
||||
},
|
||||
})
|
||||
|
||||
_, diags := ctx.Plan()
|
||||
assertNoErrors(t, diags)
|
||||
|
||||
_, diags = ctx.Apply()
|
||||
assertNoErrors(t, diags)
|
||||
|
||||
_, diags = ctx.Refresh()
|
||||
assertNoErrors(t, diags)
|
||||
|
||||
if !p.ReadResourceCalled {
|
||||
t.Fatalf("ReadResource not called")
|
||||
}
|
||||
if !p.ReadResourceRequest.ProviderMeta.IsNull() {
|
||||
t.Fatalf("Expected null ProviderMeta in ReadResource, got %v", p.ReadResourceRequest.ProviderMeta)
|
||||
}
|
||||
}
|
||||
|
||||
func TestContext2Apply_ProviderMeta_refresh_setNoSchema(t *testing.T) {
|
||||
m := testModule(t, "provider-meta-set")
|
||||
p := testProvider("test")
|
||||
|
@ -10924,10 +10831,7 @@ func TestContext2Apply_ProviderMeta_refreshdata_unset(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
_, diags := ctx.Refresh()
|
||||
assertNoErrors(t, diags)
|
||||
|
||||
_, diags = ctx.Plan()
|
||||
_, diags := ctx.Plan()
|
||||
assertNoErrors(t, diags)
|
||||
|
||||
_, diags = ctx.Apply()
|
||||
|
@ -11228,12 +11132,7 @@ func TestContext2Apply_moduleDependsOn(t *testing.T) {
|
|||
},
|
||||
})
|
||||
|
||||
_, diags := ctx.Refresh()
|
||||
if diags.HasErrors() {
|
||||
t.Fatal(diags.ErrWithWarnings())
|
||||
}
|
||||
|
||||
_, diags = ctx.Plan()
|
||||
_, diags := ctx.Plan()
|
||||
if diags.HasErrors() {
|
||||
t.Fatal(diags.ErrWithWarnings())
|
||||
}
|
||||
|
@ -11243,11 +11142,6 @@ func TestContext2Apply_moduleDependsOn(t *testing.T) {
|
|||
t.Fatal(diags.ErrWithWarnings())
|
||||
}
|
||||
|
||||
// run the plan again to ensure that data sources are not going to be re-read
|
||||
_, diags = ctx.Refresh()
|
||||
if diags.HasErrors() {
|
||||
t.Fatal(diags.ErrWithWarnings())
|
||||
}
|
||||
plan, diags := ctx.Plan()
|
||||
if diags.HasErrors() {
|
||||
t.Fatal(diags.ErrWithWarnings())
|
||||
|
@ -11799,10 +11693,6 @@ output "outputs" {
|
|||
Destroy: true,
|
||||
})
|
||||
|
||||
if _, diags := ctx.Refresh(); diags.HasErrors() {
|
||||
t.Fatalf("destroy plan errors: %s", diags.Err())
|
||||
}
|
||||
|
||||
if _, diags := ctx.Plan(); diags.HasErrors() {
|
||||
t.Fatalf("destroy plan errors: %s", diags.Err())
|
||||
}
|
||||
|
|
|
@ -52,6 +52,7 @@ func TestContext2Refresh(t *testing.T) {
|
|||
p.ReadResourceResponse = providers.ReadResourceResponse{
|
||||
NewState: readState,
|
||||
}
|
||||
p.DiffFn = testDiffFn
|
||||
|
||||
s, diags := ctx.Refresh()
|
||||
if diags.HasErrors() {
|
||||
|
@ -118,6 +119,10 @@ func TestContext2Refresh_dynamicAttr(t *testing.T) {
|
|||
NewState: readStateVal,
|
||||
}
|
||||
}
|
||||
p.PlanResourceChangeFn = func(req providers.PlanResourceChangeRequest) (resp providers.PlanResourceChangeResponse) {
|
||||
resp.PlannedState = req.ProposedNewState
|
||||
return resp
|
||||
}
|
||||
|
||||
ctx := testContext2(t, &ContextOpts{
|
||||
Config: m,
|
||||
|
@ -153,18 +158,15 @@ func TestContext2Refresh_dynamicAttr(t *testing.T) {
|
|||
func TestContext2Refresh_dataComputedModuleVar(t *testing.T) {
|
||||
p := testProvider("aws")
|
||||
m := testModule(t, "refresh-data-module-var")
|
||||
ctx := testContext2(t, &ContextOpts{
|
||||
Config: m,
|
||||
Providers: map[addrs.Provider]providers.Factory{
|
||||
addrs.NewDefaultProvider("aws"): testProviderFuncFixed(p),
|
||||
},
|
||||
})
|
||||
|
||||
p.ReadResourceFn = nil
|
||||
p.ReadResourceResponse = providers.ReadResourceResponse{
|
||||
NewState: cty.ObjectVal(map[string]cty.Value{
|
||||
"id": cty.StringVal("foo"),
|
||||
}),
|
||||
p.PlanResourceChangeFn = func(req providers.PlanResourceChangeRequest) (resp providers.PlanResourceChangeResponse) {
|
||||
obj := req.ProposedNewState.AsValueMap()
|
||||
obj["id"] = cty.UnknownVal(cty.String)
|
||||
resp.PlannedState = cty.ObjectVal(obj)
|
||||
return resp
|
||||
}
|
||||
p.ReadDataSourceFn = func(req providers.ReadDataSourceRequest) (resp providers.ReadDataSourceResponse) {
|
||||
resp.State = req.Config
|
||||
return resp
|
||||
}
|
||||
|
||||
p.GetSchemaReturn = &ProviderSchema{
|
||||
|
@ -190,11 +192,22 @@ func TestContext2Refresh_dataComputedModuleVar(t *testing.T) {
|
|||
Type: cty.String,
|
||||
Optional: true,
|
||||
},
|
||||
"output": {
|
||||
Type: cty.String,
|
||||
Computed: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
ctx := testContext2(t, &ContextOpts{
|
||||
Config: m,
|
||||
Providers: map[addrs.Provider]providers.Factory{
|
||||
addrs.NewDefaultProvider("aws"): testProviderFuncFixed(p),
|
||||
},
|
||||
})
|
||||
|
||||
s, diags := ctx.Refresh()
|
||||
if diags.HasErrors() {
|
||||
t.Fatalf("refresh errors: %s", diags.Err())
|
||||
|
@ -269,6 +282,7 @@ func TestContext2Refresh_targeted(t *testing.T) {
|
|||
NewState: req.PriorState,
|
||||
}
|
||||
}
|
||||
p.DiffFn = testDiffFn
|
||||
|
||||
_, diags := ctx.Refresh()
|
||||
if diags.HasErrors() {
|
||||
|
@ -347,6 +361,7 @@ func TestContext2Refresh_targetedCount(t *testing.T) {
|
|||
NewState: req.PriorState,
|
||||
}
|
||||
}
|
||||
p.DiffFn = testDiffFn
|
||||
|
||||
_, diags := ctx.Refresh()
|
||||
if diags.HasErrors() {
|
||||
|
@ -433,6 +448,7 @@ func TestContext2Refresh_targetedCountIndex(t *testing.T) {
|
|||
NewState: req.PriorState,
|
||||
}
|
||||
}
|
||||
p.DiffFn = testDiffFn
|
||||
|
||||
_, diags := ctx.Refresh()
|
||||
if diags.HasErrors() {
|
||||
|
@ -464,6 +480,7 @@ func TestContext2Refresh_moduleComputedVar(t *testing.T) {
|
|||
},
|
||||
},
|
||||
}
|
||||
p.DiffFn = testDiffFn
|
||||
|
||||
m := testModule(t, "refresh-module-computed-var")
|
||||
ctx := testContext2(t, &ContextOpts{
|
||||
|
@ -500,6 +517,7 @@ func TestContext2Refresh_delete(t *testing.T) {
|
|||
p.ReadResourceResponse = providers.ReadResourceResponse{
|
||||
NewState: cty.NullVal(p.GetSchemaReturn.ResourceTypes["aws_instance"].ImpliedType()),
|
||||
}
|
||||
p.DiffFn = testDiffFn
|
||||
|
||||
s, diags := ctx.Refresh()
|
||||
if diags.HasErrors() {
|
||||
|
@ -529,6 +547,7 @@ func TestContext2Refresh_ignoreUncreated(t *testing.T) {
|
|||
"id": cty.StringVal("foo"),
|
||||
}),
|
||||
}
|
||||
p.DiffFn = testDiffFn
|
||||
|
||||
_, diags := ctx.Refresh()
|
||||
if diags.HasErrors() {
|
||||
|
@ -542,6 +561,7 @@ func TestContext2Refresh_ignoreUncreated(t *testing.T) {
|
|||
func TestContext2Refresh_hook(t *testing.T) {
|
||||
h := new(MockHook)
|
||||
p := testProvider("aws")
|
||||
p.DiffFn = testDiffFn
|
||||
m := testModule(t, "refresh-basic")
|
||||
|
||||
state := states.NewState()
|
||||
|
@ -603,6 +623,7 @@ func TestContext2Refresh_modules(t *testing.T) {
|
|||
NewState: new,
|
||||
}
|
||||
}
|
||||
p.DiffFn = testDiffFn
|
||||
|
||||
s, diags := ctx.Refresh()
|
||||
if diags.HasErrors() {
|
||||
|
@ -628,6 +649,7 @@ func TestContext2Refresh_moduleInputComputedOutput(t *testing.T) {
|
|||
"foo": {
|
||||
Type: cty.String,
|
||||
Optional: true,
|
||||
Computed: true,
|
||||
},
|
||||
"compute": {
|
||||
Type: cty.String,
|
||||
|
@ -683,6 +705,7 @@ func TestContext2Refresh_noState(t *testing.T) {
|
|||
"id": cty.StringVal("foo"),
|
||||
}),
|
||||
}
|
||||
p.DiffFn = testDiffFn
|
||||
|
||||
if _, diags := ctx.Refresh(); diags.HasErrors() {
|
||||
t.Fatalf("refresh errs: %s", diags.Err())
|
||||
|
@ -702,12 +725,13 @@ func TestContext2Refresh_output(t *testing.T) {
|
|||
},
|
||||
"foo": {
|
||||
Type: cty.String,
|
||||
Computed: true,
|
||||
Optional: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
p.DiffFn = testDiffFn
|
||||
|
||||
m := testModule(t, "refresh-output")
|
||||
|
||||
|
@ -815,6 +839,7 @@ func TestContext2Refresh_stateBasic(t *testing.T) {
|
|||
}
|
||||
|
||||
p.ReadResourceFn = nil
|
||||
p.DiffFn = testDiffFn
|
||||
p.ReadResourceResponse = providers.ReadResourceResponse{
|
||||
NewState: readStateVal,
|
||||
}
|
||||
|
@ -843,25 +868,18 @@ func TestContext2Refresh_dataCount(t *testing.T) {
|
|||
p := testProvider("test")
|
||||
m := testModule(t, "refresh-data-count")
|
||||
|
||||
// This test is verifying that a data resource count can refer to a
|
||||
// resource attribute that can't be known yet during refresh (because
|
||||
// the resource in question isn't in the state at all). In that case,
|
||||
// we skip the data resource during refresh and process it during the
|
||||
// subsequent plan step instead.
|
||||
//
|
||||
// Normally it's an error for "count" to be computed, but during the
|
||||
// refresh step we allow it because we _expect_ to be working with an
|
||||
// incomplete picture of the world sometimes, particularly when we're
|
||||
// creating object for the first time against an empty state.
|
||||
//
|
||||
// For more information, see:
|
||||
// https://github.com/hashicorp/terraform/issues/21047
|
||||
|
||||
p.PlanResourceChangeFn = func(req providers.PlanResourceChangeRequest) (resp providers.PlanResourceChangeResponse) {
|
||||
m := req.ProposedNewState.AsValueMap()
|
||||
m["things"] = cty.ListVal([]cty.Value{cty.StringVal("foo")})
|
||||
resp.PlannedState = cty.ObjectVal(m)
|
||||
return resp
|
||||
}
|
||||
p.GetSchemaReturn = &ProviderSchema{
|
||||
ResourceTypes: map[string]*configschema.Block{
|
||||
"test": {
|
||||
Attributes: map[string]*configschema.Attribute{
|
||||
"things": {Type: cty.List(cty.String), Optional: true},
|
||||
"id": {Type: cty.String, Computed: true},
|
||||
"things": {Type: cty.List(cty.String), Computed: true},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -870,6 +888,12 @@ func TestContext2Refresh_dataCount(t *testing.T) {
|
|||
},
|
||||
}
|
||||
|
||||
p.ReadDataSourceFn = func(req providers.ReadDataSourceRequest) providers.ReadDataSourceResponse {
|
||||
return providers.ReadDataSourceResponse{
|
||||
State: req.Config,
|
||||
}
|
||||
}
|
||||
|
||||
ctx := testContext2(t, &ContextOpts{
|
||||
Providers: map[addrs.Provider]providers.Factory{
|
||||
addrs.NewDefaultProvider("test"): testProviderFuncFixed(p),
|
||||
|
@ -878,43 +902,14 @@ func TestContext2Refresh_dataCount(t *testing.T) {
|
|||
})
|
||||
|
||||
s, diags := ctx.Refresh()
|
||||
if p.ReadResourceCalled {
|
||||
// The managed resource doesn't exist in the state yet, so there's
|
||||
// nothing to refresh.
|
||||
t.Errorf("ReadResource was called, but should not have been")
|
||||
}
|
||||
if p.ReadDataSourceCalled {
|
||||
// The data resource should've been skipped because its count cannot
|
||||
// be determined yet.
|
||||
t.Errorf("ReadDataSource was called, but should not have been")
|
||||
}
|
||||
|
||||
if diags.HasErrors() {
|
||||
t.Fatalf("refresh errors: %s", diags.Err())
|
||||
}
|
||||
|
||||
checkStateString(t, s, `<no state>`)
|
||||
}
|
||||
|
||||
func TestContext2Refresh_dataOrphan(t *testing.T) {
|
||||
p := testProvider("null")
|
||||
state := states.NewState()
|
||||
root := state.EnsureModule(addrs.RootModuleInstance)
|
||||
testSetResourceInstanceCurrent(root, "data.null_data_source.bar", `{"id":"foo"}`, `provider["registry.terraform.io/hashicorp/null"]`)
|
||||
|
||||
ctx := testContext2(t, &ContextOpts{
|
||||
Providers: map[addrs.Provider]providers.Factory{
|
||||
addrs.NewDefaultProvider("null"): testProviderFuncFixed(p),
|
||||
},
|
||||
State: state,
|
||||
})
|
||||
|
||||
s, diags := ctx.Refresh()
|
||||
if diags.HasErrors() {
|
||||
t.Fatalf("refresh errors: %s", diags.Err())
|
||||
}
|
||||
|
||||
checkStateString(t, s, `<no state>`)
|
||||
checkStateString(t, s, `data.test.foo.0:
|
||||
ID =
|
||||
provider = provider["registry.terraform.io/hashicorp/test"]`)
|
||||
}
|
||||
|
||||
func TestContext2Refresh_dataState(t *testing.T) {
|
||||
|
@ -955,6 +950,7 @@ func TestContext2Refresh_dataState(t *testing.T) {
|
|||
State: readStateVal,
|
||||
}
|
||||
}
|
||||
p.DiffFn = testDiffFn
|
||||
|
||||
s, diags := ctx.Refresh()
|
||||
if diags.HasErrors() {
|
||||
|
@ -1020,6 +1016,7 @@ func TestContext2Refresh_dataStateRefData(t *testing.T) {
|
|||
State: cty.ObjectVal(m),
|
||||
}
|
||||
}
|
||||
p.DiffFn = testDiffFn
|
||||
|
||||
s, diags := ctx.Refresh()
|
||||
if diags.HasErrors() {
|
||||
|
@ -1057,6 +1054,7 @@ func TestContext2Refresh_tainted(t *testing.T) {
|
|||
NewState: cty.ObjectVal(m),
|
||||
}
|
||||
}
|
||||
p.DiffFn = testDiffFn
|
||||
|
||||
s, diags := ctx.Refresh()
|
||||
if diags.HasErrors() {
|
||||
|
@ -1144,6 +1142,7 @@ func TestContext2Refresh_vars(t *testing.T) {
|
|||
}
|
||||
|
||||
p.ReadResourceFn = nil
|
||||
p.DiffFn = testDiffFn
|
||||
p.ReadResourceResponse = providers.ReadResourceResponse{
|
||||
NewState: readStateVal,
|
||||
}
|
||||
|
@ -1197,6 +1196,7 @@ func TestContext2Refresh_orphanModule(t *testing.T) {
|
|||
NewState: req.PriorState,
|
||||
}
|
||||
}
|
||||
p.DiffFn = testDiffFn
|
||||
|
||||
state := states.NewState()
|
||||
root := state.EnsureModule(addrs.RootModuleInstance)
|
||||
|
@ -1266,6 +1266,7 @@ func TestContext2Validate(t *testing.T) {
|
|||
},
|
||||
},
|
||||
}
|
||||
p.DiffFn = testDiffFn
|
||||
|
||||
m := testModule(t, "validate-good")
|
||||
c := testContext2(t, &ContextOpts{
|
||||
|
@ -1281,47 +1282,6 @@ func TestContext2Validate(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
// TestContext2Refresh_noDiffHookOnScaleOut tests to make sure that
|
||||
// pre/post-diff hooks are not called when running EvalDiff on scale-out nodes
|
||||
// (nodes with no state). The effect here is to make sure that the diffs -
|
||||
// which only exist for interpolation of parallel resources or data sources -
|
||||
// do not end up being counted in the UI.
|
||||
func TestContext2Refresh_noDiffHookOnScaleOut(t *testing.T) {
|
||||
h := new(MockHook)
|
||||
p := testProvider("aws")
|
||||
m := testModule(t, "refresh-resource-scale-inout")
|
||||
|
||||
// Refresh creates a partial plan for any instances that don't have
|
||||
// remote objects yet, to get stub values for interpolation. Therefore
|
||||
// we need to make DiffFn available to let that complete.
|
||||
p.DiffFn = testDiffFn
|
||||
|
||||
state := states.NewState()
|
||||
root := state.EnsureModule(addrs.RootModuleInstance)
|
||||
testSetResourceInstanceCurrent(root, "aws_instance.foo[0]", `{"id":"foo"}`, `provider["registry.terraform.io/hashicorp/aws"]`)
|
||||
testSetResourceInstanceCurrent(root, "aws_instance.foo[1]", `{"id":"foo"}`, `provider["registry.terraform.io/hashicorp/aws"]`)
|
||||
|
||||
ctx := testContext2(t, &ContextOpts{
|
||||
Config: m,
|
||||
Hooks: []Hook{h},
|
||||
Providers: map[addrs.Provider]providers.Factory{
|
||||
addrs.NewDefaultProvider("aws"): testProviderFuncFixed(p),
|
||||
},
|
||||
State: state,
|
||||
})
|
||||
|
||||
_, diags := ctx.Refresh()
|
||||
if diags.HasErrors() {
|
||||
t.Fatalf("refresh errors: %s", diags.Err())
|
||||
}
|
||||
if h.PreDiffCalled {
|
||||
t.Fatal("PreDiff should not have been called")
|
||||
}
|
||||
if h.PostDiffCalled {
|
||||
t.Fatal("PostDiff should not have been called")
|
||||
}
|
||||
}
|
||||
|
||||
func TestContext2Refresh_updateProviderInState(t *testing.T) {
|
||||
m := testModule(t, "update-resource-provider")
|
||||
p := testProvider("aws")
|
||||
|
@ -1357,7 +1317,7 @@ aws_instance.bar:
|
|||
}
|
||||
|
||||
func TestContext2Refresh_schemaUpgradeFlatmap(t *testing.T) {
|
||||
m := testModule(t, "empty")
|
||||
m := testModule(t, "refresh-schema-upgrade")
|
||||
p := testProvider("test")
|
||||
p.GetSchemaReturn = &ProviderSchema{
|
||||
ResourceTypes: map[string]*configschema.Block{
|
||||
|
@ -1379,6 +1339,7 @@ func TestContext2Refresh_schemaUpgradeFlatmap(t *testing.T) {
|
|||
"name": cty.StringVal("foo"),
|
||||
}),
|
||||
}
|
||||
p.DiffFn = testDiffFn
|
||||
|
||||
s := states.BuildState(func(s *states.SyncState) {
|
||||
s.SetResourceInstanceCurrent(
|
||||
|
@ -1443,7 +1404,7 @@ test_thing.bar:
|
|||
}
|
||||
|
||||
func TestContext2Refresh_schemaUpgradeJSON(t *testing.T) {
|
||||
m := testModule(t, "empty")
|
||||
m := testModule(t, "refresh-schema-upgrade")
|
||||
p := testProvider("test")
|
||||
p.GetSchemaReturn = &ProviderSchema{
|
||||
ResourceTypes: map[string]*configschema.Block{
|
||||
|
@ -1465,6 +1426,7 @@ func TestContext2Refresh_schemaUpgradeJSON(t *testing.T) {
|
|||
"name": cty.StringVal("foo"),
|
||||
}),
|
||||
}
|
||||
p.DiffFn = testDiffFn
|
||||
|
||||
s := states.BuildState(func(s *states.SyncState) {
|
||||
s.SetResourceInstanceCurrent(
|
||||
|
@ -1542,6 +1504,7 @@ data "aws_data_source" "foo" {
|
|||
resp.State = req.Config
|
||||
return
|
||||
}
|
||||
p.DiffFn = testDiffFn
|
||||
|
||||
ctx := testContext2(t, &ContextOpts{
|
||||
Config: m,
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
resource "aws_instance" "foo" {}
|
||||
|
||||
output "value" {
|
||||
value = "result"
|
||||
|
||||
depends_on = ["aws_instance.foo"]
|
||||
}
|
|
@ -1,5 +1,4 @@
|
|||
resource "test" "foo" {
|
||||
things = ["foo"]
|
||||
}
|
||||
|
||||
data "test" "foo" {
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
variable "input" {
|
||||
type = list(string)
|
||||
type = string
|
||||
}
|
||||
|
||||
resource "aws_instance" "foo" {
|
||||
foo = "${var.input}"
|
||||
foo = var.input
|
||||
}
|
||||
|
||||
output "foo" {
|
||||
value = "${aws_instance.foo.foo}"
|
||||
value = aws_instance.foo.foo
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
module "child" {
|
||||
input = "${aws_instance.bar.foo}"
|
||||
input = aws_instance.bar.foo
|
||||
source = "./child"
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
resource "test_thing" "bar" {
|
||||
}
|
Loading…
Reference in New Issue