11# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
22# SPDX-License-Identifier: Apache-2.0
33
4+ import os
45import unittest
5- from unittest .mock import Mock
6+ from unittest .mock import Mock , patch
67
78from amazon .opentelemetry .distro .exporter .aws .metrics .base_emf_exporter import BaseEmfExporter , MetricRecord
89from opentelemetry .sdk .metrics .export import MetricExportResult
@@ -300,6 +301,7 @@ def test_is_lambda_initialization(self):
300301 exporter = ConcreteEmfExporter (is_lambda = True )
301302 self .assertTrue (exporter ._is_lambda )
302303
304+ @patch .dict (os .environ , {"OTEL_AWS_APPLICATION_SIGNALS_ENABLED" : "true" })
303305 def test_create_emf_log_with_lambda_dimensions (self ):
304306 """Test EMF log creation includes Service and Environment dimensions in Lambda mode."""
305307 # Create Lambda exporter
@@ -357,6 +359,7 @@ def test_create_emf_log_without_lambda_dimensions(self):
357359 self .assertNotIn ("Service" , dimensions )
358360 self .assertNotIn ("Environment" , dimensions )
359361
362+ @patch .dict (os .environ , {"OTEL_AWS_APPLICATION_SIGNALS_ENABLED" : "true" })
360363 def test_create_emf_log_lambda_with_unknown_service (self ):
361364 """Test EMF log creation uses UnknownService when service.name is not set in Lambda mode."""
362365 lambda_exporter = ConcreteEmfExporter (namespace = "TestNamespace" , is_lambda = True )
@@ -376,6 +379,7 @@ def test_create_emf_log_lambda_with_unknown_service(self):
376379 self .assertEqual (result ["Service" ], "UnknownService" )
377380 self .assertEqual (result ["Environment" ], "lambda:default" )
378381
382+ @patch .dict (os .environ , {"OTEL_AWS_APPLICATION_SIGNALS_ENABLED" : "true" })
379383 def test_create_emf_log_lambda_with_none_resource (self ):
380384 """Test EMF log creation handles None resource in Lambda mode."""
381385 lambda_exporter = ConcreteEmfExporter (namespace = "TestNamespace" , is_lambda = True )
@@ -393,6 +397,52 @@ def test_create_emf_log_lambda_with_none_resource(self):
393397 self .assertEqual (result ["Service" ], "UnknownService" )
394398 self .assertEqual (result ["Environment" ], "lambda:default" )
395399
400+ def test_create_emf_log_lambda_without_application_signals_enabled (self ):
401+ """Test EMF log does NOT include Service/Environment when is_lambda=True but app signals disabled."""
402+ # Create Lambda exporter but without OTEL_AWS_APPLICATION_SIGNALS_ENABLED
403+ lambda_exporter = ConcreteEmfExporter (namespace = "TestNamespace" , is_lambda = True )
404+
405+ record = lambda_exporter ._create_metric_record ("test_metric" , "Count" , "Test" )
406+ record .value = 50.0
407+ record .timestamp = 1234567890
408+ record .attributes = {"env" : "test" }
409+
410+ records = [record ]
411+ resource = Resource .create ({"service.name" : "my-lambda-service" })
412+
413+ result = lambda_exporter ._create_emf_log (records , resource , 1234567890 )
414+
415+ # Service and Environment should NOT be added when app signals is disabled
416+ self .assertNotIn ("Service" , result )
417+ self .assertNotIn ("Environment" , result )
418+
419+ # Check that dimensions do NOT include Service and Environment
420+ cw_metrics = result ["_aws" ]["CloudWatchMetrics" ][0 ]
421+ dimensions = cw_metrics ["Dimensions" ][0 ]
422+ self .assertNotIn ("Service" , dimensions )
423+ self .assertNotIn ("Environment" , dimensions )
424+
425+ @patch .dict (os .environ , {"OTEL_AWS_APP_SIGNALS_ENABLED" : "true" })
426+ def test_create_emf_log_lambda_with_deprecated_app_signals_env_var (self ):
427+ """Test EMF log includes dimensions when using deprecated OTEL_AWS_APP_SIGNALS_ENABLED."""
428+ lambda_exporter = ConcreteEmfExporter (namespace = "TestNamespace" , is_lambda = True )
429+
430+ record = lambda_exporter ._create_metric_record ("test_metric" , "Count" , "Test" )
431+ record .value = 50.0
432+ record .timestamp = 1234567890
433+ record .attributes = {}
434+
435+ records = [record ]
436+ resource = Resource .create ({"service.name" : "my-service" })
437+
438+ result = lambda_exporter ._create_emf_log (records , resource , 1234567890 )
439+
440+ # Should add dimensions with deprecated env var
441+ self .assertIn ("Service" , result )
442+ self .assertEqual (result ["Service" ], "my-service" )
443+ self .assertIn ("Environment" , result )
444+ self .assertEqual (result ["Environment" ], "lambda:default" )
445+
396446
397447if __name__ == "__main__" :
398448 unittest .main ()
0 commit comments