25
25
26
26
from .consts import (
27
27
CHANNEL ,
28
- CONNECTION ,
28
+ CONNECTION_7 ,
29
+ CONNECTION_8 ,
29
30
CORRELATION_ID ,
30
31
EXCHANGE_NAME ,
31
32
MESSAGE ,
37
38
)
38
39
39
40
40
- class TestInstrumentedExchange (TestCase ):
41
+ class TestInstrumentedExchangeAioRmq7 (TestCase ):
41
42
EXPECTED_ATTRIBUTES = {
42
43
SpanAttributes .MESSAGING_SYSTEM : MESSAGING_SYSTEM ,
43
44
SpanAttributes .MESSAGING_DESTINATION : f"{ EXCHANGE_NAME } ,{ ROUTING_KEY } " ,
@@ -54,7 +55,7 @@ def setUp(self):
54
55
asyncio .set_event_loop (self .loop )
55
56
56
57
def test_get_publish_span (self ):
57
- exchange = Exchange (CONNECTION , CHANNEL , EXCHANGE_NAME )
58
+ exchange = Exchange (CONNECTION_7 , CHANNEL , EXCHANGE_NAME )
58
59
tracer = mock .MagicMock ()
59
60
PublishDecorator (tracer , exchange )._get_publish_span (
60
61
MESSAGE , ROUTING_KEY
@@ -66,7 +67,59 @@ def test_get_publish_span(self):
66
67
)
67
68
68
69
def _test_publish (self , exchange_type : Type [Exchange ]):
69
- exchange = exchange_type (CONNECTION , CHANNEL , EXCHANGE_NAME )
70
+ exchange = exchange_type (CONNECTION_7 , CHANNEL , EXCHANGE_NAME )
71
+ with mock .patch .object (
72
+ PublishDecorator , "_get_publish_span"
73
+ ) as mock_get_publish_span :
74
+ with mock .patch .object (
75
+ Exchange , "publish" , return_value = asyncio .sleep (0 )
76
+ ) as mock_publish :
77
+ decorated_publish = PublishDecorator (
78
+ self .tracer , exchange
79
+ ).decorate (mock_publish )
80
+ self .loop .run_until_complete (
81
+ decorated_publish (MESSAGE , ROUTING_KEY )
82
+ )
83
+ mock_publish .assert_called_once ()
84
+ mock_get_publish_span .assert_called_once ()
85
+
86
+ def test_publish (self ):
87
+ self ._test_publish (Exchange )
88
+
89
+ def test_robust_publish (self ):
90
+ self ._test_publish (RobustExchange )
91
+
92
+
93
+ class TestInstrumentedExchangeAioRmq8 (TestCase ):
94
+ EXPECTED_ATTRIBUTES = {
95
+ SpanAttributes .MESSAGING_SYSTEM : MESSAGING_SYSTEM ,
96
+ SpanAttributes .MESSAGING_DESTINATION : f"{ EXCHANGE_NAME } ,{ ROUTING_KEY } " ,
97
+ SpanAttributes .NET_PEER_NAME : SERVER_HOST ,
98
+ SpanAttributes .NET_PEER_PORT : SERVER_PORT ,
99
+ SpanAttributes .MESSAGING_MESSAGE_ID : MESSAGE_ID ,
100
+ SpanAttributes .MESSAGING_CONVERSATION_ID : CORRELATION_ID ,
101
+ SpanAttributes .MESSAGING_TEMP_DESTINATION : True ,
102
+ }
103
+
104
+ def setUp (self ):
105
+ self .tracer = get_tracer (__name__ )
106
+ self .loop = asyncio .new_event_loop ()
107
+ asyncio .set_event_loop (self .loop )
108
+
109
+ def test_get_publish_span (self ):
110
+ exchange = Exchange (CONNECTION_8 , CHANNEL , EXCHANGE_NAME )
111
+ tracer = mock .MagicMock ()
112
+ PublishDecorator (tracer , exchange )._get_publish_span (
113
+ MESSAGE , ROUTING_KEY
114
+ )
115
+ tracer .start_span .assert_called_once_with (
116
+ f"{ EXCHANGE_NAME } ,{ ROUTING_KEY } send" ,
117
+ kind = SpanKind .PRODUCER ,
118
+ attributes = self .EXPECTED_ATTRIBUTES ,
119
+ )
120
+
121
+ def _test_publish (self , exchange_type : Type [Exchange ]):
122
+ exchange = exchange_type (CONNECTION_8 , CHANNEL , EXCHANGE_NAME )
70
123
with mock .patch .object (
71
124
PublishDecorator , "_get_publish_span"
72
125
) as mock_get_publish_span :
0 commit comments