Skip to content

Commit 04c95fe

Browse files
Improve tests in internal/states (ProviderAddrs, HasCurrent, Unlock) (#37650)
1 parent 221fc59 commit 04c95fe

File tree

2 files changed

+86
-0
lines changed

2 files changed

+86
-0
lines changed

internal/states/resource_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,15 @@ import (
88
)
99

1010
func TestResourceInstanceDeposeCurrentObject(t *testing.T) {
11+
t.Run("nil resource", func(t *testing.T) {
12+
var nilRI *ResourceInstance
13+
dk := nilRI.deposeCurrentObject(NotDeposed)
14+
t.Logf("deposedKey (nil receiver) is %q", dk)
15+
16+
if dk != NotDeposed {
17+
t.Fatalf("expected NotDeposed for nil receiver, got %q", dk)
18+
}
19+
})
1120
obj := &ResourceInstanceObjectSrc{
1221
// Empty for the sake of this test, because we're just going to
1322
// compare by pointer below anyway.

internal/states/state_test.go

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"fmt"
88
"reflect"
99
"testing"
10+
"time"
1011

1112
"github.com/go-test/deep"
1213
"github.com/google/go-cmp/cmp"
@@ -337,6 +338,18 @@ func TestStateHasResourceInstanceObjects(t *testing.T) {
337338
s := ss.Lock()
338339
delete(s.Modules[""].Resources["test.foo"].Instances, addrs.NoKey)
339340
ss.Unlock()
341+
done := make(chan struct{})
342+
go func() {
343+
ss.Lock()
344+
ss.Unlock()
345+
close(done)
346+
}()
347+
select {
348+
case <-done:
349+
// OK: lock was released
350+
case <-time.After(500 * time.Millisecond):
351+
t.Fatalf("Unlock did not release SyncState lock (timed out acquiring lock again)")
352+
}
340353
},
341354
false,
342355
},
@@ -1009,6 +1022,70 @@ func TestState_MoveModule(t *testing.T) {
10091022
})
10101023
}
10111024

1025+
func TestState_ProviderAddrs(t *testing.T) {
1026+
// 1) nil state
1027+
var nilState *State
1028+
if got := nilState.ProviderAddrs(); got != nil {
1029+
t.Fatalf("nil state: expected nil, got %#v", got)
1030+
}
1031+
1032+
// 2) empty state
1033+
empty := NewState()
1034+
if got := empty.ProviderAddrs(); got != nil {
1035+
t.Fatalf("empty state: expected nil, got %#v", got)
1036+
}
1037+
1038+
// 3) populated state
1039+
s := NewState()
1040+
1041+
rootAWS := addrs.AbsProviderConfig{
1042+
Module: addrs.RootModule,
1043+
Provider: addrs.NewDefaultProvider("aws"),
1044+
}
1045+
rootGoogle := addrs.AbsProviderConfig{
1046+
Module: addrs.RootModule,
1047+
Provider: addrs.NewDefaultProvider("google"),
1048+
}
1049+
childAWS := addrs.AbsProviderConfig{
1050+
Module: addrs.RootModule.Child("child"),
1051+
Provider: addrs.NewDefaultProvider("aws"),
1052+
}
1053+
1054+
rm := s.RootModule()
1055+
rm.SetResourceInstanceCurrent(
1056+
addrs.Resource{Mode: addrs.ManagedResourceMode, Type: "test_thing", Name: "foo"}.Instance(addrs.NoKey),
1057+
&ResourceInstanceObjectSrc{Status: ObjectReady, SchemaVersion: 1, AttrsJSON: []byte(`{}`)},
1058+
rootAWS,
1059+
)
1060+
1061+
rm.SetResourceInstanceCurrent(
1062+
addrs.Resource{Mode: addrs.ManagedResourceMode, Type: "test_thing", Name: "bar"}.Instance(addrs.NoKey),
1063+
&ResourceInstanceObjectSrc{Status: ObjectReady, SchemaVersion: 1, AttrsJSON: []byte(`{}`)},
1064+
rootAWS,
1065+
)
1066+
1067+
rm.SetResourceInstanceCurrent(
1068+
addrs.Resource{Mode: addrs.ManagedResourceMode, Type: "test_thing", Name: "baz"}.Instance(addrs.NoKey),
1069+
&ResourceInstanceObjectSrc{Status: ObjectReady, SchemaVersion: 1, AttrsJSON: []byte(`{}`)},
1070+
rootGoogle,
1071+
)
1072+
1073+
childMI := addrs.RootModuleInstance.Child("child", addrs.NoKey)
1074+
cm := s.EnsureModule(childMI)
1075+
cm.SetResourceInstanceCurrent(
1076+
addrs.Resource{Mode: addrs.ManagedResourceMode, Type: "test_thing", Name: "child"}.Instance(addrs.NoKey),
1077+
&ResourceInstanceObjectSrc{Status: ObjectReady, SchemaVersion: 1, AttrsJSON: []byte(`{}`)},
1078+
childAWS,
1079+
)
1080+
1081+
got := s.ProviderAddrs()
1082+
expected := []addrs.AbsProviderConfig{childAWS, rootAWS, rootGoogle}
1083+
1084+
if !reflect.DeepEqual(got, expected) {
1085+
t.Fatalf("unexpected provider addrs\nexpected: %#v\ngot: %#v", expected, got)
1086+
}
1087+
}
1088+
10121089
func mustParseModuleInstanceStr(str string) addrs.ModuleInstance {
10131090
addr, diags := addrs.ParseModuleInstanceStr(str)
10141091
if diags.HasErrors() {

0 commit comments

Comments
 (0)