Improve tests in internal/states (ProviderAddrs, HasCurrent, Unlock) (#37650)

pull/37692/head^2
davidspielmann 8 months ago committed by GitHub
parent 221fc59f0e
commit 04c95feb8d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -8,6 +8,15 @@ import (
)
func TestResourceInstanceDeposeCurrentObject(t *testing.T) {
t.Run("nil resource", func(t *testing.T) {
var nilRI *ResourceInstance
dk := nilRI.deposeCurrentObject(NotDeposed)
t.Logf("deposedKey (nil receiver) is %q", dk)
if dk != NotDeposed {
t.Fatalf("expected NotDeposed for nil receiver, got %q", dk)
}
})
obj := &ResourceInstanceObjectSrc{
// Empty for the sake of this test, because we're just going to
// compare by pointer below anyway.

@ -7,6 +7,7 @@ import (
"fmt"
"reflect"
"testing"
"time"
"github.com/go-test/deep"
"github.com/google/go-cmp/cmp"
@ -337,6 +338,18 @@ func TestStateHasResourceInstanceObjects(t *testing.T) {
s := ss.Lock()
delete(s.Modules[""].Resources["test.foo"].Instances, addrs.NoKey)
ss.Unlock()
done := make(chan struct{})
go func() {
ss.Lock()
ss.Unlock()
close(done)
}()
select {
case <-done:
// OK: lock was released
case <-time.After(500 * time.Millisecond):
t.Fatalf("Unlock did not release SyncState lock (timed out acquiring lock again)")
}
},
false,
},
@ -1009,6 +1022,70 @@ func TestState_MoveModule(t *testing.T) {
})
}
func TestState_ProviderAddrs(t *testing.T) {
// 1) nil state
var nilState *State
if got := nilState.ProviderAddrs(); got != nil {
t.Fatalf("nil state: expected nil, got %#v", got)
}
// 2) empty state
empty := NewState()
if got := empty.ProviderAddrs(); got != nil {
t.Fatalf("empty state: expected nil, got %#v", got)
}
// 3) populated state
s := NewState()
rootAWS := addrs.AbsProviderConfig{
Module: addrs.RootModule,
Provider: addrs.NewDefaultProvider("aws"),
}
rootGoogle := addrs.AbsProviderConfig{
Module: addrs.RootModule,
Provider: addrs.NewDefaultProvider("google"),
}
childAWS := addrs.AbsProviderConfig{
Module: addrs.RootModule.Child("child"),
Provider: addrs.NewDefaultProvider("aws"),
}
rm := s.RootModule()
rm.SetResourceInstanceCurrent(
addrs.Resource{Mode: addrs.ManagedResourceMode, Type: "test_thing", Name: "foo"}.Instance(addrs.NoKey),
&ResourceInstanceObjectSrc{Status: ObjectReady, SchemaVersion: 1, AttrsJSON: []byte(`{}`)},
rootAWS,
)
rm.SetResourceInstanceCurrent(
addrs.Resource{Mode: addrs.ManagedResourceMode, Type: "test_thing", Name: "bar"}.Instance(addrs.NoKey),
&ResourceInstanceObjectSrc{Status: ObjectReady, SchemaVersion: 1, AttrsJSON: []byte(`{}`)},
rootAWS,
)
rm.SetResourceInstanceCurrent(
addrs.Resource{Mode: addrs.ManagedResourceMode, Type: "test_thing", Name: "baz"}.Instance(addrs.NoKey),
&ResourceInstanceObjectSrc{Status: ObjectReady, SchemaVersion: 1, AttrsJSON: []byte(`{}`)},
rootGoogle,
)
childMI := addrs.RootModuleInstance.Child("child", addrs.NoKey)
cm := s.EnsureModule(childMI)
cm.SetResourceInstanceCurrent(
addrs.Resource{Mode: addrs.ManagedResourceMode, Type: "test_thing", Name: "child"}.Instance(addrs.NoKey),
&ResourceInstanceObjectSrc{Status: ObjectReady, SchemaVersion: 1, AttrsJSON: []byte(`{}`)},
childAWS,
)
got := s.ProviderAddrs()
expected := []addrs.AbsProviderConfig{childAWS, rootAWS, rootGoogle}
if !reflect.DeepEqual(got, expected) {
t.Fatalf("unexpected provider addrs\nexpected: %#v\ngot: %#v", expected, got)
}
}
func mustParseModuleInstanceStr(str string) addrs.ModuleInstance {
addr, diags := addrs.ParseModuleInstanceStr(str)
if diags.HasErrors() {

Loading…
Cancel
Save