Skip to content

Commit 9949d93

Browse files
authored
Merge pull request #10052 from willie-yao/cc-scope-tests
🌱 Add unit tests for MachinePools in topology/scope package
2 parents 0f97f6f + c497c58 commit 9949d93

File tree

5 files changed

+720
-5
lines changed

5 files changed

+720
-5
lines changed

internal/controllers/topology/cluster/scope/state_test.go

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,17 @@ import (
2121
"testing"
2222

2323
. "github.com/onsi/gomega"
24+
corev1 "k8s.io/api/core/v1"
2425
"k8s.io/apimachinery/pkg/runtime"
2526
"sigs.k8s.io/controller-runtime/pkg/client"
2627
"sigs.k8s.io/controller-runtime/pkg/client/fake"
2728

2829
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
30+
expv1 "sigs.k8s.io/cluster-api/exp/api/v1beta1"
2931
"sigs.k8s.io/cluster-api/internal/test/builder"
3032
)
3133

32-
func TestUpgrading(t *testing.T) {
34+
func TestMDUpgrading(t *testing.T) {
3335
g := NewWithT(t)
3436
scheme := runtime.NewScheme()
3537
g.Expect(clusterv1.AddToScheme(scheme)).To(Succeed())
@@ -69,3 +71,65 @@ func TestUpgrading(t *testing.T) {
6971
g.Expect(got).To(BeComparableTo(want))
7072
})
7173
}
74+
75+
func TestMPUpgrading(t *testing.T) {
76+
g := NewWithT(t)
77+
scheme := runtime.NewScheme()
78+
g.Expect(expv1.AddToScheme(scheme)).To(Succeed())
79+
g.Expect(corev1.AddToScheme(scheme)).To(Succeed())
80+
81+
ctx := context.Background()
82+
83+
t.Run("should return the names of the upgrading MachinePools", func(*testing.T) {
84+
stableMP := builder.MachinePool("ns", "stableMP").
85+
WithClusterName("cluster1").
86+
WithVersion("v1.2.3").
87+
WithStatus(expv1.MachinePoolStatus{
88+
NodeRefs: []corev1.ObjectReference{
89+
{
90+
Name: "stableMP-node1",
91+
},
92+
},
93+
}).
94+
Build()
95+
stableMPNode := builder.Node("stableMP-node1").
96+
WithStatus(corev1.NodeStatus{
97+
NodeInfo: corev1.NodeSystemInfo{
98+
KubeletVersion: "v1.2.3",
99+
},
100+
}).
101+
Build()
102+
103+
upgradingMP := builder.MachinePool("ns", "upgradingMP").
104+
WithClusterName("cluster2").
105+
WithVersion("v1.2.3").
106+
WithStatus(expv1.MachinePoolStatus{
107+
NodeRefs: []corev1.ObjectReference{
108+
{
109+
Name: "upgradingMP-node1",
110+
},
111+
},
112+
}).
113+
Build()
114+
upgradingMPNode := builder.Node("upgradingMP-node1").
115+
WithStatus(corev1.NodeStatus{
116+
NodeInfo: corev1.NodeSystemInfo{
117+
KubeletVersion: "v1.2.2",
118+
},
119+
}).
120+
Build()
121+
122+
objs := []client.Object{stableMP, stableMPNode, upgradingMP, upgradingMPNode}
123+
fakeClient := fake.NewClientBuilder().WithObjects(objs...).WithScheme(scheme).Build()
124+
125+
mpsStateMap := MachinePoolsStateMap{
126+
"stableMP": {Object: stableMP},
127+
"upgradingMP": {Object: upgradingMP},
128+
}
129+
want := []string{"upgradingMP"}
130+
131+
got, err := mpsStateMap.Upgrading(ctx, fakeClient)
132+
g.Expect(err).ToNot(HaveOccurred())
133+
g.Expect(got).To(BeComparableTo(want))
134+
})
135+
}

internal/controllers/topology/cluster/scope/upgradetracker_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,12 @@ func TestNewUpgradeTracker(t *testing.T) {
3636
},
3737
{
3838
name: "should set the value of 1 if given concurrency is less than 1",
39-
options: []UpgradeTrackerOption{MaxMDUpgradeConcurrency(0)},
39+
options: []UpgradeTrackerOption{MaxMDUpgradeConcurrency(0), MaxMPUpgradeConcurrency(0)},
4040
want: 1,
4141
},
4242
{
4343
name: "should set the value to the given concurrency if the value is greater than 0",
44-
options: []UpgradeTrackerOption{MaxMDUpgradeConcurrency(2)},
44+
options: []UpgradeTrackerOption{MaxMDUpgradeConcurrency(2), MaxMPUpgradeConcurrency(2)},
4545
want: 2,
4646
},
4747
}
@@ -50,6 +50,7 @@ func TestNewUpgradeTracker(t *testing.T) {
5050
g := NewWithT(t)
5151
got := NewUpgradeTracker(tt.options...)
5252
g.Expect(got.MachineDeployments.maxUpgradeConcurrency).To(Equal(tt.want))
53+
g.Expect(got.MachinePools.maxUpgradeConcurrency).To(Equal(tt.want))
5354
}
5455
})
5556
}

internal/test/builder/builders.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1467,6 +1467,36 @@ func (c *TestControlPlaneBuilder) Build() *unstructured.Unstructured {
14671467
return c.obj
14681468
}
14691469

1470+
// NodeBuilder holds the variables required to build a Node.
1471+
type NodeBuilder struct {
1472+
name string
1473+
status corev1.NodeStatus
1474+
}
1475+
1476+
// Node returns a NodeBuilder.
1477+
func Node(name string) *NodeBuilder {
1478+
return &NodeBuilder{
1479+
name: name,
1480+
}
1481+
}
1482+
1483+
// WithStatus adds Status to the NodeBuilder.
1484+
func (n *NodeBuilder) WithStatus(status corev1.NodeStatus) *NodeBuilder {
1485+
n.status = status
1486+
return n
1487+
}
1488+
1489+
// Build produces a new Node from the information passed to the NodeBuilder.
1490+
func (n *NodeBuilder) Build() *corev1.Node {
1491+
obj := &corev1.Node{
1492+
ObjectMeta: metav1.ObjectMeta{
1493+
Name: n.name,
1494+
},
1495+
Status: n.status,
1496+
}
1497+
return obj
1498+
}
1499+
14701500
// MachinePoolBuilder holds the variables and objects needed to build a generic MachinePool.
14711501
type MachinePoolBuilder struct {
14721502
namespace string

internal/test/builder/zz_generated.deepcopy.go

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)