Skip to content

Commit

Permalink
pkg/identity: Replace gocheck with built-in go test
Browse files Browse the repository at this point in the history
The package pkg/identity/cache will be handled separately.

Signed-off-by: Tam Mach <tam.mach@cilium.io>
  • Loading branch information
sayboras committed May 6, 2024
1 parent 9f9ee95 commit f726e13
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 108 deletions.
82 changes: 36 additions & 46 deletions pkg/identity/identity_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,80 +8,70 @@ import (
"net/netip"
"testing"

. "github.com/cilium/checkmate"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"

"github.com/cilium/cilium/pkg/checker"
"github.com/cilium/cilium/pkg/labels"
"github.com/cilium/cilium/pkg/option"
)

// Hook up gocheck into the "go test" runner.
func Test(t *testing.T) {
TestingT(t)
}

type IdentityTestSuite struct{}

var _ = Suite(&IdentityTestSuite{})

func (s *IdentityTestSuite) TestReservedID(c *C) {
func TestReservedID(t *testing.T) {
i := GetReservedID("host")
c.Assert(i, Equals, NumericIdentity(1))
c.Assert(i.String(), Equals, "host")
require.Equal(t, NumericIdentity(1), i)
require.Equal(t, "host", i.String())

i = GetReservedID("world")
c.Assert(i, Equals, NumericIdentity(2))
c.Assert(i.String(), Equals, "world")
require.Equal(t, NumericIdentity(2), i)
require.Equal(t, "world", i.String())

// This is an obsoleted identity, we verify that it returns 0
i = GetReservedID("cluster")
c.Assert(i, Equals, NumericIdentity(0))
c.Assert(i.String(), Equals, "unknown")
require.Equal(t, NumericIdentity(0), i)
require.Equal(t, "unknown", i.String())

i = GetReservedID("health")
c.Assert(i, Equals, NumericIdentity(4))
c.Assert(i.String(), Equals, "health")
require.Equal(t, NumericIdentity(4), i)
require.Equal(t, "health", i.String())

i = GetReservedID("init")
c.Assert(i, Equals, NumericIdentity(5))
c.Assert(i.String(), Equals, "init")
require.Equal(t, NumericIdentity(5), i)
require.Equal(t, "init", i.String())

i = GetReservedID("unmanaged")
c.Assert(i, Equals, NumericIdentity(3))
c.Assert(i.String(), Equals, "unmanaged")
require.Equal(t, NumericIdentity(3), i)
require.Equal(t, "unmanaged", i.String())

i = GetReservedID("kube-apiserver")
c.Assert(i, Equals, NumericIdentity(7))
c.Assert(i.String(), Equals, "kube-apiserver")
require.Equal(t, NumericIdentity(7), i)
require.Equal(t, "kube-apiserver", i.String())

c.Assert(GetReservedID("unknown"), Equals, IdentityUnknown)
require.Equal(t, IdentityUnknown, GetReservedID("unknown"))
unknown := NumericIdentity(700)
c.Assert(unknown.String(), Equals, "700")
require.Equal(t, "700", unknown.String())
}

func (s *IdentityTestSuite) TestIsReservedIdentity(c *C) {
c.Assert(ReservedIdentityKubeAPIServer.IsReservedIdentity(), Equals, true)
c.Assert(ReservedIdentityHealth.IsReservedIdentity(), Equals, true)
c.Assert(ReservedIdentityHost.IsReservedIdentity(), Equals, true)
c.Assert(ReservedIdentityWorld.IsReservedIdentity(), Equals, true)
c.Assert(ReservedIdentityInit.IsReservedIdentity(), Equals, true)
c.Assert(ReservedIdentityUnmanaged.IsReservedIdentity(), Equals, true)
func TestIsReservedIdentity(t *testing.T) {
require.True(t, ReservedIdentityKubeAPIServer.IsReservedIdentity())
require.True(t, ReservedIdentityHealth.IsReservedIdentity())
require.True(t, ReservedIdentityHost.IsReservedIdentity())
require.True(t, ReservedIdentityWorld.IsReservedIdentity())
require.True(t, ReservedIdentityInit.IsReservedIdentity())
require.True(t, ReservedIdentityUnmanaged.IsReservedIdentity())

c.Assert(NumericIdentity(123456).IsReservedIdentity(), Equals, false)
require.Equal(t, false, NumericIdentity(123456).IsReservedIdentity())
}

func (s *IdentityTestSuite) TestRequiresGlobalIdentity(c *C) {
func TestRequiresGlobalIdentity(t *testing.T) {
prefix := netip.MustParsePrefix("0.0.0.0/0")
c.Assert(RequiresGlobalIdentity(labels.GetCIDRLabels(prefix)), Equals, false)
require.Equal(t, false, RequiresGlobalIdentity(labels.GetCIDRLabels(prefix)))

prefix = netip.MustParsePrefix("192.168.23.0/24")
c.Assert(RequiresGlobalIdentity(labels.GetCIDRLabels(prefix)), Equals, false)
require.Equal(t, false, RequiresGlobalIdentity(labels.GetCIDRLabels(prefix)))

c.Assert(RequiresGlobalIdentity(labels.NewLabelsFromModel([]string{"k8s:foo=bar"})), Equals, true)
require.True(t, RequiresGlobalIdentity(labels.NewLabelsFromModel([]string{"k8s:foo=bar"})))
}

func (s *IdentityTestSuite) TestScopeForLabels(c *C) {
func TestScopeForLabels(t *testing.T) {
tests := []struct {
lbls labels.Labels
scope NumericIdentity
Expand Down Expand Up @@ -135,11 +125,11 @@ func (s *IdentityTestSuite) TestScopeForLabels(c *C) {
continue
}
scope := ScopeForLabels(test.lbls)
c.Assert(scope, Equals, test.scope, Commentf("%d / labels %s", i, test.lbls.String()))
require.Equal(t, test.scope, scope, "%d / labels %s", i, test.lbls.String())
}
}

func (s *IdentityTestSuite) TestNewIdentityFromLabelArray(c *C) {
func TestNewIdentityFromLabelArray(t *testing.T) {
id := NewIdentityFromLabelArray(NumericIdentity(1001),
labels.NewLabelArrayFromSortedList("unspec:a=;unspec:b;unspec:c=d"))

Expand All @@ -148,9 +138,9 @@ func (s *IdentityTestSuite) TestNewIdentityFromLabelArray(c *C) {
"c": labels.ParseLabel("c=d"),
"b": labels.ParseLabel("b"),
}
c.Assert(id.ID, Equals, NumericIdentity(1001))
c.Assert(id.Labels, checker.DeepEquals, lbls)
c.Assert(id.LabelArray, checker.DeepEquals, lbls.LabelArray())
require.Equal(t, NumericIdentity(1001), id.ID)
require.EqualValues(t, lbls, id.Labels)
require.EqualValues(t, lbls.LabelArray(), id.LabelArray)
}

func TestLookupReservedIdentityByLabels(t *testing.T) {
Expand Down
100 changes: 45 additions & 55 deletions pkg/identity/identitymanager/manager_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,91 +6,81 @@ package identitymanager
import (
"testing"

. "github.com/cilium/checkmate"
"github.com/stretchr/testify/require"

"github.com/cilium/cilium/pkg/checker"
"github.com/cilium/cilium/pkg/identity"
"github.com/cilium/cilium/pkg/labels"
)

// Hook up gocheck into the "go test" runner.
func Test(t *testing.T) {
TestingT(t)
}

type IdentityManagerTestSuite struct{}

var (
_ = Suite(&IdentityManagerTestSuite{})

idFooSelectLabels = labels.NewLabelsFromModel([]string{"id=foo"})
idBarSelectLabels = labels.NewLabelsFromModel([]string{"id=bar"})
fooIdentity = identity.NewIdentity(identity.NumericIdentity(12345), idFooSelectLabels)
fooIdentity2 = identity.NewIdentity(identity.NumericIdentity(12345), idFooSelectLabels)
barIdentity = identity.NewIdentity(identity.NumericIdentity(54321), idBarSelectLabels)
)

func (s *IdentityManagerTestSuite) TestIdentityManagerLifecycle(c *C) {
func TestIdentityManagerLifecycle(t *testing.T) {
idm := NewIdentityManager()
c.Assert(idm.identities, Not(IsNil))
require.NotNil(t, idm.identities)

_, exists := idm.identities[fooIdentity.ID]
c.Assert(exists, Equals, false)
require.Equal(t, false, exists)

idm.Add(fooIdentity)
c.Assert(idm.identities[fooIdentity.ID].refCount, Equals, uint(1))
require.Equal(t, uint(1), idm.identities[fooIdentity.ID].refCount)

idm.Add(fooIdentity)
c.Assert(idm.identities[fooIdentity.ID].refCount, Equals, uint(2))
require.Equal(t, uint(2), idm.identities[fooIdentity.ID].refCount)

idm.Add(barIdentity)
c.Assert(idm.identities[barIdentity.ID].refCount, Equals, uint(1))
require.Equal(t, uint(1), idm.identities[barIdentity.ID].refCount)

idm.Remove(fooIdentity)
c.Assert(idm.identities[fooIdentity.ID].refCount, Equals, uint(1))
require.Equal(t, uint(1), idm.identities[fooIdentity.ID].refCount)

idm.Remove(fooIdentity)
_, exists = idm.identities[fooIdentity.ID]
c.Assert(exists, Equals, false)
require.Equal(t, false, exists)

_, exists = idm.identities[barIdentity.ID]
c.Assert(exists, Equals, true)
require.True(t, exists)

idm.Remove(barIdentity)
_, exists = idm.identities[barIdentity.ID]
c.Assert(exists, Equals, false)
require.Equal(t, false, exists)

idm.Add(fooIdentity)
_, exists = idm.identities[fooIdentity.ID]
c.Assert(exists, Equals, true)
require.True(t, exists)
idm.RemoveOldAddNew(fooIdentity, barIdentity)
_, exists = idm.identities[fooIdentity.ID]
c.Assert(exists, Equals, false)
require.Equal(t, false, exists)
_, exists = idm.identities[barIdentity.ID]
c.Assert(exists, Equals, true)
c.Assert(idm.identities[barIdentity.ID].refCount, Equals, uint(1))
require.True(t, exists)
require.Equal(t, uint(1), idm.identities[barIdentity.ID].refCount)

idm.RemoveOldAddNew(nil, barIdentity)
c.Assert(idm.identities[barIdentity.ID].refCount, Equals, uint(2))
require.Equal(t, uint(2), idm.identities[barIdentity.ID].refCount)
}

func (s *IdentityManagerTestSuite) TestHostIdentityLifecycle(c *C) {
func TestHostIdentityLifecycle(t *testing.T) {
idm := NewIdentityManager()
c.Assert(idm.identities, Not(IsNil))
require.NotNil(t, idm.identities)

hostIdentity := identity.NewIdentity(identity.ReservedIdentityHost, labels.LabelHost)
_, exists := idm.identities[hostIdentity.ID]
c.Assert(exists, Equals, false)
require.Equal(t, false, exists)

idm.Add(hostIdentity)
c.Assert(idm.identities[hostIdentity.ID].refCount, Equals, uint(1))
require.Equal(t, uint(1), idm.identities[hostIdentity.ID].refCount)

newHostLabels := labels.NewLabelsFromModel([]string{"id=foo"})
newHostLabels.MergeLabels(labels.LabelHost)
newHostIdentity := identity.NewIdentity(identity.ReservedIdentityHost, newHostLabels)
idm.RemoveOldAddNew(hostIdentity, newHostIdentity)
c.Assert(idm.identities[hostIdentity.ID].refCount, Equals, uint(1))
c.Assert(idm.identities[hostIdentity.ID].identity, checker.DeepEquals, newHostIdentity)
require.Equal(t, uint(1), idm.identities[hostIdentity.ID].refCount)
require.EqualValues(t, newHostIdentity, idm.identities[hostIdentity.ID].identity)
}

type identityManagerObserver struct {
Expand All @@ -117,62 +107,62 @@ func (i *identityManagerObserver) LocalEndpointIdentityRemoved(identity *identit
}
}

func (s *IdentityManagerTestSuite) TestLocalEndpointIdentityAdded(c *C) {
func TestLocalEndpointIdentityAdded(t *testing.T) {
idm := NewIdentityManager()
observer := newIdentityManagerObserver([]identity.NumericIdentity{}, []identity.NumericIdentity{})
idm.subscribe(observer)

// No-op: nil Identity.
idm.Add(nil)
expectedObserver := newIdentityManagerObserver([]identity.NumericIdentity{}, []identity.NumericIdentity{})
c.Assert(observer, checker.DeepEquals, expectedObserver)
require.EqualValues(t, expectedObserver, observer)

// First add triggers an "IdentityAdded" event.
idm.Add(fooIdentity)
expectedObserver = newIdentityManagerObserver([]identity.NumericIdentity{fooIdentity.ID}, []identity.NumericIdentity{})
c.Assert(observer, checker.DeepEquals, expectedObserver)
require.EqualValues(t, expectedObserver, observer)

// Second does not.
idm.Add(fooIdentity)
c.Assert(observer, checker.DeepEquals, expectedObserver)
c.Assert(idm.identities[fooIdentity.ID].refCount, Equals, uint(2))
require.EqualValues(t, expectedObserver, observer)
require.Equal(t, uint(2), idm.identities[fooIdentity.ID].refCount)

// Duplicate identity with the same ID does not trigger events.
idm.Add(fooIdentity2)
c.Assert(observer, checker.DeepEquals, expectedObserver)
c.Assert(idm.identities[fooIdentity.ID].refCount, Equals, uint(3))
require.EqualValues(t, expectedObserver, observer)
require.Equal(t, uint(3), idm.identities[fooIdentity.ID].refCount)

// Unrelated add should also trigger.
idm.Add(barIdentity)
expectedObserver = newIdentityManagerObserver([]identity.NumericIdentity{fooIdentity.ID, barIdentity.ID}, []identity.NumericIdentity{})
c.Assert(observer, checker.DeepEquals, expectedObserver)
c.Assert(idm.identities[barIdentity.ID].refCount, Equals, uint(1))
require.EqualValues(t, expectedObserver, observer)
require.Equal(t, uint(1), idm.identities[barIdentity.ID].refCount)

// Removing both then re-adding should trigger the event again.
idm.Remove(fooIdentity)
c.Assert(idm.identities[fooIdentity.ID].refCount, Equals, uint(2))
require.Equal(t, uint(2), idm.identities[fooIdentity.ID].refCount)
idm.Remove(fooIdentity)
c.Assert(idm.identities[fooIdentity.ID].refCount, Equals, uint(1))
require.Equal(t, uint(1), idm.identities[fooIdentity.ID].refCount)
idm.Remove(fooIdentity)
c.Assert(observer.added, HasLen, 2)
c.Assert(observer.removed, HasLen, 1)
require.Equal(t, 2, len(observer.added))
require.Equal(t, 1, len(observer.removed))
idm.Add(fooIdentity)
expectedObserver = newIdentityManagerObserver([]identity.NumericIdentity{fooIdentity.ID, barIdentity.ID, fooIdentity.ID}, []identity.NumericIdentity{fooIdentity.ID})
c.Assert(observer, checker.DeepEquals, expectedObserver)
require.EqualValues(t, expectedObserver, observer)

// RemoveOldAddNew with the same ID is a no-op
idm.RemoveOldAddNew(fooIdentity, fooIdentity2)
c.Assert(observer, checker.DeepEquals, expectedObserver)
require.EqualValues(t, expectedObserver, observer)

// RemoveOldAddNew from an existing ID to another triggers removal of the old
idm.RemoveOldAddNew(barIdentity, fooIdentity)
expectedObserver = newIdentityManagerObserver([]identity.NumericIdentity{fooIdentity.ID, barIdentity.ID, fooIdentity.ID}, []identity.NumericIdentity{fooIdentity.ID, barIdentity.ID})
c.Assert(observer, checker.DeepEquals, expectedObserver)
require.EqualValues(t, expectedObserver, observer)
}

func (s *IdentityManagerTestSuite) TestLocalEndpointIdentityRemoved(c *C) {
func TestLocalEndpointIdentityRemoved(t *testing.T) {
idm := NewIdentityManager()
c.Assert(idm.identities, NotNil)
require.NotNil(t, idm.identities)
observer := newIdentityManagerObserver([]identity.NumericIdentity{}, []identity.NumericIdentity{})
idm.subscribe(observer)

Expand All @@ -187,10 +177,10 @@ func (s *IdentityManagerTestSuite) TestLocalEndpointIdentityRemoved(c *C) {
idm.Add(fooIdentity)
idm.Remove(fooIdentity)
expectedObserver := newIdentityManagerObserver([]identity.NumericIdentity{fooIdentity.ID}, []identity.NumericIdentity{fooIdentity.ID})
c.Assert(observer, checker.DeepEquals, expectedObserver)
require.EqualValues(t, expectedObserver, observer)

idm = NewIdentityManager()
c.Assert(idm.identities, NotNil)
require.NotNil(t, idm.identities)
observer = newIdentityManagerObserver(nil, []identity.NumericIdentity{})
idm.subscribe(observer)

Expand All @@ -200,11 +190,11 @@ func (s *IdentityManagerTestSuite) TestLocalEndpointIdentityRemoved(c *C) {
idm.Add(barIdentity) // bar = 1
idm.Remove(fooIdentity) // foo = 1
expectedObserver = newIdentityManagerObserver(nil, []identity.NumericIdentity{})
c.Assert(observer, checker.DeepEquals, expectedObserver)
require.EqualValues(t, expectedObserver, observer)
idm.Remove(fooIdentity) // foo = 0
expectedObserver = newIdentityManagerObserver(nil, []identity.NumericIdentity{fooIdentity.ID})
c.Assert(observer, checker.DeepEquals, expectedObserver)
require.EqualValues(t, expectedObserver, observer)
idm.Remove(barIdentity) // bar = 0
expectedObserver = newIdentityManagerObserver(nil, []identity.NumericIdentity{fooIdentity.ID, barIdentity.ID})
c.Assert(observer, checker.DeepEquals, expectedObserver)
require.EqualValues(t, expectedObserver, observer)
}

0 comments on commit f726e13

Please sign in to comment.