@@ -39,6 +39,7 @@ import (
39
39
"go.uber.org/mock/gomock"
40
40
v1api "k8s.io/api/core/v1"
41
41
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
42
+ "k8s.io/client-go/kubernetes"
42
43
"k8s.io/client-go/kubernetes/fake"
43
44
44
45
"sigs.k8s.io/cloud-provider-azure/pkg/azclient"
@@ -1634,95 +1635,134 @@ func TestGetFileShareClientForSub(t *testing.T) {
1634
1635
}
1635
1636
1636
1637
func TestGetNodeInfoFromLabels (t * testing.T ) {
1637
- ctx := context .TODO ()
1638
-
1639
- // Test case where kubeClient is nil
1640
- _ , _ , err := getNodeInfoFromLabels (ctx , "test-node" , nil )
1641
- if err == nil || err .Error () != "kubeClient is nil" {
1642
- t .Fatalf ("expected error 'kubeClient is nil', got %v" , err )
1643
- }
1644
-
1645
- // Create a fake clientset
1646
- clientset := fake .NewSimpleClientset ()
1647
-
1648
- // Test case where the node does not exist
1649
- _ , _ , err = getNodeInfoFromLabels (ctx , "nonexistent-node" , clientset )
1650
- if err == nil {
1651
- t .Fatalf ("expected an error, got nil" )
1652
- }
1653
-
1654
- // Test case where node exists but has no labels
1655
- node := & v1api.Node {
1656
- ObjectMeta : metav1.ObjectMeta {
1657
- Name : "test-node" ,
1658
- Labels : map [string ]string {},
1638
+ testCases := []struct {
1639
+ name string
1640
+ nodeName string
1641
+ labels map [string ]string
1642
+ setupClient bool
1643
+ expectedVals [2 ]string
1644
+ expectedErr error
1645
+ }{
1646
+ {
1647
+ name : "Error when kubeClient is nil" ,
1648
+ nodeName : "test-node" ,
1649
+ setupClient : false ,
1650
+ expectedErr : fmt .Errorf ("kubeClient is nil" ),
1651
+ },
1652
+ {
1653
+ name : "Error when node does not exist" ,
1654
+ nodeName : "nonexistent-node" ,
1655
+ setupClient : true ,
1656
+ expectedErr : fmt .Errorf ("get node(nonexistent-node) failed with nodes \" nonexistent-node\" not found" ),
1657
+ },
1658
+ {
1659
+ name : "Error when node has no labels" ,
1660
+ nodeName : "test-node" ,
1661
+ setupClient : true ,
1662
+ labels : map [string ]string {}, // Node exists but has no labels
1663
+ expectedErr : fmt .Errorf ("node(test-node) label is empty" ),
1664
+ },
1665
+ {
1666
+ name : "Success with kata labels" ,
1667
+ nodeName : "test-node" ,
1668
+ setupClient : true ,
1669
+ labels : map [string ]string {
1670
+ "kubernetes.azure.com/kata-mshv-vm-isolation" : "true" ,
1671
+ "katacontainers.io/kata-runtime" : "false" ,
1672
+ },
1673
+ expectedVals : [2 ]string {"true" , "false" },
1674
+ expectedErr : nil ,
1659
1675
},
1660
- }
1661
- _ , err = clientset .CoreV1 ().Nodes ().Create (ctx , node , metav1.CreateOptions {})
1662
- if err != nil {
1663
- t .Fatalf ("expected no error, got %v" , err )
1664
1676
}
1665
1677
1666
- _ , _ , err = getNodeInfoFromLabels ( ctx , "test-node" , clientset )
1667
- if err == nil || err . Error () != "node(test-node) label is empty" {
1668
- t . Fatalf ( "expected error 'node(test-node) label is empty', got %v" , err )
1669
- }
1678
+ for _ , tc := range testCases {
1679
+ t . Run ( tc . name , func ( t * testing. T ) {
1680
+ ctx := context . TODO ( )
1681
+ var clientset kubernetes. Interface
1670
1682
1671
- // Test case where node has kata labels
1672
- node .Labels = map [string ]string {
1673
- "kubernetes.azure.com/kata-mshv-vm-isolation" : "true" ,
1674
- "katacontainers.io/kata-runtime" : "false" ,
1675
- }
1676
- _ , err = clientset .CoreV1 ().Nodes ().Update (ctx , node , metav1.UpdateOptions {})
1677
- if err != nil {
1678
- t .Fatalf ("expected no error, got %v" , err )
1679
- }
1683
+ if tc .setupClient {
1684
+ clientset = fake .NewSimpleClientset ()
1685
+ }
1680
1686
1681
- kataVMIsolation , kataRuntime , err := getNodeInfoFromLabels (ctx , "test-node" , clientset )
1682
- if err != nil {
1683
- t .Fatalf ("expected no error, got %v" , err )
1684
- }
1687
+ if tc .labels != nil && tc .setupClient {
1688
+ node := & v1api.Node {
1689
+ ObjectMeta : metav1.ObjectMeta {
1690
+ Name : tc .nodeName ,
1691
+ Labels : tc .labels ,
1692
+ },
1693
+ }
1694
+ _ , err := clientset .CoreV1 ().Nodes ().Create (ctx , node , metav1.CreateOptions {})
1695
+ assert .NoError (t , err )
1696
+ }
1697
+
1698
+ kataVMIsolation , kataRuntime , err := getNodeInfoFromLabels (ctx , tc .nodeName , clientset )
1685
1699
1686
- if kataVMIsolation != "true" || kataRuntime != "false" {
1687
- t .Fatalf ("expected (true, false), got (%v, %v)" , kataVMIsolation , kataRuntime )
1700
+ if tc .expectedErr != nil {
1701
+ assert .EqualError (t , err , tc .expectedErr .Error ())
1702
+ } else {
1703
+ assert .NoError (t , err )
1704
+ assert .Equal (t , tc .expectedVals [0 ], kataVMIsolation )
1705
+ assert .Equal (t , tc .expectedVals [1 ], kataRuntime )
1706
+ }
1707
+ })
1688
1708
}
1689
1709
}
1690
1710
1691
1711
func TestIsKataNode (t * testing.T ) {
1692
- ctx := context .TODO ()
1693
- clientset := fake .NewSimpleClientset ()
1694
-
1695
- // Test case where node does not exist
1696
- if isKataNode (ctx , "nonexistent-node" , clientset ) {
1697
- t .Fatalf ("expected false, got true" )
1698
- }
1699
-
1700
- // Create node without kata labels
1701
- node := & v1api.Node {
1702
- ObjectMeta : metav1.ObjectMeta {
1703
- Name : "test-node" ,
1704
- Labels : map [string ]string {
1712
+ testCases := []struct {
1713
+ name string
1714
+ nodeName string
1715
+ labels map [string ]string
1716
+ setupClient bool
1717
+ expected bool
1718
+ }{
1719
+ {
1720
+ name : "Node does not exist" ,
1721
+ nodeName : "" ,
1722
+ setupClient : true ,
1723
+ expected : false ,
1724
+ },
1725
+ {
1726
+ name : "Node exists but has no kata labels" ,
1727
+ nodeName : "test-node" ,
1728
+ setupClient : true ,
1729
+ labels : map [string ]string {
1705
1730
"some-other-label" : "value" ,
1706
1731
},
1732
+ expected : false ,
1733
+ },
1734
+ {
1735
+ name : "Node has kata labels" ,
1736
+ nodeName : "test-node" ,
1737
+ setupClient : true ,
1738
+ labels : map [string ]string {
1739
+ "kubernetes.azure.com/kata-mshv-vm-isolation" : "true" ,
1740
+ },
1741
+ expected : true ,
1707
1742
},
1708
- }
1709
- _ , err := clientset .CoreV1 ().Nodes ().Create (ctx , node , metav1.CreateOptions {})
1710
- if err != nil {
1711
- t .Fatalf ("expected no error, got %v" , err )
1712
1743
}
1713
1744
1714
- if isKataNode (ctx , "test-node" , clientset ) {
1715
- t .Fatalf ("expected false, got true" )
1716
- }
1745
+ for _ , tc := range testCases {
1746
+ t .Run (tc .name , func (t * testing.T ) {
1747
+ ctx := context .TODO ()
1748
+ var clientset kubernetes.Interface
1717
1749
1718
- // Update node with kata labels
1719
- node .Labels ["kubernetes.azure.com/kata-mshv-vm-isolation" ] = "true"
1720
- _ , err = clientset .CoreV1 ().Nodes ().Update (ctx , node , metav1.UpdateOptions {})
1721
- if err != nil {
1722
- t .Fatalf ("expected no error, got %v" , err )
1723
- }
1750
+ if tc .setupClient {
1751
+ clientset = fake .NewSimpleClientset ()
1752
+ }
1724
1753
1725
- if ! isKataNode (ctx , "test-node" , clientset ) {
1726
- t .Fatalf ("expected true, got false" )
1754
+ if tc .labels != nil && tc .setupClient {
1755
+ node := & v1api.Node {
1756
+ ObjectMeta : metav1.ObjectMeta {
1757
+ Name : tc .nodeName ,
1758
+ Labels : tc .labels ,
1759
+ },
1760
+ }
1761
+ _ , err := clientset .CoreV1 ().Nodes ().Create (ctx , node , metav1.CreateOptions {})
1762
+ assert .NoError (t , err )
1763
+ }
1764
+ result := isKataNode (ctx , tc .nodeName , clientset )
1765
+ assert .Equal (t , tc .expected , result )
1766
+ })
1727
1767
}
1728
1768
}
0 commit comments