mirror of https://github.com/hashicorp/consul
66 lines
1.7 KiB
Go
66 lines
1.7 KiB
Go
|
// Copyright (c) HashiCorp, Inc.
|
||
|
// SPDX-License-Identifier: BUSL-1.1
|
||
|
|
||
|
package index
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
|
||
|
"github.com/hashicorp/consul/internal/controller/cache/index/indexmock"
|
||
|
"github.com/hashicorp/consul/internal/resource"
|
||
|
"github.com/hashicorp/consul/internal/resource/resourcetest"
|
||
|
"github.com/hashicorp/consul/proto-public/pbresource"
|
||
|
"github.com/hashicorp/consul/proto/private/prototest"
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
testResourceType = &pbresource.Type{
|
||
|
Group: "test",
|
||
|
GroupVersion: "v1",
|
||
|
Kind: "fake",
|
||
|
}
|
||
|
)
|
||
|
|
||
|
func testResource(name string) *pbresource.Resource {
|
||
|
return resourcetest.Resource(testResourceType, name).
|
||
|
WithTenancy(resource.DefaultNamespacedTenancy()).
|
||
|
Build()
|
||
|
}
|
||
|
|
||
|
func TestResourceIteratorNext(t *testing.T) {
|
||
|
m := indexmock.NewResourceIterable(t)
|
||
|
|
||
|
r1 := testResource("one")
|
||
|
|
||
|
r2 := testResource("two")
|
||
|
r3 := testResource("three")
|
||
|
|
||
|
m.EXPECT().Next().Once().Return(nil, []*pbresource.Resource{r1}, true)
|
||
|
m.EXPECT().Next().Once().Return(nil, []*pbresource.Resource{r2, r3}, false)
|
||
|
m.EXPECT().Next().Return(nil, nil, false)
|
||
|
|
||
|
i := resourceIterator{
|
||
|
iter: m,
|
||
|
}
|
||
|
|
||
|
// iterator is processing the first list of items
|
||
|
actual := i.Next()
|
||
|
require.NotNil(t, actual)
|
||
|
prototest.AssertDeepEqual(t, r1, actual)
|
||
|
// iterator should now be processing the second list of items.
|
||
|
actual = i.Next()
|
||
|
require.NotNil(t, actual)
|
||
|
prototest.AssertDeepEqual(t, r2, actual)
|
||
|
// second element of second list returned
|
||
|
actual = i.Next()
|
||
|
require.NotNil(t, actual)
|
||
|
prototest.AssertDeepEqual(t, r3, actual)
|
||
|
// no more items so a call to Next should return nil
|
||
|
actual = i.Next()
|
||
|
require.Nil(t, actual)
|
||
|
// verify that it continues to return nil indefinitely without causing a panic.
|
||
|
actual = i.Next()
|
||
|
require.Nil(t, actual)
|
||
|
}
|