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