Skip to content

Commit c5d2f5e

Browse files
Add clone for MachineHealthCheck Builders
Signed-off-by: killianmuldoon <[email protected]>
1 parent 31fb217 commit c5d2f5e

File tree

2 files changed

+51
-144
lines changed

2 files changed

+51
-144
lines changed

internal/controllers/topology/cluster/reconcile_state_test.go

Lines changed: 35 additions & 144 deletions
Original file line numberDiff line numberDiff line change
@@ -1775,6 +1775,18 @@ func TestReconcileMachineDeploymentMachineHealthCheck(t *testing.T) {
17751775
Build()
17761776

17771777
maxUnhealthy := intstr.Parse("45%")
1778+
// TODO: (killianmuldoon) This builder should be copied and not just passed around.
1779+
mhcBuilder := builder.MachineHealthCheck(metav1.NamespaceDefault, "md-1").
1780+
WithSelector(*selectorForMachineDeploymentMHC(md)).
1781+
WithUnhealthyConditions([]clusterv1.UnhealthyCondition{
1782+
{
1783+
Type: corev1.NodeReady,
1784+
Status: corev1.ConditionUnknown,
1785+
Timeout: metav1.Duration{Duration: 5 * time.Minute},
1786+
},
1787+
}).
1788+
WithOwnerReferences([]metav1.OwnerReference{*ownerReferenceTo(md)}).
1789+
WithClusterName("cluster1")
17781790

17791791
infrastructureMachineTemplate := builder.InfrastructureMachineTemplate(metav1.NamespaceDefault, "infrastructure-machine-1").Build()
17801792
bootstrapTemplate := builder.BootstrapTemplate(metav1.NamespaceDefault, "bootstrap-config-1").Build()
@@ -1790,31 +1802,10 @@ func TestReconcileMachineDeploymentMachineHealthCheck(t *testing.T) {
17901802
current: nil,
17911803
desired: []*scope.MachineDeploymentState{
17921804
newFakeMachineDeploymentTopologyState("md-1", infrastructureMachineTemplate, bootstrapTemplate,
1793-
builder.MachineHealthCheck(metav1.NamespaceDefault, "md-1").
1794-
WithSelector(*selectorForMachineDeploymentMHC(md)).
1795-
WithUnhealthyConditions([]clusterv1.UnhealthyCondition{
1796-
{
1797-
Type: corev1.NodeReady,
1798-
Status: corev1.ConditionUnknown,
1799-
Timeout: metav1.Duration{Duration: 5 * time.Minute},
1800-
},
1801-
}).
1802-
WithOwnerReferences([]metav1.OwnerReference{*ownerReferenceTo(md)}).
1803-
WithClusterName("cluster1").
1804-
Build()),
1805+
mhcBuilder.Clone().Build()),
18051806
},
18061807
want: []*clusterv1.MachineHealthCheck{
1807-
builder.MachineHealthCheck(metav1.NamespaceDefault, "md-1").
1808-
WithSelector(*selectorForMachineDeploymentMHC(md)).
1809-
WithUnhealthyConditions([]clusterv1.UnhealthyCondition{
1810-
{
1811-
Type: corev1.NodeReady,
1812-
Status: corev1.ConditionUnknown,
1813-
Timeout: metav1.Duration{Duration: 5 * time.Minute},
1814-
},
1815-
}).
1816-
WithOwnerReferences([]metav1.OwnerReference{*ownerReferenceTo(md)}).
1817-
WithClusterName("cluster1").
1808+
mhcBuilder.
18181809
WithOwnerReferences([]metav1.OwnerReference{*ownerReferenceTo(md)}).
18191810
Build()},
18201811
},
@@ -1826,95 +1817,29 @@ func TestReconcileMachineDeploymentMachineHealthCheck(t *testing.T) {
18261817
// MHC is added in the desired state of the MachineDeployment
18271818
desired: []*scope.MachineDeploymentState{
18281819
newFakeMachineDeploymentTopologyState("md-1", infrastructureMachineTemplate, bootstrapTemplate,
1829-
builder.MachineHealthCheck(metav1.NamespaceDefault, "md-1").
1830-
WithSelector(*selectorForMachineDeploymentMHC(md)).
1831-
WithUnhealthyConditions([]clusterv1.UnhealthyCondition{
1832-
{
1833-
Type: corev1.NodeReady,
1834-
Status: corev1.ConditionUnknown,
1835-
Timeout: metav1.Duration{Duration: 5 * time.Minute},
1836-
},
1837-
}).
1838-
WithOwnerReferences([]metav1.OwnerReference{*ownerReferenceTo(md)}).
1839-
WithClusterName("cluster1").
1840-
Build()),
1820+
mhcBuilder.Clone().Build()),
18411821
},
18421822
want: []*clusterv1.MachineHealthCheck{
1843-
builder.MachineHealthCheck(metav1.NamespaceDefault, "md-1").
1844-
WithSelector(*selectorForMachineDeploymentMHC(md)).
1845-
WithUnhealthyConditions([]clusterv1.UnhealthyCondition{
1846-
{
1847-
Type: corev1.NodeReady,
1848-
Status: corev1.ConditionUnknown,
1849-
Timeout: metav1.Duration{Duration: 5 * time.Minute},
1850-
},
1851-
}).
1852-
WithOwnerReferences([]metav1.OwnerReference{*ownerReferenceTo(md)}).
1853-
WithClusterName("cluster1").
1854-
WithOwnerReferences([]metav1.OwnerReference{*ownerReferenceTo(md)}).
1855-
Build()}},
1823+
mhcBuilder.Clone().Build()}},
18561824
{
18571825
name: "Update MachineHealthCheck spec adding a field if the spec adds a field",
18581826
current: []*scope.MachineDeploymentState{
1859-
newFakeMachineDeploymentTopologyState("md-1", infrastructureMachineTemplate, bootstrapTemplate,
1860-
builder.MachineHealthCheck(metav1.NamespaceDefault, "md-1").
1861-
WithSelector(*selectorForMachineDeploymentMHC(md)).
1862-
WithUnhealthyConditions([]clusterv1.UnhealthyCondition{
1863-
{
1864-
Type: corev1.NodeReady,
1865-
Status: corev1.ConditionUnknown,
1866-
Timeout: metav1.Duration{Duration: 5 * time.Minute},
1867-
},
1868-
}).
1869-
WithOwnerReferences([]metav1.OwnerReference{*ownerReferenceTo(md)}).
1870-
WithClusterName("cluster1").
1871-
Build()),
1827+
newFakeMachineDeploymentTopologyState("md-1", infrastructureMachineTemplate, bootstrapTemplate, mhcBuilder.Clone().Build()),
18721828
},
18731829
desired: []*scope.MachineDeploymentState{
18741830
newFakeMachineDeploymentTopologyState("md-1", infrastructureMachineTemplate, bootstrapTemplate,
1875-
builder.MachineHealthCheck(metav1.NamespaceDefault, "md-1").
1876-
WithSelector(*selectorForMachineDeploymentMHC(md)).
1877-
WithUnhealthyConditions([]clusterv1.UnhealthyCondition{
1878-
{
1879-
Type: corev1.NodeReady,
1880-
Status: corev1.ConditionUnknown,
1881-
Timeout: metav1.Duration{Duration: 5 * time.Minute},
1882-
},
1883-
}).
1884-
WithOwnerReferences([]metav1.OwnerReference{*ownerReferenceTo(md)}).
1885-
WithClusterName("cluster1").WithMaxUnhealthy(&maxUnhealthy).
1886-
Build())},
1831+
mhcBuilder.Clone().WithMaxUnhealthy(&maxUnhealthy).Build())},
18871832
want: []*clusterv1.MachineHealthCheck{
1888-
builder.MachineHealthCheck(metav1.NamespaceDefault, "md-1").
1889-
WithSelector(*selectorForMachineDeploymentMHC(md)).
1890-
WithUnhealthyConditions([]clusterv1.UnhealthyCondition{
1891-
{
1892-
Type: corev1.NodeReady,
1893-
Status: corev1.ConditionUnknown,
1894-
Timeout: metav1.Duration{Duration: 5 * time.Minute},
1895-
},
1896-
}).
1833+
mhcBuilder.Clone().
18971834
WithMaxUnhealthy(&maxUnhealthy).
18981835
WithClusterName("cluster1").
1899-
WithOwnerReferences([]metav1.OwnerReference{*ownerReferenceTo(md)}).
19001836
Build()},
19011837
},
19021838
{
19031839
name: "Update MachineHealthCheck spec removing a field if the spec removes a field",
19041840
current: []*scope.MachineDeploymentState{
19051841
newFakeMachineDeploymentTopologyState("md-1", infrastructureMachineTemplate, bootstrapTemplate,
1906-
builder.MachineHealthCheck(metav1.NamespaceDefault, "md-1").
1907-
WithSelector(*selectorForMachineDeploymentMHC(md)).
1908-
WithUnhealthyConditions([]clusterv1.UnhealthyCondition{
1909-
{
1910-
Type: corev1.NodeReady,
1911-
Status: corev1.ConditionUnknown,
1912-
Timeout: metav1.Duration{Duration: 5 * time.Minute},
1913-
},
1914-
}).
1915-
WithOwnerReferences([]metav1.OwnerReference{*ownerReferenceTo(md)}).
1916-
WithClusterName("cluster1").WithMaxUnhealthy(&maxUnhealthy).
1917-
Build()),
1842+
mhcBuilder.Clone().WithMaxUnhealthy(&maxUnhealthy).Build()),
19181843
},
19191844
desired: []*scope.MachineDeploymentState{
19201845
newFakeMachineDeploymentTopologyState("md-1", infrastructureMachineTemplate, bootstrapTemplate,
@@ -1932,55 +1857,21 @@ func TestReconcileMachineDeploymentMachineHealthCheck(t *testing.T) {
19321857
Build()),
19331858
},
19341859
want: []*clusterv1.MachineHealthCheck{
1935-
builder.MachineHealthCheck(metav1.NamespaceDefault, "md-1").
1936-
WithSelector(*selectorForMachineDeploymentMHC(md)).
1937-
WithUnhealthyConditions([]clusterv1.UnhealthyCondition{
1938-
{
1939-
Type: corev1.NodeReady,
1940-
Status: corev1.ConditionUnknown,
1941-
Timeout: metav1.Duration{Duration: 5 * time.Minute},
1942-
},
1943-
}).
1944-
WithOwnerReferences([]metav1.OwnerReference{*ownerReferenceTo(md)}).
1945-
WithClusterName("cluster1").
1946-
Build()},
1860+
mhcBuilder.Clone().Build(),
1861+
},
19471862
},
19481863
{
19491864
name: "Delete MachineHealthCheck spec if the MachineDeployment is modified to remove an existing one",
19501865
current: []*scope.MachineDeploymentState{
1951-
newFakeMachineDeploymentTopologyState("md-1", infrastructureMachineTemplate, bootstrapTemplate,
1952-
builder.MachineHealthCheck(metav1.NamespaceDefault, "md-1").
1953-
WithSelector(*selectorForMachineDeploymentMHC(md)).
1954-
WithUnhealthyConditions([]clusterv1.UnhealthyCondition{
1955-
{
1956-
Type: corev1.NodeReady,
1957-
Status: corev1.ConditionUnknown,
1958-
Timeout: metav1.Duration{Duration: 5 * time.Minute},
1959-
},
1960-
}).
1961-
WithOwnerReferences([]metav1.OwnerReference{*ownerReferenceTo(md)}).
1962-
WithClusterName("cluster1").
1963-
Build()),
1866+
newFakeMachineDeploymentTopologyState("md-1", infrastructureMachineTemplate, bootstrapTemplate, mhcBuilder.Clone().Build()),
19641867
},
19651868
desired: []*scope.MachineDeploymentState{newFakeMachineDeploymentTopologyState("md-1", infrastructureMachineTemplate, bootstrapTemplate, nil)},
19661869
want: []*clusterv1.MachineHealthCheck{},
19671870
},
19681871
{
19691872
name: "Delete MachineHealthCheck spec if the MachineDeployment is deleted",
19701873
current: []*scope.MachineDeploymentState{
1971-
newFakeMachineDeploymentTopologyState("md-1", infrastructureMachineTemplate, bootstrapTemplate,
1972-
builder.MachineHealthCheck(metav1.NamespaceDefault, "md-1").
1973-
WithSelector(*selectorForMachineDeploymentMHC(md)).
1974-
WithUnhealthyConditions([]clusterv1.UnhealthyCondition{
1975-
{
1976-
Type: corev1.NodeReady,
1977-
Status: corev1.ConditionUnknown,
1978-
Timeout: metav1.Duration{Duration: 5 * time.Minute},
1979-
},
1980-
}).
1981-
WithOwnerReferences([]metav1.OwnerReference{*ownerReferenceTo(md)}).
1982-
WithClusterName("cluster1").
1983-
Build()),
1874+
newFakeMachineDeploymentTopologyState("md-1", infrastructureMachineTemplate, bootstrapTemplate, mhcBuilder.Clone().Build()),
19841875
},
19851876
desired: []*scope.MachineDeploymentState{},
19861877
want: []*clusterv1.MachineHealthCheck{},
@@ -2082,36 +1973,36 @@ func TestReconciler_reconcileMachineHealthCheck(t *testing.T) {
20821973
{
20831974
name: "Create a MachineHealthCheck",
20841975
current: nil,
2085-
desired: mhcBuilder.Build(),
2086-
want: mhcBuilder.Build(),
1976+
desired: mhcBuilder.Clone().Build(),
1977+
want: mhcBuilder.Clone().Build(),
20871978
},
20881979
{
20891980
name: "Successfully create a valid Ownerreference on the MachineHealthCheck",
20901981
current: nil,
20911982
// update the unhealthy conditions in the MachineHealthCheck
2092-
desired: mhcBuilder.
1983+
desired: mhcBuilder.Clone().
20931984
// Desired object has an incomplete owner reference which has no UID.
20941985
WithOwnerReferences([]metav1.OwnerReference{{Name: cp.GetName(), Kind: cp.GetKind(), APIVersion: cp.GetAPIVersion()}}).
20951986
Build(),
20961987
// Want a reconciled object with a full ownerReference including UID
2097-
want: mhcBuilder.
1988+
want: mhcBuilder.Clone().
20981989
WithOwnerReferences([]metav1.OwnerReference{{Name: cp.GetName(), Kind: cp.GetKind(), APIVersion: cp.GetAPIVersion(), UID: cp.GetUID()}}).
20991990
Build(),
21001991
wantErr: false,
21011992
},
21021993

21031994
{
21041995
name: "Update a MachineHealthCheck with changes",
2105-
current: mhcBuilder.Build(),
1996+
current: mhcBuilder.Clone().Build(),
21061997
// update the unhealthy conditions in the MachineHealthCheck
2107-
desired: mhcBuilder.WithUnhealthyConditions([]clusterv1.UnhealthyCondition{
1998+
desired: mhcBuilder.Clone().WithUnhealthyConditions([]clusterv1.UnhealthyCondition{
21081999
{
21092000
Type: corev1.NodeReady,
21102001
Status: corev1.ConditionUnknown,
21112002
Timeout: metav1.Duration{Duration: 1000 * time.Minute},
21122003
},
21132004
}).Build(),
2114-
want: mhcBuilder.WithUnhealthyConditions([]clusterv1.UnhealthyCondition{
2005+
want: mhcBuilder.Clone().WithUnhealthyConditions([]clusterv1.UnhealthyCondition{
21152006
{
21162007
Type: corev1.NodeReady,
21172008
Status: corev1.ConditionUnknown,
@@ -2121,14 +2012,14 @@ func TestReconciler_reconcileMachineHealthCheck(t *testing.T) {
21212012
},
21222013
{
21232014
name: "Don't change a MachineHealthCheck with no difference between desired and current",
2124-
current: mhcBuilder.Build(),
2015+
current: mhcBuilder.Clone().Build(),
21252016
// update the unhealthy conditions in the MachineHealthCheck
2126-
desired: mhcBuilder.Build(),
2127-
want: mhcBuilder.Build(),
2017+
desired: mhcBuilder.Clone().Build(),
2018+
want: mhcBuilder.Clone().Build(),
21282019
},
21292020
{
21302021
name: "Delete a MachineHealthCheck",
2131-
current: mhcBuilder.Build(),
2022+
current: mhcBuilder.Clone().Build(),
21322023
// update the unhealthy conditions in the MachineHealthCheck
21332024
desired: nil,
21342025
want: nil,

internal/test/builder/builders.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -990,3 +990,19 @@ func (m *MachineHealthCheckBuilder) Build() *clusterv1.MachineHealthCheck {
990990
},
991991
}
992992
}
993+
994+
// Clone returns a copy of the MachineHealthCheckBuilder.
995+
func (m *MachineHealthCheckBuilder) Clone() *MachineHealthCheckBuilder {
996+
out := &MachineHealthCheckBuilder{
997+
name: m.name,
998+
namespace: m.namespace,
999+
clusterName: m.clusterName,
1000+
selector: *m.selector.DeepCopy(),
1001+
maxUnhealthy: m.maxUnhealthy,
1002+
}
1003+
copy(m.conditions, out.conditions)
1004+
for _, ref := range m.ownerRefs {
1005+
out.ownerRefs = append(out.ownerRefs, *ref.DeepCopy())
1006+
}
1007+
return out
1008+
}

0 commit comments

Comments
 (0)