@@ -412,7 +412,7 @@ describe('TestAwsCloudWatchEmfExporter', () => {
412412
413413 expect ( result ) . toHaveProperty ( '_aws' ) ;
414414 expect ( result . _aws . CloudWatchMetrics [ 0 ] . Namespace ) . toEqual ( 'TestNamespace' ) ;
415- expect ( result . _aws . CloudWatchMetrics [ 0 ] . Dimensions [ 0 ] [ 0 ] ) . toEqual ( 'env' ) ;
415+ expect ( result . _aws . CloudWatchMetrics [ 0 ] . Dimensions ! [ 0 ] [ 0 ] ) . toEqual ( 'env' ) ;
416416 expect ( result . _aws . CloudWatchMetrics [ 0 ] . Metrics [ 0 ] . Name ) . toEqual ( 'gauge_metric' ) ;
417417 expect ( result . _aws . CloudWatchMetrics [ 0 ] . Metrics [ 0 ] . Unit ) . toEqual ( 'Count' ) ;
418418 expect ( result . _aws . CloudWatchMetrics [ 0 ] . Metrics [ 1 ] . Name ) . toEqual ( 'sum_metric' ) ;
@@ -672,10 +672,10 @@ describe('TestAwsCloudWatchEmfExporter', () => {
672672
673673 expect ( call1Args . logEvents . length ) . toEqual ( 0 ) ;
674674 expect ( call2Args . logEvents [ 0 ] . message ) . toMatch (
675- / ^ \{ " _ a w s " : \{ " T i m e s t a m p " : \d + , " C l o u d W a t c h M e t r i c s " : \[ \{ " N a m e s p a c e " : " T e s t N a m e s p a c e " , " D i m e n s i o n s " : \[ \[ " u n i q u e K e y 1 " \] \] , " M e t r i c s " : \[ \{ " N a m e " : " d e s c r i p t o r N a m e " , " U n i t " : " M i l l i s e c o n d s " \} \] \} \] } , " V e r s i o n " : " 1 " , " d e s c r i p t o r N a m e " : 3 , " u n i q u e K e y 1 " : " u n i q u e V a l u e 1 " \} $ /
675+ / ^ \{ " _ a w s " : \{ " T i m e s t a m p " : \d + , " C l o u d W a t c h M e t r i c s " : \[ \{ " N a m e s p a c e " : " T e s t N a m e s p a c e " , " M e t r i c s " : \[ \{ " N a m e " : " d e s c r i p t o r N a m e " , " U n i t " : " M i l l i s e c o n d s " \} \] , " D i m e n s i o n s " : \[ \[ " u n i q u e K e y 1 " \] \] \} \] } , " V e r s i o n " : " 1 " , " d e s c r i p t o r N a m e " : 3 , " u n i q u e K e y 1 " : " u n i q u e V a l u e 1 " \} $ /
676676 ) ;
677677 expect ( call3Args . logEvents [ 0 ] . message ) . toMatch (
678- / ^ \{ " _ a w s " : \{ " T i m e s t a m p " : \d + , " C l o u d W a t c h M e t r i c s " : \[ \{ " N a m e s p a c e " : " T e s t N a m e s p a c e " , " D i m e n s i o n s " : \[ \[ " u n i q u e K e y 2 " \] \] , " M e t r i c s " : \[ \{ " N a m e " : " d e s c r i p t o r N a m e " , " U n i t " : " M i l l i s e c o n d s " \} \] \} \] } , " V e r s i o n " : " 1 " , " d e s c r i p t o r N a m e " : 9 , " u n i q u e K e y 2 " : " u n i q u e V a l u e 2 " \} $ /
678+ / ^ \{ " _ a w s " : \{ " T i m e s t a m p " : \d + , " C l o u d W a t c h M e t r i c s " : \[ \{ " N a m e s p a c e " : " T e s t N a m e s p a c e " , " M e t r i c s " : \[ \{ " N a m e " : " d e s c r i p t o r N a m e " , " U n i t " : " M i l l i s e c o n d s " \} \] , " D i m e n s i o n s " : \[ \[ " u n i q u e K e y 2 " \] \] \} \] } , " V e r s i o n " : " 1 " , " d e s c r i p t o r N a m e " : 9 , " u n i q u e K e y 2 " : " u n i q u e V a l u e 2 " \} $ /
679679 ) ;
680680 resolve ( ) ;
681681 } ) ;
@@ -747,8 +747,42 @@ describe('TestAwsCloudWatchEmfExporter', () => {
747747 // Check CloudWatch metrics structure
748748 const cwMetrics = result . _aws . CloudWatchMetrics [ 0 ] ;
749749 expect ( cwMetrics . Namespace ) . toEqual ( 'TestNamespace' ) ;
750- expect ( cwMetrics . Dimensions [ 0 ] ) . toContain ( 'env' ) ;
751- expect ( cwMetrics . Dimensions [ 0 ] ) . toContain ( 'service' ) ;
750+ expect ( cwMetrics ) . toHaveProperty ( 'Dimensions' ) ;
751+ expect ( cwMetrics . Dimensions ! [ 0 ] ) . toContain ( 'env' ) ;
752+ expect ( cwMetrics . Dimensions ! [ 0 ] ) . toContain ( 'service' ) ;
753+ expect ( cwMetrics . Metrics [ 0 ] . Name ) . toEqual ( 'gauge_metric' ) ;
754+ } ) ;
755+
756+ it ( 'TestCreateEmfLogWithoutDimensions' , ( ) => {
757+ /* Test EMF log creation with metrics but no dimensions. */
758+ // Create test record with empty attributes (no dimensions)
759+ const gaugeRecord : MetricRecord = {
760+ ...exporter [ 'createMetricRecord' ] ( 'gauge_metric' , 'Count' , 'Gauge' , Date . now ( ) , { } ) ,
761+ value : 75.0 ,
762+ } ;
763+
764+ const records = [ gaugeRecord ] ;
765+ const resource = new Resource ( { 'service.name' : 'test-service' , 'service.version' : '1.0.0' } ) ;
766+
767+ const result = exporter [ 'createEmfLog' ] ( records , resource , 1234567890 ) ;
768+
769+ // Verify EMF log structure
770+ expect ( result ) . toHaveProperty ( '_aws' ) ;
771+ expect ( result . _aws ) . toHaveProperty ( 'CloudWatchMetrics' ) ;
772+ expect ( result . _aws . Timestamp ) . toEqual ( 1234567890 ) ;
773+ expect ( result . Version ) . toEqual ( '1' ) ;
774+
775+ // Check resource attributes are prefixed
776+ expect ( result [ 'otel.resource.service.name' ] ) . toEqual ( 'test-service' ) ;
777+ expect ( result [ 'otel.resource.service.version' ] ) . toEqual ( '1.0.0' ) ;
778+
779+ // Check metric value
780+ expect ( result . gauge_metric ) . toEqual ( 75.0 ) ;
781+
782+ // Check CloudWatch metrics structure
783+ const cwMetrics = result . _aws . CloudWatchMetrics [ 0 ] ;
784+ expect ( cwMetrics . Namespace ) . toEqual ( 'TestNamespace' ) ;
785+ expect ( cwMetrics ) . not . toHaveProperty ( 'Dimensions' ) ;
752786 expect ( cwMetrics . Metrics [ 0 ] . Name ) . toEqual ( 'gauge_metric' ) ;
753787 } ) ;
754788
0 commit comments