Skip to content

Commit a55b48b

Browse files
Add clone for MachineHealthCheck Builders
Signed-off-by: killianmuldoon <[email protected]>
1 parent 474e312 commit a55b48b

File tree

5 files changed

+379
-157
lines changed

5 files changed

+379
-157
lines changed

Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,8 @@ generate-go-deepcopy-core: $(CONTROLLER_GEN) ## Generate deepcopy go code for co
206206
paths=./api/... \
207207
paths=./$(EXP_DIR)/api/... \
208208
paths=./$(EXP_DIR)/addons/api/... \
209-
paths=./cmd/clusterctl/...
209+
paths=./cmd/clusterctl/... \
210+
paths=./internal/test/builder/...
210211

211212
.PHONY: generate-go-deepcopy-kubeadm-bootstrap
212213
generate-go-deepcopy-kubeadm-bootstrap: $(CONTROLLER_GEN) ## Generate deepcopy go code for kubeadm bootstrap

internal/controllers/topology/cluster/reconcile_state_test.go

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

17771777
maxUnhealthy := intstr.Parse("45%")
1778+
mhcBuilder := builder.MachineHealthCheck(metav1.NamespaceDefault, "md-1").
1779+
WithSelector(*selectorForMachineDeploymentMHC(md)).
1780+
WithUnhealthyConditions([]clusterv1.UnhealthyCondition{
1781+
{
1782+
Type: corev1.NodeReady,
1783+
Status: corev1.ConditionUnknown,
1784+
Timeout: metav1.Duration{Duration: 5 * time.Minute},
1785+
},
1786+
}).
1787+
WithOwnerReferences([]metav1.OwnerReference{*ownerReferenceTo(md)}).
1788+
WithClusterName("cluster1")
17781789

