Skip to content

Commit e713d68

Browse files
authored
Add initial operator unit tests (#172)
1 parent 07a4b71 commit e713d68

File tree

2 files changed

+70
-3
lines changed

2 files changed

+70
-3
lines changed

capi_janitor/openstack/operator.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -349,13 +349,21 @@ async def wrapper(**kwargs):
349349
@retry_event
350350
async def on_openstackcluster_event(
351351
name, namespace, meta, labels, spec, logger, **kwargs
352+
):
353+
_on_openstackcluster_event_impl(
354+
name, namespace, meta, labels, spec, logger, **kwargs
355+
)
356+
357+
358+
async def _on_openstackcluster_event_impl(
359+
name, namespace, meta, labels, spec, logger, **kwargs
352360
):
353361
"""
354362
Executes whenever an event occurs for an OpenStack cluster.
355363
"""
356364
# Get the resource for manipulating OpenStackClusters at the preferred version
357-
capoapi = await ekclient.api_preferred_version(CAPO_API_GROUP)
358-
openstackclusters = await capoapi.resource("openstackclusters")
365+
openstackclusters = await _get_os_cluster_client()
366+
359367
# Use the value of the `cluster.x-k8s.io/cluster-name` label as the cluster name if it exists,
360368
# otherwise, fall back to the OpenStackCluster resource name.
361369
clustername = labels.get("cluster.x-k8s.io/cluster-name", name)
@@ -376,6 +384,7 @@ async def on_openstackcluster_event(
376384

377385
# If our finalizer is not present, we don't do anything
378386
if FINALIZER not in finalizers:
387+
logger.info("janitor finalizer not present, skipping cleanup")
379388
return
380389

381390
# Get the cloud credential from the cluster and use it to delete dangling
@@ -440,3 +449,9 @@ async def on_openstackcluster_event(
440449
openstackclusters, name, namespace, [f for f in finalizers if f != FINALIZER]
441450
)
442451
logger.info("removed janitor finalizer from cluster")
452+
453+
454+
async def _get_os_cluster_client():
455+
capoapi = await ekclient.api_preferred_version(CAPO_API_GROUP)
456+
openstackclusters = await capoapi.resource("openstackclusters")
457+
return openstackclusters

capi_janitor/tests/openstack/test_operator.py

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,56 @@ async def test_operator(self):
1414

1515
await operator.on_cleanup()
1616

17-
mock_easykube.aclose.assert_awaited_once()
17+
mock_easykube.aclose.assert_awaited_once_with()
18+
19+
@mock.patch.object(operator, "patch_finalizers")
20+
@mock.patch.object(operator, "_get_os_cluster_client")
21+
async def test_on_openstackcluster_event_adds_finalizers(
22+
self, mock_get_client, mock_patch_finalizers
23+
):
24+
logger = mock.Mock()
25+
mock_get_client.return_value = "mock_client"
26+
27+
await operator._on_openstackcluster_event_impl(
28+
name="mycluster",
29+
namespace="default",
30+
meta={},
31+
labels={},
32+
spec={},
33+
logger=logger,
34+
body={},
35+
)
36+
37+
mock_patch_finalizers.assert_awaited_once_with(
38+
"mock_client", "mycluster", "default", ["janitor.capi.stackhpc.com"]
39+
)
40+
logger.debug.assert_has_calls(
41+
[mock.call("cluster name that will be used for cleanup: 'mycluster'")]
42+
)
43+
logger.info.assert_has_calls([mock.call("added janitor finalizer to cluster")])
44+
45+
@mock.patch.object(operator, "patch_finalizers")
46+
@mock.patch.object(operator, "_get_os_cluster_client")
47+
async def test_on_openstackcluster_event_skip_no_finalizers(
48+
self, mock_get_client, mock_patch_finalizers
49+
):
50+
logger = mock.Mock()
51+
mock_get_client.return_value = "mock_client"
52+
53+
await operator._on_openstackcluster_event_impl(
54+
name="mycluster",
55+
namespace="default",
56+
meta={"deletionTimestamp": "2023-10-01T00:00:00Z"},
57+
labels={},
58+
spec={},
59+
logger=logger,
60+
body={},
61+
)
62+
63+
mock_patch_finalizers.assert_not_awaited()
64+
logger.debug.assert_has_calls(
65+
[mock.call("cluster name that will be used for cleanup: 'mycluster'")]
66+
)
67+
logger.info.assert_has_calls(
68+
[mock.call("janitor finalizer not present, skipping cleanup")]
69+
)

0 commit comments

Comments
 (0)