diff --git a/src/robusta/integrations/kubernetes/base_event.py b/src/robusta/integrations/kubernetes/base_event.py index b29bdeb1f..c320f7ed3 100644 --- a/src/robusta/integrations/kubernetes/base_event.py +++ b/src/robusta/integrations/kubernetes/base_event.py @@ -26,6 +26,8 @@ def create_default_finding(self) -> Finding: return Finding( title=title, aggregation_key="GenericChange", + subject=self.get_subject(), + source=self.get_source(), ) @classmethod diff --git a/tests/test_change_filters.py b/tests/test_change_filters.py index 19c694992..8c2e31200 100644 --- a/tests/test_change_filters.py +++ b/tests/test_change_filters.py @@ -7,7 +7,11 @@ from hikaru.model.rel_1_26 import Deployment from robusta.core.model.k8s_operation_type import K8sOperationType -from robusta.integrations.kubernetes.autogenerated.events import KubernetesAnyChangeEvent +from robusta.core.reporting import FindingSource +from robusta.integrations.kubernetes.autogenerated.events import ( + DeploymentChangeEvent, + KubernetesAnyChangeEvent, +) from robusta.integrations.kubernetes.base_triggers import ( DEFAULT_CHANGE_FILTERS, DEFAULT_CHANGE_IGNORE, @@ -15,6 +19,7 @@ K8sBaseTrigger, K8sTriggerChangeFilters, ) +from robusta.integrations.kubernetes.custom_models import RobustaDeployment class TestK8sBaseTrigger: @@ -81,3 +86,23 @@ def test_check_change_filters_changes( assert diff.formatted_path == expected_change_path assert diff.other_value == old_value assert diff.value == expected_diff_new_value + + +class TestK8sBaseChangeEventDefaultFinding: + @pytest.fixture() + def event(self): + with open("tests/k8s_change_obj.json") as f: + data = json.loads(f.read()) + obj = hikaru.from_dict(data, RobustaDeployment) + return DeploymentChangeEvent(operation=K8sOperationType.UPDATE, old_obj=obj, obj=obj) + + def test_default_finding_keeps_subject_and_source(self, event): + finding = event.create_default_finding() + + assert finding.aggregation_key == "GenericChange" + assert finding.subject.namespace == "default" + assert finding.subject.name == "xxx-deployment" + assert finding.source == FindingSource.KUBERNETES_API_SERVER + # sink routing/grouping reads these, so they must not fall back to "None" + assert finding.attribute_map["namespace"] == "default" + assert finding.attribute_map["name"] == "xxx-deployment"