From 9435eefec6145abee748450dd043f77a155a99a2 Mon Sep 17 00:00:00 2001 From: vportella Date: Mon, 12 Aug 2024 15:25:43 +1000 Subject: [PATCH] Move tests into transitioner package --- .../transitioner/fake/options.go | 17 ------ .../{fake/fake.go => test_helpers.go} | 25 +++++++-- ...ng_test.go => transitions_pending_test.go} | 55 ++++++++++++++++++- pkg/mock/{test_helper.go => test_helpers.go} | 0 4 files changed, 72 insertions(+), 25 deletions(-) delete mode 100644 pkg/controller/cyclenoderequest/transitioner/fake/options.go rename pkg/controller/cyclenoderequest/transitioner/{fake/fake.go => test_helpers.go} (61%) rename pkg/controller/cyclenoderequest/transitioner/{fake/pending_test.go => transitions_pending_test.go} (85%) rename pkg/mock/{test_helper.go => test_helpers.go} (100%) diff --git a/pkg/controller/cyclenoderequest/transitioner/fake/options.go b/pkg/controller/cyclenoderequest/transitioner/fake/options.go deleted file mode 100644 index 4cddf1d..0000000 --- a/pkg/controller/cyclenoderequest/transitioner/fake/options.go +++ /dev/null @@ -1,17 +0,0 @@ -package faketransitioner - -import "github.com/atlassian-labs/cyclops/pkg/mock" - -type Option func(t *Transitioner) - -func WithCloudProviderInstances(nodes []*mock.Node) Option { - return func(t *Transitioner) { - t.cloudProviderInstances = append(t.cloudProviderInstances, nodes...) - } -} - -func WithKubeNodes(nodes []*mock.Node) Option { - return func(t *Transitioner) { - t.kubeNodes = append(t.kubeNodes, nodes...) - } -} diff --git a/pkg/controller/cyclenoderequest/transitioner/fake/fake.go b/pkg/controller/cyclenoderequest/transitioner/test_helpers.go similarity index 61% rename from pkg/controller/cyclenoderequest/transitioner/fake/fake.go rename to pkg/controller/cyclenoderequest/transitioner/test_helpers.go index 03ada22..660ae16 100644 --- a/pkg/controller/cyclenoderequest/transitioner/fake/fake.go +++ b/pkg/controller/cyclenoderequest/transitioner/test_helpers.go @@ -1,16 +1,31 @@ -package faketransitioner +package transitioner import ( "net/http" v1 "github.com/atlassian-labs/cyclops/pkg/apis/atlassian/v1" "github.com/atlassian-labs/cyclops/pkg/controller" - "github.com/atlassian-labs/cyclops/pkg/controller/cyclenoderequest/transitioner" "github.com/atlassian-labs/cyclops/pkg/mock" ) +type Option func(t *Transitioner) + +func WithCloudProviderInstances(nodes []*mock.Node) Option { + return func(t *Transitioner) { + t.cloudProviderInstances = append(t.cloudProviderInstances, nodes...) + } +} + +func WithKubeNodes(nodes []*mock.Node) Option { + return func(t *Transitioner) { + t.kubeNodes = append(t.kubeNodes, nodes...) + } +} + +// ************************************************************************** // + type Transitioner struct { - *transitioner.CycleNodeRequestTransitioner + *CycleNodeRequestTransitioner *mock.Client cloudProviderInstances []*mock.Node @@ -38,8 +53,8 @@ func NewFakeTransitioner(cnr *v1.CycleNodeRequest, opts ...Option) *Transitioner CloudProvider: t.CloudProvider, } - t.CycleNodeRequestTransitioner = transitioner.NewCycleNodeRequestTransitioner( - cnr, rm, transitioner.Options{}, + t.CycleNodeRequestTransitioner = NewCycleNodeRequestTransitioner( + cnr, rm, Options{}, ) return t diff --git a/pkg/controller/cyclenoderequest/transitioner/fake/pending_test.go b/pkg/controller/cyclenoderequest/transitioner/transitions_pending_test.go similarity index 85% rename from pkg/controller/cyclenoderequest/transitioner/fake/pending_test.go rename to pkg/controller/cyclenoderequest/transitioner/transitions_pending_test.go index 2c45fb1..9c85f63 100644 --- a/pkg/controller/cyclenoderequest/transitioner/fake/pending_test.go +++ b/pkg/controller/cyclenoderequest/transitioner/transitions_pending_test.go @@ -1,4 +1,4 @@ -package faketransitioner +package transitioner import ( "testing" @@ -59,6 +59,55 @@ func TestPendingSimpleCase(t *testing.T) { assert.Equal(t, cnr.Status.NumNodesCycled, 0) } +// Test to ensure the Pending phase will accept a CNR with a correct named node. +func TestPendingWithNamedNode(t *testing.T) { + nodegroup, err := mock.NewNodegroup("ng-1", 2) + if err != nil { + assert.NoError(t, err) + } + + cnr := &v1.CycleNodeRequest{ + ObjectMeta: metav1.ObjectMeta{ + Name: "cnr-1", + Namespace: "kube-system", + }, + Spec: v1.CycleNodeRequestSpec{ + NodeGroupsList: []string{"ng-1"}, + CycleSettings: v1.CycleSettings{ + Concurrency: 1, + Method: v1.CycleNodeRequestMethodDrain, + }, + Selector: metav1.LabelSelector{ + MatchLabels: map[string]string{ + "customer": "kitt", + }, + }, + NodeNames: []string{ + "ng-1-node-0", + }, + }, + Status: v1.CycleNodeRequestStatus{ + Phase: v1.CycleNodeRequestPending, + }, + } + + fakeTransitioner := NewFakeTransitioner(cnr, + WithKubeNodes(nodegroup), + WithCloudProviderInstances(nodegroup), + ) + + result, err := fakeTransitioner.Run() + assert.NoError(t, err) + assert.True(t, result.Requeue) + + // It should move to the Initialised phase and set up the status of the CNR + // in a predictable manner + assert.Equal(t, v1.CycleNodeRequestInitialised, cnr.Status.Phase) + assert.Len(t, cnr.Status.NodesToTerminate, 1) + assert.Equal(t, cnr.Status.ActiveChildren, int64(0)) + assert.Equal(t, cnr.Status.NumNodesCycled, 0) +} + // Test to ensure the Pending phase will reject a CNR with a named node that // does not match any of the nodes matching the node selector. It should error // out immediately. @@ -228,9 +277,9 @@ func TestPendingDetachedCloudProviderNode(t *testing.T) { assert.NoError(t, err) assert.Equal(t, v1.CycleNodeRequestPending, cnr.Status.Phase) - // Simulate waiting for 1 day, this is more than the waiting limit + // Simulate waiting for 1s more than the wait limit cnr.Status.EquilibriumWaitStarted = &metav1.Time{ - Time: time.Now().Add(-24 * time.Hour), + Time: time.Now().Add(-nodeEquilibriumWaitLimit - time.Second), } // This time should transition to the healing phase diff --git a/pkg/mock/test_helper.go b/pkg/mock/test_helpers.go similarity index 100% rename from pkg/mock/test_helper.go rename to pkg/mock/test_helpers.go