mirror of https://github.com/hashicorp/consul
97 lines
2.1 KiB
Go
97 lines
2.1 KiB
Go
|
// Copyright (c) HashiCorp, Inc.
|
||
|
// SPDX-License-Identifier: BUSL-1.1
|
||
|
|
||
|
package indexers
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
|
||
|
"github.com/stretchr/testify/require"
|
||
|
|
||
|
"github.com/hashicorp/consul/internal/controller/cache/index"
|
||
|
"github.com/hashicorp/consul/internal/controller/cache/indexers/indexersmock"
|
||
|
"github.com/hashicorp/consul/internal/resource/resourcetest"
|
||
|
"github.com/hashicorp/consul/proto-public/pbresource"
|
||
|
pbdemo "github.com/hashicorp/consul/proto/private/pbdemo/v1"
|
||
|
"github.com/hashicorp/consul/proto/private/prototest"
|
||
|
)
|
||
|
|
||
|
func TestIDIndex(t *testing.T) {
|
||
|
idx := IDIndex("test", index.IndexRequired)
|
||
|
|
||
|
r1 := resourcetest.Resource(pbdemo.AlbumType, "foo").
|
||
|
WithTenancy(&pbresource.Tenancy{
|
||
|
Partition: "default",
|
||
|
Namespace: "default",
|
||
|
}).
|
||
|
WithData(t, &pbdemo.Album{
|
||
|
Name: "foo",
|
||
|
}).
|
||
|
Build()
|
||
|
|
||
|
txn := idx.Txn()
|
||
|
require.NoError(t, txn.Insert(r1))
|
||
|
txn.Commit()
|
||
|
|
||
|
out, err := idx.Txn().Get(r1.Id)
|
||
|
require.NoError(t, err)
|
||
|
prototest.AssertDeepEqual(t, r1, out)
|
||
|
}
|
||
|
|
||
|
func TestOwnerIndex(t *testing.T) {
|
||
|
idx := OwnerIndex("test", index.IndexRequired)
|
||
|
|
||
|
r1 := resourcetest.Resource(pbdemo.AlbumType, "foo").
|
||
|
WithTenancy(&pbresource.Tenancy{
|
||
|
Partition: "default",
|
||
|
Namespace: "default",
|
||
|
}).
|
||
|
WithData(t, &pbdemo.Album{
|
||
|
Name: "foo",
|
||
|
}).
|
||
|
WithOwner(&pbresource.ID{
|
||
|
Type: pbdemo.ArtistType,
|
||
|
Tenancy: &pbresource.Tenancy{
|
||
|
Partition: "default",
|
||
|
Namespace: "default",
|
||
|
},
|
||
|
}).
|
||
|
Build()
|
||
|
|
||
|
txn := idx.Txn()
|
||
|
require.NoError(t, txn.Insert(r1))
|
||
|
txn.Commit()
|
||
|
|
||
|
out, err := idx.Txn().Get(r1.Owner)
|
||
|
require.NoError(t, err)
|
||
|
prototest.AssertDeepEqual(t, r1, out)
|
||
|
}
|
||
|
|
||
|
func TestSingleIDOrRefIndex(t *testing.T) {
|
||
|
getRef := indexersmock.NewGetSingleRefOrID(t)
|
||
|
|
||
|
idx := SingleIDOrRefIndex("test", getRef.Execute)
|
||
|
|
||
|
r1 := resourcetest.Resource(pbdemo.AlbumType, "foo").Build()
|
||
|
ref := &pbresource.Reference{
|
||
|
Type: pbdemo.ArtistType,
|
||
|
Tenancy: &pbresource.Tenancy{
|
||
|
Partition: "default",
|
||
|
Namespace: "default",
|
||
|
},
|
||
|
Name: "foo",
|
||
|
}
|
||
|
|
||
|
getRef.EXPECT().Execute(r1).
|
||
|
Return(ref).
|
||
|
Once()
|
||
|
|
||
|
txn := idx.Txn()
|
||
|
require.NoError(t, txn.Insert(r1))
|
||
|
txn.Commit()
|
||
|
|
||
|
out, err := idx.Txn().Get(ref)
|
||
|
require.NoError(t, err)
|
||
|
prototest.AssertDeepEqual(t, r1, out)
|
||
|
}
|