Skip to content

Commit

Permalink
add bimapper test with mixed types
Browse files Browse the repository at this point in the history
  • Loading branch information
rboyer committed Sep 21, 2023
1 parent ba366d7 commit 7938858
Showing 1 changed file with 133 additions and 2 deletions.
135 changes: 133 additions & 2 deletions internal/resource/mappers/bimapper/bimapper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,13 @@ var (
GroupVersion: fakeVersion,
Kind: "Bar",
}
fakeBazType = &pbresource.Type{
Group: fakeGroupName,
GroupVersion: fakeVersion,
Kind: "Baz",
}
)

// TODO(rb): test NewWithWildcardLinkType

func TestMapper(t *testing.T) {
// Create an advance pointer to some services.

Expand Down Expand Up @@ -213,6 +216,134 @@ func TestMapper(t *testing.T) {
require.True(t, m.IsEmpty())
}

func TestMapper_Wildcard(t *testing.T) {
bar1Ref := newRef(fakeBarType, "uno")
bar2Ref := newRef(fakeBarType, "dos")

baz1Ref := newRef(fakeBazType, "uno")
baz2Ref := newRef(fakeBazType, "dos")

m := NewWithWildcardLinkType(fakeFooType)

foo1 := rtest.Resource(fakeFooType, "foo1").
WithTenancy(resource.DefaultNamespacedTenancy()).
Build()
foo1Refs := []resource.ReferenceOrID{
bar1Ref,
baz1Ref,
}

foo2 := rtest.Resource(fakeFooType, "foo2").
WithTenancy(resource.DefaultNamespacedTenancy()).
Build()
foo2Refs := []resource.ReferenceOrID{
bar1Ref,
bar2Ref,
baz2Ref,
}
foo2UpdatedRefs := []resource.ReferenceOrID{
bar2Ref,
baz2Ref,
}

// Nothing tracked yet so we assume nothing.
requireLinksForItem(t, m, foo1.Id)
requireLinksForItem(t, m, foo2.Id)
requireItemsForLink(t, m, bar1Ref)
requireItemsForLink(t, m, bar2Ref)
requireItemsForLink(t, m, baz1Ref)
requireItemsForLink(t, m, baz2Ref)

// no-ops
m.UntrackItem(foo1.Id)

// still nothing
requireLinksForItem(t, m, foo1.Id)
requireLinksForItem(t, m, foo2.Id)
requireItemsForLink(t, m, bar1Ref)
requireItemsForLink(t, m, bar2Ref)
requireItemsForLink(t, m, baz1Ref)
requireItemsForLink(t, m, baz2Ref)

// Actually insert some data.
m.TrackItem(foo1.Id, foo1Refs)

// Check links mapping
requireLinksForItem(t, m, foo1.Id, foo1Refs...)
requireItemsForLink(t, m, bar1Ref, foo1.Id)
requireItemsForLink(t, m, bar2Ref)
requireItemsForLink(t, m, baz1Ref, foo1.Id)
requireItemsForLink(t, m, baz2Ref)

// track it again, no change
m.TrackItem(foo1.Id, foo1Refs)

requireLinksForItem(t, m, foo1.Id, foo1Refs...)
requireItemsForLink(t, m, bar1Ref, foo1.Id)
requireItemsForLink(t, m, bar2Ref)
requireItemsForLink(t, m, baz1Ref, foo1.Id)
requireItemsForLink(t, m, baz2Ref)

// track new one that overlaps slightly
m.TrackItem(foo2.Id, foo2Refs)

// Check links mapping for the new one
requireLinksForItem(t, m, foo1.Id, foo1Refs...)
requireLinksForItem(t, m, foo2.Id, foo2Refs...)
requireItemsForLink(t, m, bar1Ref, foo1.Id, foo2.Id)
requireItemsForLink(t, m, bar2Ref, foo2.Id)
requireItemsForLink(t, m, baz1Ref, foo1.Id)
requireItemsForLink(t, m, baz2Ref, foo2.Id)

// update the original to change it
m.TrackItem(foo2.Id, foo2UpdatedRefs)

requireLinksForItem(t, m, foo1.Id, foo1Refs...)
requireLinksForItem(t, m, foo2.Id, foo2UpdatedRefs...)
requireItemsForLink(t, m, bar1Ref, foo1.Id)
requireItemsForLink(t, m, bar2Ref, foo2.Id)
requireItemsForLink(t, m, baz1Ref, foo1.Id)
requireItemsForLink(t, m, baz2Ref, foo2.Id)

// delete the original
m.UntrackItem(foo1.Id)

requireLinksForItem(t, m, foo1.Id)
requireLinksForItem(t, m, foo2.Id, foo2UpdatedRefs...)
requireItemsForLink(t, m, bar1Ref)
requireItemsForLink(t, m, bar2Ref, foo2.Id)
requireItemsForLink(t, m, baz1Ref)
requireItemsForLink(t, m, baz2Ref, foo2.Id)

// delete the link
m.UntrackLink(baz2Ref)

foo2DoubleUpdatedRefs := []resource.ReferenceOrID{
bar2Ref,
}

requireLinksForItem(t, m, foo1.Id)
requireLinksForItem(t, m, foo2.Id, foo2DoubleUpdatedRefs...)
requireItemsForLink(t, m, bar1Ref)
requireItemsForLink(t, m, bar2Ref, foo2.Id)
requireItemsForLink(t, m, baz1Ref)
requireItemsForLink(t, m, baz2Ref)

// delete another item
m.UntrackItem(foo2.Id)

requireLinksForItem(t, m, foo1.Id)
requireLinksForItem(t, m, foo2.Id)
requireItemsForLink(t, m, bar1Ref)
requireItemsForLink(t, m, bar2Ref)
requireItemsForLink(t, m, baz1Ref)
requireItemsForLink(t, m, baz2Ref)

// Reset the mapper and check that its internal maps are empty.
m.Reset()
require.True(t, m.IsEmpty())
}

func TestPanics(t *testing.T) {
t.Run("new mapper without types", func(t *testing.T) {
require.PanicsWithValue(t, "itemType is required", func() {
Expand Down

0 comments on commit 7938858

Please sign in to comment.