1+ import botocore .session
2+ from moto import mock_sqs
3+
4+ from opentelemetry .instrumentation .botocore import BotocoreInstrumentor
5+ from opentelemetry .semconv .trace import SpanAttributes
6+ from opentelemetry .test .test_base import TestBase
7+
8+
9+ class TestDynamoDbExtension (TestBase ):
10+ def setUp (self ):
11+ super ().setUp ()
12+ BotocoreInstrumentor ().instrument ()
13+
14+ session = botocore .session .get_session ()
15+ session .set_credentials (
16+ access_key = "access-key" , secret_key = "secret-key"
17+ )
18+ self .region = "us-west-2"
19+ self .client = session .create_client ("sqs" , region_name = self .region )
20+
21+ def tearDown (self ):
22+ super ().tearDown ()
23+ BotocoreInstrumentor ().uninstrument ()
24+
25+ @mock_sqs
26+ def test_sqs_messaging_send_message (self ):
27+ create_queue_result = self .client .create_queue (
28+ QueueName = "test_queue_name"
29+ )
30+ queue_url = create_queue_result ["QueueUrl" ]
31+ response = self .client .send_message (
32+ QueueUrl = queue_url , MessageBody = "content"
33+ )
34+
35+ spans = self .memory_exporter .get_finished_spans ()
36+ assert spans
37+ self .assertEqual (len (spans ), 2 )
38+ span = spans [1 ]
39+ self .assertEqual (
40+ span .attributes [SpanAttributes .MESSAGING_SYSTEM ], "aws.sqs"
41+ )
42+ self .assertEqual (
43+ span .attributes [SpanAttributes .MESSAGING_URL ], queue_url
44+ )
45+ self .assertEqual (
46+ span .attributes [SpanAttributes .MESSAGING_DESTINATION ],
47+ "test_queue_name" ,
48+ )
49+ self .assertEqual (
50+ span .attributes [SpanAttributes .MESSAGING_MESSAGE_ID ],
51+ response ["MessageId" ],
52+ )
53+
54+ @mock_sqs
55+ def test_sqs_messaging_send_message_batch (self ):
56+ create_queue_result = self .client .create_queue (
57+ QueueName = "test_queue_name"
58+ )
59+ queue_url = create_queue_result ["QueueUrl" ]
60+ response = self .client .send_message_batch (
61+ QueueUrl = queue_url ,
62+ Entries = [
63+ {"Id" : "1" , "MessageBody" : "content" },
64+ {"Id" : "2" , "MessageBody" : "content2" },
65+ ],
66+ )
67+
68+ spans = self .memory_exporter .get_finished_spans ()
69+ assert spans
70+ self .assertEqual (len (spans ), 2 )
71+ span = spans [1 ]
72+ self .assertEqual (span .attributes ["rpc.method" ], "SendMessageBatch" )
73+ self .assertEqual (
74+ span .attributes [SpanAttributes .MESSAGING_SYSTEM ], "aws.sqs"
75+ )
76+ self .assertEqual (
77+ span .attributes [SpanAttributes .MESSAGING_URL ], queue_url
78+ )
79+ self .assertEqual (
80+ span .attributes [SpanAttributes .MESSAGING_DESTINATION ],
81+ "test_queue_name" ,
82+ )
83+ self .assertEqual (
84+ span .attributes [SpanAttributes .MESSAGING_MESSAGE_ID ],
85+ response ["Successful" ][0 ]["MessageId" ],
86+ )
87+
88+ @mock_sqs
89+ def test_sqs_messaging_receive_message (self ):
90+ create_queue_result = self .client .create_queue (
91+ QueueName = "test_queue_name"
92+ )
93+ queue_url = create_queue_result ["QueueUrl" ]
94+ self .client .send_message (QueueUrl = queue_url , MessageBody = "content" )
95+ message_result = self .client .receive_message (
96+ QueueUrl = create_queue_result ["QueueUrl" ]
97+ )
98+
99+ spans = self .memory_exporter .get_finished_spans ()
100+ assert spans
101+ self .assertEqual (len (spans ), 3 )
102+ span = spans [- 1 ]
103+ self .assertEqual (span .attributes ["rpc.method" ], "ReceiveMessage" )
104+ self .assertEqual (
105+ span .attributes [SpanAttributes .MESSAGING_SYSTEM ], "aws.sqs"
106+ )
107+ self .assertEqual (
108+ span .attributes [SpanAttributes .MESSAGING_URL ], queue_url
109+ )
110+ self .assertEqual (
111+ span .attributes [SpanAttributes .MESSAGING_DESTINATION ],
112+ "test_queue_name" ,
113+ )
114+ self .assertEqual (
115+ span .attributes [SpanAttributes .MESSAGING_MESSAGE_ID ],
116+ message_result ["Messages" ][0 ]["MessageId" ],
117+ )
118+
119+ @mock_sqs
120+ def test_sqs_messaging_failed_operation (self ):
121+ with self .assertRaises (Exception ):
122+ self .client .send_message (
123+ QueueUrl = "non-existing" , MessageBody = "content"
124+ )
125+
126+ spans = self .memory_exporter .get_finished_spans ()
127+ assert spans
128+ self .assertEqual (len (spans ), 1 )
129+ span = spans [0 ]
130+ self .assertEqual (span .attributes ["rpc.method" ], "SendMessage" )
131+ self .assertEqual (
132+ span .attributes [SpanAttributes .MESSAGING_SYSTEM ], "aws.sqs"
133+ )
134+ self .assertEqual (
135+ span .attributes [SpanAttributes .MESSAGING_URL ], "non-existing"
136+ )
0 commit comments