Skip to content

Commit 4512408

Browse files
author
DanielePalaia
committed
adding requeue with annotations test
1 parent 4335862 commit 4512408

File tree

4 files changed

+81
-5
lines changed

4 files changed

+81
-5
lines changed

rabbitmq_amqp_python_client/message_ack.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,6 @@ def requeue_with_annotations(
4242
event: Event, annotations: Dict[str, "PythonAMQPData"]
4343
) -> None:
4444
dlv = event.delivery
45-
if dlv.local.annotations is None:
46-
print("is none")
4745
dlv.local.annotations = annotations
4846
dlv.local.failed = False
4947
dlv.local.undeliverable = False

tests/conftest.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
Event,
66
MessageAck,
77
MessagingHandler,
8+
symbol,
89
)
910

1011

@@ -111,3 +112,20 @@ def create_connection() -> Connection:
111112
connection_consumer.dial()
112113

113114
return connection_consumer
115+
116+
117+
class MyMessageHandlerRequeueWithAnnotations(MessagingHandler):
118+
119+
def __init__(self):
120+
super().__init__(auto_accept=False, auto_settle=False)
121+
self._received = 0
122+
123+
def on_message(self, event: Event):
124+
annotations = {}
125+
annotations[symbol("x-opt-string")] = "x-test1"
126+
MessageAck.requeue_with_annotations(event, annotations)
127+
MessageAck.requeue_with_annotations(event, annotations)
128+
self._received = self._received + 1
129+
if self._received == 1000:
130+
event.connection.close()
131+
raise ConsumerTestException("consumed")

tests/test_consumer.py

Lines changed: 55 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@
1111
MyMessageHandlerDiscard,
1212
MyMessageHandlerNoack,
1313
MyMessageHandlerRequeue,
14-
create_connection,
14+
MyMessageHandlerRequeueWithAnnotations,
1515
)
16+
from .utils import create_connection
1617

1718

1819
def test_consumer_sync_queue_ack(connection: Connection) -> None:
@@ -81,9 +82,9 @@ def test_consumer_async_queue_accept(connection: Connection) -> None:
8182
except ConsumerTestException:
8283
pass
8384

84-
message_count = management.purge_queue(queue_name)
85+
consumer.close()
8586

86-
management.delete_queue(queue_name)
87+
message_count = management.purge_queue(queue_name)
8788

8889
management.close()
8990

@@ -215,3 +216,54 @@ def test_consumer_async_queue_with_requeue(connection: Connection) -> None:
215216
management.close()
216217

217218
assert message_count > 0
219+
220+
221+
def test_consumer_async_queue_with_requeue_with_annotations(
222+
connection: Connection,
223+
) -> None:
224+
messages_to_send = 1000
225+
226+
queue_name = "test-queue_async_requeue"
227+
228+
management = connection.management()
229+
230+
management.declare_queue(QuorumQueueSpecification(name=queue_name))
231+
232+
addr_queue = queue_address(queue_name)
233+
234+
publisher = connection.publisher("/queues/" + queue_name)
235+
236+
# publish messages_to_send messages
237+
for i in range(messages_to_send):
238+
publisher.publish(Message(body="test" + str(i)))
239+
publisher.close()
240+
241+
# workaround: it looks like when the consumer finish to consume invalidate the connection
242+
# so for the moment we need to use one dedicated
243+
connection_consumer = create_connection()
244+
245+
consumer = connection_consumer.consumer(
246+
addr_queue, handler=MyMessageHandlerRequeueWithAnnotations()
247+
)
248+
249+
try:
250+
consumer.run()
251+
# ack to terminate the consumer
252+
except ConsumerTestException:
253+
pass
254+
255+
consumer.close()
256+
257+
# check for added annotation
258+
new_consumer = connection.consumer(addr_queue)
259+
message = new_consumer.consume()
260+
new_consumer.close()
261+
262+
assert "x-opt-string" in message.annotations
263+
264+
message_count = management.purge_queue(queue_name)
265+
266+
management.delete_queue(queue_name)
267+
management.close()
268+
269+
assert message_count > 0

tests/utils.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from rabbitmq_amqp_python_client import Connection
2+
3+
4+
def create_connection() -> Connection:
5+
connection_consumer = Connection("amqp://guest:guest@localhost:5672/")
6+
connection_consumer.dial()
7+
8+
return connection_consumer

0 commit comments

Comments
 (0)