11package node
22
33import (
4+ "context"
45 "fmt"
56 "net"
67 "reflect"
@@ -10,11 +11,13 @@ import (
1011
1112 corev1 "k8s.io/api/core/v1"
1213 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
14+ "k8s.io/client-go/kubernetes/fake"
1315 "k8s.io/client-go/listers/core/v1"
1416 "k8s.io/client-go/tools/cache"
1517
1618 ovncnitypes "github.com/ovn-org/ovn-kubernetes/go-controller/pkg/cni/types"
1719 "github.com/ovn-org/ovn-kubernetes/go-controller/pkg/config"
20+ "github.com/ovn-org/ovn-kubernetes/go-controller/pkg/kube"
1821 ovntest "github.com/ovn-org/ovn-kubernetes/go-controller/pkg/testing"
1922 "github.com/ovn-org/ovn-kubernetes/go-controller/pkg/types"
2023 "github.com/ovn-org/ovn-kubernetes/go-controller/pkg/util"
@@ -288,6 +291,7 @@ func TestController_allocateNodeSubnets(t *testing.T) {
288291 na := & NodeAllocator {
289292 netInfo : netInfo ,
290293 clusterSubnetAllocator : NewSubnetAllocator (),
294+ nodeLister : newFakeNodeLister ([]* corev1.Node {}),
291295 }
292296
293297 if err := na .Init (); err != nil {
@@ -403,3 +407,44 @@ func newFakeNodeLister(nodes []*corev1.Node) v1.NodeLister {
403407 }
404408 return v1 .NewNodeLister (indexer )
405409}
410+
411+ func TestController_CleanupStaleAnnotation (t * testing.T ) {
412+ // create a node with an annotation that shouldn't be changed and one that should be cleaned up.
413+ newNode := & corev1.Node {
414+ ObjectMeta : metav1.ObjectMeta {
415+ Name : "node1" ,
416+ Annotations : map [string ]string {"leave-me" : "value" , util .OVNNodeGRLRPAddrs : "remove-me" },
417+ },
418+ }
419+ fakeClient := fake .NewClientset (newNode )
420+ kube := & kube.Kube {
421+ KClient : fakeClient ,
422+ }
423+
424+ netInfo , err := util .NewNetInfo (
425+ & ovncnitypes.NetConf {
426+ NetConf : cnitypes.NetConf {Name : types .DefaultNetworkName },
427+ },
428+ )
429+ if err != nil {
430+ t .Fatal (err )
431+ }
432+
433+ na := & NodeAllocator {
434+ nodeLister : newFakeNodeLister ([]* corev1.Node {newNode }),
435+ kube : kube ,
436+ netInfo : netInfo ,
437+ }
438+ na .CleanupStaleAnnotation ()
439+ nodes , err := fakeClient .CoreV1 ().Nodes ().List (context .TODO (), metav1.ListOptions {})
440+ if err != nil {
441+ t .Fatal (err )
442+ }
443+ if len (nodes .Items ) != 1 {
444+ t .Fatalf ("Expected 1 node, got %d" , len (nodes .Items ))
445+ }
446+ // check that unrelated annotation is not changed, and stale one is cleaned up
447+ if ! reflect .DeepEqual (nodes .Items [0 ].Annotations , map [string ]string {"leave-me" : "value" }) {
448+ t .Fatalf ("Expected annotation %s to be cleaned up, got %v" , util .OVNNodeGRLRPAddrs , nodes .Items [0 ].Annotations )
449+ }
450+ }
0 commit comments