Skip to content

Commit 8ee18be

Browse files
author
Rahul Sharma
committed
fix unittests
1 parent 55eb23c commit 8ee18be

File tree

3 files changed

+26
-41
lines changed

3 files changed

+26
-41
lines changed

cloud/linode/instances_test.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import (
1717
cloudprovider "k8s.io/cloud-provider"
1818

1919
"github.com/linode/linode-cloud-controller-manager/cloud/linode/client/mocks"
20-
2120
)
2221

2322
const (

cloud/linode/node_controller.go

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,8 @@ type nodeController struct {
4444
metadataLastUpdate map[string]time.Time
4545
ttl time.Duration
4646

47-
queue workqueue.TypedDelayingInterface[any]
48-
47+
queue workqueue.TypedDelayingInterface[nodeRequest]
4948
nodeLastAdded map[string]time.Time
50-
lock sync.Mutex
5149
}
5250

5351
func newNodeController(kubeclient kubernetes.Interface, client client.Client, informer v1informers.NodeInformer, instanceCache *instances) *nodeController {
@@ -65,7 +63,7 @@ func newNodeController(kubeclient kubernetes.Interface, client client.Client, in
6563
informer: informer,
6664
ttl: timeout,
6765
metadataLastUpdate: make(map[string]time.Time),
68-
queue: workqueue.NewTypedDelayingQueueWithConfig[any](workqueue.TypedDelayingQueueConfig[any]{Name: "ccm_node"}),
66+
queue: workqueue.NewTypedDelayingQueueWithConfig(workqueue.TypedDelayingQueueConfig[nodeRequest]{Name: "ccm_node"}),
6967
nodeLastAdded: make(map[string]time.Time),
7068
}
7169
}
@@ -80,10 +78,7 @@ func (s *nodeController) Run(stopCh <-chan struct{}) {
8078
}
8179

8280
klog.Infof("NodeController will handle newly created node (%s) metadata", node.Name)
83-
s.lock.Lock()
84-
defer s.lock.Unlock()
85-
s.nodeLastAdded[node.Name] = time.Now()
86-
s.queue.Add(nodeRequest{node: node, timestamp: time.Now()})
81+
s.addNodeToQueue(node)
8782
},
8883
UpdateFunc: func(oldObj, newObj interface{}) {
8984
node, ok := newObj.(*v1.Node)
@@ -92,10 +87,7 @@ func (s *nodeController) Run(stopCh <-chan struct{}) {
9287
}
9388

9489
klog.Infof("NodeController will handle newly updated node (%s) metadata", node.Name)
95-
s.lock.Lock()
96-
defer s.lock.Unlock()
97-
s.nodeLastAdded[node.Name] = time.Now()
98-
s.queue.Add(nodeRequest{node: node, timestamp: time.Now()})
90+
s.addNodeToQueue(node)
9991
},
10092
},
10193
informerResyncPeriod,
@@ -107,6 +99,14 @@ func (s *nodeController) Run(stopCh <-chan struct{}) {
10799
s.informer.Informer().Run(stopCh)
108100
}
109101

