plan->apply ephemeral check test

pull/35926/head
James Bardin 2 years ago
parent 270bb5e884
commit 0cf751d909

@ -275,3 +275,83 @@ output "data" {
t.Error("CloseEphemeralResourceCalled not called")
}
}
func TestContext2Apply_ephemeralChecks(t *testing.T) {
// test the full validate-plan-apply lifecycle for ephemeral conditions
m := testModuleInline(t, map[string]string{
"main.tf": `
variable "input" {
type = string
}
ephemeral "ephem_resource" "data" {
lifecycle {
precondition {
condition = var.input == "ok"
error_message = "input not ok"
}
postcondition {
condition = self.value != null
error_message = "value is null"
}
}
}
provider "test" {
test_string = ephemeral.ephem_resource.data.value
}
resource "test_object" "test" {
}
`,
})
ephem := &testing_provider.MockProvider{
GetProviderSchemaResponse: &providers.GetProviderSchemaResponse{
EphemeralResourceTypes: map[string]providers.Schema{
"ephem_resource": {
Block: &configschema.Block{
Attributes: map[string]*configschema.Attribute{
"value": {
Type: cty.String,
Computed: true,
},
},
},
},
},
},
}
ephem.OpenEphemeralResourceFn = func(providers.OpenEphemeralResourceRequest) (resp providers.OpenEphemeralResourceResponse) {
resp.Result = cty.ObjectVal(map[string]cty.Value{
"value": cty.StringVal("test string"),
})
return resp
}
p := simpleMockProvider()
ctx := testContext2(t, &ContextOpts{
Providers: map[addrs.Provider]providers.Factory{
addrs.NewDefaultProvider("ephem"): testProviderFuncFixed(ephem),
addrs.NewDefaultProvider("test"): testProviderFuncFixed(p),
},
})
diags := ctx.Validate(m, &ValidateOpts{})
assertNoDiagnostics(t, diags)
plan, diags := ctx.Plan(m, nil, &PlanOpts{
SetVariables: InputValues{
"input": &InputValue{
Value: cty.StringVal("ok"),
SourceType: ValueFromConfig,
},
},
})
assertNoDiagnostics(t, diags)
_, diags = ctx.Apply(plan, m, nil)
assertNoDiagnostics(t, diags)
}

Loading…
Cancel
Save