17791790
infrastructureMachineTemplate := builder.InfrastructureMachineTemplate(metav1.NamespaceDefault, "infrastructure-machine-1").Build()
17801791
bootstrapTemplate := builder.BootstrapTemplate(metav1.NamespaceDefault, "bootstrap-config-1").Build()
@@ -1790,33 +1801,10 @@ func TestReconcileMachineDeploymentMachineHealthCheck(t *testing.T) {
17901801
current: nil,
17911802
desired: []*scope.MachineDeploymentState{
17921803
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()),
1804+
mhcBuilder.DeepCopy().Build()),
18051805
},
18061806
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").
1818-
WithOwnerReferences([]metav1.OwnerReference{*ownerReferenceTo(md)}).
1819-
Build()},
1807+
mhcBuilder.DeepCopy().Build()},
18201808
},
18211809
{
18221810
name: "Create a new MachineHealthCheck if the MachineDeployment is modified to include one",
@@ -1826,141 +1814,43 @@ func TestReconcileMachineDeploymentMachineHealthCheck(t *testing.T) {
18261814
// MHC is added in the desired state of the MachineDeployment
18271815
desired: []*scope.MachineDeploymentState{
18281816
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()),
1817+
mhcBuilder.DeepCopy().Build()),
18411818
},
18421819
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()}},
1820+
mhcBuilder.DeepCopy().Build()}},
18561821
{
18571822
name: "Update MachineHealthCheck spec adding a field if the spec adds a field",
18581823
current: []*scope.MachineDeploymentState{
18591824
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()),
1825+
mhcBuilder.DeepCopy().Build()),
18721826
},
18731827
desired: []*scope.MachineDeploymentState{
18741828
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())},
1829+
mhcBuilder.DeepCopy().WithMaxUnhealthy(&maxUnhealthy).Build())},
18871830
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-
}).
1831+
mhcBuilder.DeepCopy().
18971832
WithMaxUnhealthy(&maxUnhealthy).
1898-
WithClusterName("cluster1").
1899-
WithOwnerReferences([]metav1.OwnerReference{*ownerReferenceTo(md)}).
19001833
Build()},
19011834
},
19021835
{
19031836
name: "Update MachineHealthCheck spec removing a field if the spec removes a field",
19041837
current: []*scope.MachineDeploymentState{
19051838
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()),
1839+
mhcBuilder.DeepCopy().WithMaxUnhealthy(&maxUnhealthy).Build()),
19181840
},
19191841
desired: []*scope.MachineDeploymentState{
19201842
newFakeMachineDeploymentTopologyState("md-1", infrastructureMachineTemplate, bootstrapTemplate,
1921-
builder.MachineHealthCheck(metav1.NamespaceDefault, "md-1").
1922-
WithSelector(*selectorForMachineDeploymentMHC(md)).
1923-
WithUnhealthyConditions([]clusterv1.UnhealthyCondition{
1924-
{
1925-
Type: corev1.NodeReady,
1926-
Status: corev1.ConditionUnknown,
1927-
Timeout: metav1.Duration{Duration: 5 * time.Minute},
1928-
},
1929-
}).
1930-
WithOwnerReferences([]metav1.OwnerReference{*ownerReferenceTo(md)}).
1931-
WithClusterName("cluster1").
1932-
Build()),
1843+
mhcBuilder.DeepCopy().Build()),
19331844
},
19341845
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()},
1846+
mhcBuilder.DeepCopy().Build(),
1847+
},
19471848
},
19481849
{
19491850
name: "Delete MachineHealthCheck spec if the MachineDeployment is modified to remove an existing one",
19501851
current: []*scope.MachineDeploymentState{
19511852
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()),
1853+
mhcBuilder.DeepCopy().Build()),
19641854
},
19651855
desired: []*scope.MachineDeploymentState{newFakeMachineDeploymentTopologyState("md-1", infrastructureMachineTemplate, bootstrapTemplate, nil)},
19661856
want: []*clusterv1.MachineHealthCheck{},
@@ -1969,18 +1859,7 @@ func TestReconcileMachineDeploymentMachineHealthCheck(t *testing.T) {
19691859
name: "Delete MachineHealthCheck spec if the MachineDeployment is deleted",
19701860
current: []*scope.MachineDeploymentState{
19711861
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()),
1862+
mhcBuilder.DeepCopy().Build()),
19841863
},
19851864
desired: []*scope.MachineDeploymentState{},
19861865
want: []*clusterv1.MachineHealthCheck{},
@@ -2082,36 +1961,36 @@ func TestReconciler_reconcileMachineHealthCheck(t *testing.T) {
20821961
{
20831962
name: "Create a MachineHealthCheck",
20841963
current: nil,
2085-
desired: mhcBuilder.Build(),
2086-
want: mhcBuilder.Build(),
1964+
desired: mhcBuilder.DeepCopy().Build(),
1965+
want: mhcBuilder.DeepCopy().Build(),
20871966
},
20881967
{
20891968
name: "Successfully create a valid Ownerreference on the MachineHealthCheck",
20901969
current: nil,
20911970
// update the unhealthy conditions in the MachineHealthCheck
2092-
desired: mhcBuilder.
1971+
desired: mhcBuilder.DeepCopy().
20931972
// Desired object has an incomplete owner reference which has no UID.
20941973
WithOwnerReferences([]metav1.OwnerReference{{Name: cp.GetName(), Kind: cp.GetKind(), APIVersion: cp.GetAPIVersion()}}).
20951974
Build(),
20961975
// Want a reconciled object with a full ownerReference including UID
2097-
want: mhcBuilder.
1976+
want: mhcBuilder.DeepCopy().
20981977
WithOwnerReferences([]metav1.OwnerReference{{Name: cp.GetName(), Kind: cp.GetKind(), APIVersion: cp.GetAPIVersion(), UID: cp.GetUID()}}).
20991978
Build(),
21001979
wantErr: false,
21011980
},
21021981

21031982
{
21041983
name: "Update a MachineHealthCheck with changes",
2105-
current: mhcBuilder.Build(),
1984+
current: mhcBuilder.DeepCopy().Build(),
21061985
// update the unhealthy conditions in the MachineHealthCheck
2107-
desired: mhcBuilder.WithUnhealthyConditions([]clusterv1.UnhealthyCondition{
1986+
desired: mhcBuilder.DeepCopy().WithUnhealthyConditions([]clusterv1.UnhealthyCondition{
21081987
{
21091988
Type: corev1.NodeReady,
21101989
Status: corev1.ConditionUnknown,
21111990
Timeout: metav1.Duration{Duration: 1000 * time.Minute},
21121991
},
21131992
}).Build(),
2114-
want: mhcBuilder.WithUnhealthyConditions([]clusterv1.UnhealthyCondition{
1993+
want: mhcBuilder.DeepCopy().WithUnhealthyConditions([]clusterv1.UnhealthyCondition{
21151994
{
21161995
Type: corev1.NodeReady,
21171996
Status: corev1.ConditionUnknown,
@@ -2121,14 +2000,14 @@ func TestReconciler_reconcileMachineHealthCheck(t *testing.T) {
21212000
},
21222001
{
21232002
name: "Don't change a MachineHealthCheck with no difference between desired and current",
2124-
current: mhcBuilder.Build(),
2003+
current: mhcBuilder.DeepCopy().Build(),
21252004
// update the unhealthy conditions in the MachineHealthCheck
2126-
desired: mhcBuilder.Build(),
2127-
want: mhcBuilder.Build(),
2005+
desired: mhcBuilder.DeepCopy().Build(),
2006+
want: mhcBuilder.DeepCopy().Build(),
21282007
},
21292008
{
21302009
name: "Delete a MachineHealthCheck",
2131-
current: mhcBuilder.Build(),
2010+
current: mhcBuilder.DeepCopy().Build(),
21322011
// update the unhealthy conditions in the MachineHealthCheck
21332012
desired: nil,
21342013
want: nil,

internal/test/builder/builders.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,7 @@ func (m *MachineDeploymentClassBuilder) Build() *clusterv1.MachineDeploymentClas
394394
}
395395

396396
// InfrastructureMachineTemplateBuilder holds the variables and objects needed to build an InfrastructureMachineTemplate.
397+
// +kubebuilder:object:generate=false
397398
type InfrastructureMachineTemplateBuilder struct {
398399
namespace string
399400
name string
@@ -437,6 +438,7 @@ func (i *InfrastructureMachineTemplateBuilder) Build() *unstructured.Unstructure
437438
}
438439

439440
// BootstrapTemplateBuilder holds the variables needed to build a generic BootstrapTemplate.
441+
// +kubebuilder:object:generate=false
440442
type BootstrapTemplateBuilder struct {
441443
namespace string
442444
name string
@@ -473,6 +475,7 @@ func (b *BootstrapTemplateBuilder) Build() *unstructured.Unstructured {
473475
}
474476

475477
// InfrastructureClusterTemplateBuilder holds the variables needed to build a generic InfrastructureClusterTemplate.
478+
// +kubebuilder:object:generate=false
476479
type InfrastructureClusterTemplateBuilder struct {
477480
namespace string
478481
name string
@@ -517,6 +520,7 @@ func (i *InfrastructureClusterTemplateBuilder) Build() *unstructured.Unstructure
517520
}
518521

519522
// ControlPlaneTemplateBuilder holds the variables and objects needed to build a generic ControlPlane template.
523+
// +kubebuilder:object:generate=false
520524
type ControlPlaneTemplateBuilder struct {
521525
namespace string
522526
name string
@@ -573,6 +577,7 @@ func (c *ControlPlaneTemplateBuilder) Build() *unstructured.Unstructured {
573577
}
574578

575579
// InfrastructureClusterBuilder holds the variables and objects needed to build a generic InfrastructureCluster.
580+
// +kubebuilder:object:generate=false
576581
type InfrastructureClusterBuilder struct {
577582
namespace string
578583
name string
@@ -613,6 +618,7 @@ func (i *InfrastructureClusterBuilder) Build() *unstructured.Unstructured {
613618
}
614619

615620
// ControlPlaneBuilder holds the variables and objects needed to build a generic object for cluster.spec.controlPlaneRef.
621+
// +kubebuilder:object:generate=false
616622
type ControlPlaneBuilder struct {
617623
namespace string
618624
name string

internal/test/builder/doc.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,5 @@ limitations under the License.
1515
*/
1616

1717
// Package builder implements builder and CRDs for creating API objects for testing.
18+
// +kubebuilder:object:generate=true
1819
package builder

0 commit comments

Comments
 (0)