102+
// addNodeToQueue adds a node to the queue for processing.
103+
func (s *nodeController) addNodeToQueue(node *v1.Node) {
104+
s.Lock()
105+
defer s.Unlock()
106+
s.nodeLastAdded[node.Name] = time.Now()
107+
s.queue.Add(nodeRequest{node: node, timestamp: time.Now()})
108+
}
109+
110110
// worker runs a worker thread that dequeues new or modified nodes and processes
111111
// metadata (host UUID) on each of them.
112112
func (s *nodeController) worker() {
@@ -115,21 +115,15 @@ func (s *nodeController) worker() {
115115
}
116116

117117
func (s *nodeController) processNext() bool {
118-
key, quit := s.queue.Get()
118+
request, quit := s.queue.Get()
119119
if quit {
120120
return false
121121
}
122-
defer s.queue.Done(key)
122+
defer s.queue.Done(request)
123123

124-
request, ok := key.(nodeRequest)
125-
if !ok {
126-
klog.Errorf("expected dequeued key to be of type nodeRequest but got %T", request)
127-
return true
128-
}
129-
130-
s.lock.Lock()
124+
s.RLock()
131125
latestTimestamp, exists := s.nodeLastAdded[request.node.Name]
132-
s.lock.Unlock()
126+
s.RUnlock()
133127
if !exists || request.timestamp.Before(latestTimestamp) {
134128
klog.V(3).InfoS("Skipping node metadata update as its not the most recent object", "node", klog.KObj(request.node))
135129
return true

cloud/linode/node_controller_test.go

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func TestNodeController_Run(t *testing.T) {
2828
client := mocks.NewMockClient(ctrl)
2929
kubeClient := fake.NewSimpleClientset()
3030
informer := informers.NewSharedInformerFactory(kubeClient, 0).Core().V1().Nodes()
31-
mockQueue := workqueue.NewTypedDelayingQueueWithConfig(workqueue.TypedDelayingQueueConfig[any]{Name: "test"})
31+
mockQueue := workqueue.NewTypedDelayingQueueWithConfig(workqueue.TypedDelayingQueueConfig[nodeRequest]{Name: "test"})
3232

3333
nodeCtrl := newNodeController(kubeClient, client, informer, newInstances(client))
3434
nodeCtrl.queue = mockQueue
@@ -68,7 +68,7 @@ func TestNodeController_processNext(t *testing.T) {
6868
defer ctrl.Finish()
6969
client := mocks.NewMockClient(ctrl)
7070
kubeClient := fake.NewSimpleClientset()
71-
queue := workqueue.NewTypedDelayingQueueWithConfig(workqueue.TypedDelayingQueueConfig[any]{Name: "testQueue"})
71+
queue := workqueue.NewTypedDelayingQueueWithConfig(workqueue.TypedDelayingQueueConfig[nodeRequest]{Name: "testQueue"})
7272
node := &v1.Node{
7373
ObjectMeta: metav1.ObjectMeta{
7474
Name: "test",
@@ -87,10 +87,11 @@ func TestNodeController_processNext(t *testing.T) {
8787
queue: queue,
8888
metadataLastUpdate: make(map[string]time.Time),
8989
ttl: defaultMetadataTTL,
90+
nodeLastAdded: make(map[string]time.Time),
9091
}
9192

9293
t.Run("should return no error on unknown errors", func(t *testing.T) {
93-
queue.Add(node)
94+
controller.addNodeToQueue(node)
9495
client.EXPECT().ListInstances(gomock.Any(), nil).Times(1).Return([]linodego.Instance{}, errors.New("lookup failed"))
9596
result := controller.processNext()
9697
assert.True(t, result, "processNext should return true")
@@ -100,7 +101,7 @@ func TestNodeController_processNext(t *testing.T) {
100101
})
101102

102103
t.Run("should return no error if node exists", func(t *testing.T) {
103-
queue.Add(node)
104+
controller.addNodeToQueue(node)
104105
publicIP := net.ParseIP("172.234.31.123")
105106
privateIP := net.ParseIP("192.168.159.135")
106107
client.EXPECT().ListInstances(gomock.Any(), nil).Times(1).Return([]linodego.Instance{
@@ -113,17 +114,8 @@ func TestNodeController_processNext(t *testing.T) {
113114
}
114115
})
115116

116-
t.Run("should return no error if queued object is not of type Node", func(t *testing.T) {
117-
queue.Add("abc")
118-
result := controller.processNext()
119-
assert.True(t, result, "processNext should return true")
120-
if queue.Len() != 0 {
121-
t.Errorf("expected queue to be empty, got %d items", queue.Len())
122-
}
123-
})
124-
125117
t.Run("should return no error if node in k8s doesn't exist", func(t *testing.T) {
126-
queue.Add(node)
118+
controller.addNodeToQueue(node)
127119
controller.kubeclient = fake.NewSimpleClientset()
128120
defer func() { controller.kubeclient = kubeClient }()
129121
result := controller.processNext()
@@ -134,9 +126,9 @@ func TestNodeController_processNext(t *testing.T) {
134126
})
135127

136128
t.Run("should return error and requeue when it gets 429 from linode API", func(t *testing.T) {
137-
queue = workqueue.NewTypedDelayingQueueWithConfig(workqueue.TypedDelayingQueueConfig[any]{Name: "testQueue1"})
138-
queue.Add(node)
129+
queue = workqueue.NewTypedDelayingQueueWithConfig(workqueue.TypedDelayingQueueConfig[nodeRequest]{Name: "testQueue1"})
139130
controller.queue = queue
131+
controller.addNodeToQueue(node)
140132
client := mocks.NewMockClient(ctrl)
141133
controller.instances = newInstances(client)
142134
retryInterval = 1 * time.Nanosecond
@@ -150,9 +142,9 @@ func TestNodeController_processNext(t *testing.T) {
150142
})
151143

152144
t.Run("should return error and requeue when it gets error >= 500 from linode API", func(t *testing.T) {
153-
queue = workqueue.NewTypedDelayingQueueWithConfig(workqueue.TypedDelayingQueueConfig[any]{Name: "testQueue2"})
154-
queue.Add(node)
145+
queue = workqueue.NewTypedDelayingQueueWithConfig(workqueue.TypedDelayingQueueConfig[nodeRequest]{Name: "testQueue2"})
155146
controller.queue = queue
147+
controller.addNodeToQueue(node)
156148
client := mocks.NewMockClient(ctrl)
157149
controller.instances = newInstances(client)
158150
retryInterval = 1 * time.Nanosecond

0 commit comments

Comments
 (0)