expanded module depends_on test
This commit is contained in:
parent
70ac00595b
commit
a9e0f46f23
|
@ -11116,133 +11116,3 @@ resource "aws_instance" "cbd" {
|
||||||
t.Fatal("aws_instance.foo should also be create_before_destroy")
|
t.Fatal("aws_instance.foo should also be create_before_destroy")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestContext2Apply_moduleDependsOn(t *testing.T) {
|
|
||||||
m := testModule(t, "apply-module-depends-on")
|
|
||||||
|
|
||||||
p := testProvider("test")
|
|
||||||
p.ReadDataSourceResponse = providers.ReadDataSourceResponse{
|
|
||||||
State: cty.ObjectVal(map[string]cty.Value{
|
|
||||||
"id": cty.StringVal("data"),
|
|
||||||
"foo": cty.NullVal(cty.String),
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
p.DiffFn = testDiffFn
|
|
||||||
|
|
||||||
// each instance being applied should happen in sequential order
|
|
||||||
applied := int64(0)
|
|
||||||
|
|
||||||
p.ApplyResourceChangeFn = func(req providers.ApplyResourceChangeRequest) (resp providers.ApplyResourceChangeResponse) {
|
|
||||||
state := req.PlannedState.AsValueMap()
|
|
||||||
num, _ := state["num"].AsBigFloat().Float64()
|
|
||||||
ord := int64(num)
|
|
||||||
if !atomic.CompareAndSwapInt64(&applied, ord-1, ord) {
|
|
||||||
actual := atomic.LoadInt64(&applied)
|
|
||||||
resp.Diagnostics = resp.Diagnostics.Append(fmt.Errorf("instance %d was applied after %d", ord, actual))
|
|
||||||
}
|
|
||||||
|
|
||||||
state["id"] = cty.StringVal(fmt.Sprintf("test_%d", ord))
|
|
||||||
resp.NewState = cty.ObjectVal(state)
|
|
||||||
|
|
||||||
return resp
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx := testContext2(t, &ContextOpts{
|
|
||||||
Config: m,
|
|
||||||
Providers: map[addrs.Provider]providers.Factory{
|
|
||||||
addrs.NewDefaultProvider("test"): testProviderFuncFixed(p),
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
_, diags := ctx.Plan()
|
|
||||||
if diags.HasErrors() {
|
|
||||||
t.Fatal(diags.ErrWithWarnings())
|
|
||||||
}
|
|
||||||
|
|
||||||
_, diags = ctx.Apply()
|
|
||||||
if diags.HasErrors() {
|
|
||||||
t.Fatal(diags.ErrWithWarnings())
|
|
||||||
}
|
|
||||||
|
|
||||||
// run the plan again to ensure that data sources are not going to be re-read
|
|
||||||
plan, diags := ctx.Plan()
|
|
||||||
if diags.HasErrors() {
|
|
||||||
t.Fatal(diags.ErrWithWarnings())
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, res := range plan.Changes.Resources {
|
|
||||||
if res.Action != plans.NoOp {
|
|
||||||
t.Fatalf("expected NoOp, got %s for %s", res.Action, res.Addr)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestContext2Apply_moduleSelfReference(t *testing.T) {
|
|
||||||
m := testModuleInline(t, map[string]string{
|
|
||||||
"main.tf": `
|
|
||||||
module "test" {
|
|
||||||
source = "./test"
|
|
||||||
|
|
||||||
a = module.test.b
|
|
||||||
}
|
|
||||||
|
|
||||||
output "c" {
|
|
||||||
value = module.test.c
|
|
||||||
}
|
|
||||||
`,
|
|
||||||
"test/main.tf": `
|
|
||||||
variable "a" {}
|
|
||||||
|
|
||||||
resource "test_instance" "test" {
|
|
||||||
}
|
|
||||||
|
|
||||||
output "b" {
|
|
||||||
value = test_instance.test.id
|
|
||||||
}
|
|
||||||
|
|
||||||
output "c" {
|
|
||||||
value = var.a
|
|
||||||
}`})
|
|
||||||
|
|
||||||
p := testProvider("test")
|
|
||||||
p.ApplyFn = testApplyFn
|
|
||||||
p.DiffFn = testDiffFn
|
|
||||||
ctx := testContext2(t, &ContextOpts{
|
|
||||||
Config: m,
|
|
||||||
Providers: map[addrs.Provider]providers.Factory{
|
|
||||||
addrs.NewDefaultProvider("test"): testProviderFuncFixed(p),
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
_, diags := ctx.Plan()
|
|
||||||
if diags.HasErrors() {
|
|
||||||
t.Fatal(diags.ErrWithWarnings())
|
|
||||||
}
|
|
||||||
|
|
||||||
_, diags = ctx.Apply()
|
|
||||||
if diags.HasErrors() {
|
|
||||||
t.Fatal(diags.ErrWithWarnings())
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx = testContext2(t, &ContextOpts{
|
|
||||||
Config: m,
|
|
||||||
Providers: map[addrs.Provider]providers.Factory{
|
|
||||||
addrs.NewDefaultProvider("test"): testProviderFuncFixed(p),
|
|
||||||
},
|
|
||||||
Destroy: true,
|
|
||||||
})
|
|
||||||
|
|
||||||
_, diags = ctx.Plan()
|
|
||||||
if diags.HasErrors() {
|
|
||||||
t.Fatal(diags.ErrWithWarnings())
|
|
||||||
}
|
|
||||||
|
|
||||||
state, diags := ctx.Apply()
|
|
||||||
if diags.HasErrors() {
|
|
||||||
t.Fatal(diags.ErrWithWarnings())
|
|
||||||
}
|
|
||||||
|
|
||||||
if !state.Empty() {
|
|
||||||
t.Fatal("expected empty state, got:", state)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue