mirror of
https://github.com/opentofu/opentofu.git
synced 2025-02-25 18:45:20 -06:00
failing test for removed cbd reference
A stored dependency is documented as being honored even after it is removed from the configuration, until the referenced resource is destroyed.
This commit is contained in:
parent
bac4e0a3de
commit
985124bfa8
@ -805,15 +805,47 @@ func TestContext2Apply_createBeforeDestroyUpdate(t *testing.T) {
|
|||||||
m := testModule(t, "apply-good-create-before-update")
|
m := testModule(t, "apply-good-create-before-update")
|
||||||
p := testProvider("aws")
|
p := testProvider("aws")
|
||||||
p.PlanResourceChangeFn = testDiffFn
|
p.PlanResourceChangeFn = testDiffFn
|
||||||
p.ApplyResourceChangeFn = testApplyFn
|
|
||||||
|
// signal that resource foo has started applying
|
||||||
|
fooChan := make(chan struct{})
|
||||||
|
|
||||||
|
p.ApplyResourceChangeFn = func(req providers.ApplyResourceChangeRequest) (resp providers.ApplyResourceChangeResponse) {
|
||||||
|
id := req.PriorState.GetAttr("id").AsString()
|
||||||
|
switch id {
|
||||||
|
case "bar":
|
||||||
|
select {
|
||||||
|
case <-fooChan:
|
||||||
|
resp.Diagnostics = resp.Diagnostics.Append(errors.New("bar must be updated before foo is destroyed"))
|
||||||
|
return resp
|
||||||
|
case <-time.After(100 * time.Millisecond):
|
||||||
|
// wait a moment to ensure that foo is not going to be destroyed first
|
||||||
|
}
|
||||||
|
case "foo":
|
||||||
|
close(fooChan)
|
||||||
|
}
|
||||||
|
|
||||||
|
return testApplyFn(req)
|
||||||
|
}
|
||||||
|
|
||||||
state := states.NewState()
|
state := states.NewState()
|
||||||
root := state.EnsureModule(addrs.RootModuleInstance)
|
root := state.EnsureModule(addrs.RootModuleInstance)
|
||||||
|
fooAddr := mustResourceInstanceAddr("aws_instance.foo")
|
||||||
|
root.SetResourceInstanceCurrent(
|
||||||
|
fooAddr.Resource,
|
||||||
|
&states.ResourceInstanceObjectSrc{
|
||||||
|
Status: states.ObjectReady,
|
||||||
|
AttrsJSON: []byte(`{"id":"foo","foo":"bar"}`),
|
||||||
|
CreateBeforeDestroy: true,
|
||||||
|
},
|
||||||
|
mustProviderConfig(`provider["registry.terraform.io/hashicorp/aws"]`),
|
||||||
|
)
|
||||||
root.SetResourceInstanceCurrent(
|
root.SetResourceInstanceCurrent(
|
||||||
mustResourceInstanceAddr("aws_instance.bar").Resource,
|
mustResourceInstanceAddr("aws_instance.bar").Resource,
|
||||||
&states.ResourceInstanceObjectSrc{
|
&states.ResourceInstanceObjectSrc{
|
||||||
Status: states.ObjectReady,
|
Status: states.ObjectReady,
|
||||||
AttrsJSON: []byte(`{"id":"bar","foo":"bar"}`),
|
AttrsJSON: []byte(`{"id":"bar","foo":"bar"}`),
|
||||||
|
CreateBeforeDestroy: true,
|
||||||
|
Dependencies: []addrs.ConfigResource{fooAddr.ContainingResource().Config()},
|
||||||
},
|
},
|
||||||
mustProviderConfig(`provider["registry.terraform.io/hashicorp/aws"]`),
|
mustProviderConfig(`provider["registry.terraform.io/hashicorp/aws"]`),
|
||||||
)
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user