ephemeral: add tests for deferrals

pull/35793/head
Daniel Schmidt 2 years ago
parent f9fd3173df
commit df692c4222
No known key found for this signature in database
GPG Key ID: 377C3A4D62FBBBE2

@ -3297,6 +3297,81 @@ resource "test" "a" {
},
},
}
ephemeralResourceOpenDeferral = deferredActionsTest{
configs: map[string]string{
"main.tf": `
ephemeral "test" "data" {
name = "deferred_open"
}
`,
},
stages: []deferredActionsTestStage{
{
complete: false,
wantActions: map[string]plans.Action{},
wantPlanned: map[string]cty.Value{},
wantDeferred: map[string]ExpectedDeferred{
"ephemeral.test.data": {Reason: providers.DeferredReasonProviderConfigUnknown, Action: plans.Read},
},
},
},
}
ephemeralResourceOpenDeferralWithDependency = deferredActionsTest{
configs: map[string]string{
"main.tf": `
ephemeral "test" "data" {
name = "deferred_open"
}
ephemeral "test" "dep" {
name = ephemeral.test.data.value
}
`,
},
stages: []deferredActionsTestStage{
{
complete: false,
wantActions: map[string]plans.Action{},
wantPlanned: map[string]cty.Value{},
wantDeferred: map[string]ExpectedDeferred{
"ephemeral.test.data": {Reason: providers.DeferredReasonProviderConfigUnknown, Action: plans.Read},
"ephemeral.test.dep": {Reason: providers.DeferredReasonResourceConfigUnknown, Action: plans.Read},
},
},
},
}
ephemeralResourceOpenDeferralExpanded = deferredActionsTest{
configs: map[string]string{
"main.tf": `
variable "each" {
type = set(string)
}
ephemeral "test" "data" {
for_each = var.each
name = each.value
}
`,
},
stages: []deferredActionsTestStage{
{
inputs: map[string]cty.Value{
"each": cty.DynamicVal,
},
complete: false,
wantActions: map[string]plans.Action{},
wantPlanned: map[string]cty.Value{},
wantDeferred: map[string]ExpectedDeferred{
"ephemeral.test.*.data": {Reason: providers.DeferredReasonInstanceCountUnknown, Action: plans.Read},
},
},
},
}
)
func TestContextApply_deferredActions(t *testing.T) {
@ -3346,6 +3421,9 @@ func TestContextApply_deferredActions(t *testing.T) {
"plan_update_external_deferral": planUpdateExternalDeferral,
"plan_delete_external_deferral": planDeleteExternalDeferral,
"plan_delete_mode_external_deferral": planDeleteModeExternalDeferral,
"ephemeral_open_deferral": ephemeralResourceOpenDeferral,
"ephemeral_open_deferral_dependencies": ephemeralResourceOpenDeferralWithDependency,
"ephemeral_open_deferral_expanded": ephemeralResourceOpenDeferralExpanded,
}
for name, test := range tests {
@ -3466,7 +3544,6 @@ func TestContextApply_deferredActions(t *testing.T) {
t.Errorf("wrong provider address in plan\n%s", diff)
}
}
})
if stage.wantApplied == nil {
@ -3590,6 +3667,22 @@ func (provider *deferredActionsProvider) Provider() providers.Interface {
},
},
},
EphemeralResourceTypes: map[string]providers.Schema{
"test": {
Block: &configschema.Block{
Attributes: map[string]*configschema.Attribute{
"name": {
Type: cty.String,
Required: true,
},
"value": {
Type: cty.String,
Computed: true,
},
},
},
},
},
},
ReadResourceFn: func(req providers.ReadResourceRequest) providers.ReadResourceResponse {
if key := req.PriorState.GetAttr("name"); key.IsKnown() && key.AsString() == "deferred_read" {
@ -3703,6 +3796,24 @@ func (provider *deferredActionsProvider) Provider() providers.Interface {
},
}
},
OpenEphemeralResourceFn: func(op providers.OpenEphemeralResourceRequest) providers.OpenEphemeralResourceResponse {
name := op.Config.GetAttr("name").AsString()
res := providers.OpenEphemeralResourceResponse{
Result: cty.ObjectVal(map[string]cty.Value{
"name": cty.StringVal(name),
"value": cty.StringVal("ephemeral_value"),
}),
}
if name == "deferred_open" {
res.Deferred = &providers.Deferred{
Reason: providers.DeferredReasonProviderConfigUnknown,
}
}
return res
},
}
}

Loading…
Cancel
Save