From e1bfb2f88e87d1de16fea393155dc0a35a05ad6a Mon Sep 17 00:00:00 2001 From: heitorlessa Date: Mon, 10 Oct 2022 17:50:52 +0200 Subject: [PATCH 1/3] fix(metrics): ensure dimension_set pointer follows class var --- aws_lambda_powertools/metrics/metrics.py | 3 ++- tests/functional/test_metrics.py | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/aws_lambda_powertools/metrics/metrics.py b/aws_lambda_powertools/metrics/metrics.py index 00e083d4a7f..cbf1d2eb2e2 100644 --- a/aws_lambda_powertools/metrics/metrics.py +++ b/aws_lambda_powertools/metrics/metrics.py @@ -77,7 +77,8 @@ def __init__(self, service: Optional[str] = None, namespace: Optional[str] = Non self.namespace: Optional[str] = namespace self.metadata_set = self._metadata self.default_dimensions = self._default_dimensions - self.dimension_set = {**self._default_dimensions, **self._dimensions} + self.dimension_set = self._dimensions + self.dimension_set.update(**self._default_dimensions) super().__init__( metric_set=self.metric_set, diff --git a/tests/functional/test_metrics.py b/tests/functional/test_metrics.py index e0ce7f84dc9..a6afb73cea2 100644 --- a/tests/functional/test_metrics.py +++ b/tests/functional/test_metrics.py @@ -898,3 +898,16 @@ def lambda_handler(evt, ctx): # THEN we should have default dimensions in both outputs assert "environment" in first_invocation assert "environment" in second_invocation + + +def test_metrics_reuse_dimension_set(metric, dimension, namespace): + # GIVEN Metrics is initialized + my_metrics = Metrics(namespace=namespace) + my_metrics.add_dimension(**dimension) + my_metrics.add_metric(**metric) + + # WHEN Metrics is initialized one more time + my_metrics_2 = Metrics(namespace=namespace) + + # THEN Both class instances should have the same dimension set + assert my_metrics_2.dimension_set == my_metrics.dimension_set From 10d9f850cad9209f3ca621bf4a2ee5d8462eb7d1 Mon Sep 17 00:00:00 2001 From: heitorlessa Date: Mon, 10 Oct 2022 17:56:11 +0200 Subject: [PATCH 2/3] fix(metrics): add tests for metadata reuse to prevent regression like dimension --- tests/functional/test_metrics.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/functional/test_metrics.py b/tests/functional/test_metrics.py index a6afb73cea2..74819dee2e1 100644 --- a/tests/functional/test_metrics.py +++ b/tests/functional/test_metrics.py @@ -911,3 +911,17 @@ def test_metrics_reuse_dimension_set(metric, dimension, namespace): # THEN Both class instances should have the same dimension set assert my_metrics_2.dimension_set == my_metrics.dimension_set + + +def test_metrics_reuse_metadata_set(metric, dimension, namespace): + # GIVEN Metrics is initialized + my_metrics = Metrics(namespace=namespace) + my_metrics.add_dimension(**dimension) + my_metrics.add_metric(**metric) + my_metrics.add_metadata(key="meta", value="data") + + # WHEN Metrics is initialized one more time + my_metrics_2 = Metrics(namespace=namespace) + + # THEN Both class instances should have the same metadata set + assert my_metrics_2.metadata_set == my_metrics.metadata_set From 64d02a935ca704b073162bcef75c038778e95404 Mon Sep 17 00:00:00 2001 From: heitorlessa Date: Mon, 10 Oct 2022 17:57:02 +0200 Subject: [PATCH 3/3] chore(metrics): improve test bdd --- tests/functional/test_metrics.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/functional/test_metrics.py b/tests/functional/test_metrics.py index 74819dee2e1..96dd3b41b25 100644 --- a/tests/functional/test_metrics.py +++ b/tests/functional/test_metrics.py @@ -901,7 +901,7 @@ def lambda_handler(evt, ctx): def test_metrics_reuse_dimension_set(metric, dimension, namespace): - # GIVEN Metrics is initialized + # GIVEN Metrics is initialized with a metric and dimension my_metrics = Metrics(namespace=namespace) my_metrics.add_dimension(**dimension) my_metrics.add_metric(**metric) @@ -909,12 +909,12 @@ def test_metrics_reuse_dimension_set(metric, dimension, namespace): # WHEN Metrics is initialized one more time my_metrics_2 = Metrics(namespace=namespace) - # THEN Both class instances should have the same dimension set + # THEN both class instances should have the same dimension set assert my_metrics_2.dimension_set == my_metrics.dimension_set def test_metrics_reuse_metadata_set(metric, dimension, namespace): - # GIVEN Metrics is initialized + # GIVEN Metrics is initialized with a metric, dimension, and metadata my_metrics = Metrics(namespace=namespace) my_metrics.add_dimension(**dimension) my_metrics.add_metric(**metric) @@ -923,5 +923,5 @@ def test_metrics_reuse_metadata_set(metric, dimension, namespace): # WHEN Metrics is initialized one more time my_metrics_2 = Metrics(namespace=namespace) - # THEN Both class instances should have the same metadata set + # THEN both class instances should have the same metadata set assert my_metrics_2.metadata_set == my_metrics.metadata_set