From 57018c8d57591d1e22bbfc6a7c77c43d43c2559d Mon Sep 17 00:00:00 2001 From: Daniel Schmidt Date: Fri, 12 Apr 2024 16:01:55 +0200 Subject: [PATCH] stacks: add test case for ReportDataSourceInstanceDeferred --- internal/plans/deferring/deferred_test.go | 60 +++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/internal/plans/deferring/deferred_test.go b/internal/plans/deferring/deferred_test.go index 8eaf19d3f6..531501f784 100644 --- a/internal/plans/deferring/deferred_test.go +++ b/internal/plans/deferring/deferred_test.go @@ -109,6 +109,66 @@ func TestDeferred_absResourceInstanceDeferred(t *testing.T) { }) } +func TestDeferred_absDataSourceInstanceDeferred(t *testing.T) { + instAAddr := addrs.AbsResourceInstance{ + Module: addrs.RootModuleInstance.Child("foo", addrs.NoKey), + Resource: addrs.ResourceInstance{ + Resource: addrs.Resource{ + Mode: addrs.DataResourceMode, + Type: "test", + Name: "a", + }, + }, + } + instBAddr := addrs.AbsResourceInstance{ + Module: addrs.RootModuleInstance, + Resource: addrs.ResourceInstance{ + Resource: addrs.Resource{ + Mode: addrs.DataResourceMode, + Type: "test", + Name: "b", + }, + }, + } + instCAddr := addrs.AbsResourceInstance{ + Module: addrs.RootModuleInstance, + Resource: addrs.ResourceInstance{ + Resource: addrs.Resource{ + Mode: addrs.ManagedResourceMode, + Type: "test", + Name: "c", + }, + }, + } + + resourceGraph := addrs.NewDirectedGraph[addrs.ConfigResource]() + resourceGraph.AddDependency(instCAddr.ConfigResource(), instBAddr.ConfigResource()) + resourceGraph.AddDependency(instCAddr.ConfigResource(), instAAddr.ConfigResource()) + deferred := NewDeferred(resourceGraph, true) + + // Before we report anything, all three addresses should indicate that + // they don't need to have their actions deferred. + t.Run("without any deferrals yet", func(t *testing.T) { + for _, instAddr := range []addrs.AbsResourceInstance{instAAddr, instBAddr, instCAddr} { + if deferred.ShouldDeferResourceInstanceChanges(instAddr) { + t.Errorf("%s reported as needing deferred; should not be, yet", instAddr) + } + } + }) + + // Instance A has its Read action deferred for some reason. + deferred.ReportDataSourceInstanceDeferred(instAAddr) + + t.Run("with one resource instance deferred", func(t *testing.T) { + if !deferred.ShouldDeferResourceInstanceChanges(instCAddr) { + t.Errorf("%s was not reported as needing deferred; should be deferred", instCAddr) + } + if deferred.ShouldDeferResourceInstanceChanges(instBAddr) { + t.Errorf("%s reported as needing deferred; should not be", instCAddr) + } + }) +} + func TestDeferred_partialExpandedDatasource(t *testing.T) { instAAddr := addrs.AbsResourceInstance{ Module: addrs.RootModuleInstance.Child("foo", addrs.NoKey),