|
8 | 8 | from pamqp.body import ContentBody |
9 | 9 |
|
10 | 10 | from amqpstorm import AMQPChannelError |
| 11 | +from amqpstorm import AMQPConnectionError |
11 | 12 | from amqpstorm import Channel |
12 | 13 | from amqpstorm import Message |
13 | 14 | from amqpstorm.tests.utility import FakeConnection |
@@ -338,6 +339,105 @@ def test_channel_build_inbound_messages_as_tuple(self): |
338 | 339 |
|
339 | 340 | self.assertEqual(messages_consumed, 1) |
340 | 341 |
|
| 342 | + def test_channel_build_inbound_messages_returns_on_user_close(self): |
| 343 | + channel = Channel(0, FakeConnection(), 360) |
| 344 | + channel.set_state(channel.OPEN) |
| 345 | + |
| 346 | + message = self.message.encode('utf-8') |
| 347 | + deliver = commands.Basic.Deliver() |
| 348 | + header = ContentHeader(body_size=len(message)) |
| 349 | + body = ContentBody(value=message) |
| 350 | + channel._inbound = collections.deque([deliver, header, body]) |
| 351 | + |
| 352 | + consumed = 0 |
| 353 | + for _ in channel.build_inbound_messages(break_on_empty=False): |
| 354 | + consumed += 1 |
| 355 | + channel._user_closed = True |
| 356 | + channel.set_state(channel.CLOSED) |
| 357 | + self.assertEqual(consumed, 1) |
| 358 | + self.assertFalse(channel.exceptions) |
| 359 | + |
| 360 | + def test_channel_build_inbound_messages_returns_on_connection_user_close(self): |
| 361 | + connection = FakeConnection() |
| 362 | + channel = Channel(0, connection, 360) |
| 363 | + channel.set_state(channel.OPEN) |
| 364 | + |
| 365 | + message = self.message.encode('utf-8') |
| 366 | + deliver = commands.Basic.Deliver() |
| 367 | + header = ContentHeader(body_size=len(message)) |
| 368 | + body = ContentBody(value=message) |
| 369 | + channel._inbound = collections.deque([deliver, header, body]) |
| 370 | + |
| 371 | + consumed = 0 |
| 372 | + for _ in channel.build_inbound_messages(break_on_empty=False): |
| 373 | + consumed += 1 |
| 374 | + connection._user_closed = True |
| 375 | + connection.set_state(connection.CLOSED) |
| 376 | + self.assertEqual(consumed, 1) |
| 377 | + |
| 378 | + def test_channel_build_inbound_messages_raises_on_server_close(self): |
| 379 | + channel = Channel(0, FakeConnection(), 360) |
| 380 | + channel.set_state(channel.OPEN) |
| 381 | + |
| 382 | + message = self.message.encode('utf-8') |
| 383 | + deliver = commands.Basic.Deliver() |
| 384 | + header = ContentHeader(body_size=len(message)) |
| 385 | + body = ContentBody(value=message) |
| 386 | + channel._inbound = collections.deque([deliver, header, body]) |
| 387 | + |
| 388 | + def drive(): |
| 389 | + for _ in channel.build_inbound_messages(break_on_empty=False): |
| 390 | + channel.exceptions.append( |
| 391 | + AMQPChannelError('closed by server', reply_code=406) |
| 392 | + ) |
| 393 | + |
| 394 | + self.assertRaises(AMQPChannelError, drive) |
| 395 | + |
| 396 | + def test_channel_build_inbound_messages_returns_when_already_user_closed( |
| 397 | + self, |
| 398 | + ): |
| 399 | + channel = Channel(0, FakeConnection(), 360) |
| 400 | + channel._user_closed = True |
| 401 | + channel.set_state(channel.CLOSED) |
| 402 | + |
| 403 | + messages = list( |
| 404 | + channel.build_inbound_messages(break_on_empty=False), |
| 405 | + ) |
| 406 | + self.assertEqual(messages, []) |
| 407 | + |
| 408 | + def test_channel_build_inbound_messages_raises_when_closed_without_flag( |
| 409 | + self, |
| 410 | + ): |
| 411 | + channel = Channel(0, FakeConnection(), 360) |
| 412 | + channel.set_state(channel.CLOSED) |
| 413 | + |
| 414 | + self.assertRaises( |
| 415 | + AMQPChannelError, |
| 416 | + lambda: list( |
| 417 | + channel.build_inbound_messages(break_on_empty=False) |
| 418 | + ), |
| 419 | + ) |
| 420 | + |
| 421 | + def test_channel_user_initiated_close_helper(self): |
| 422 | + connection = FakeConnection() |
| 423 | + channel = Channel(0, connection, 360) |
| 424 | + |
| 425 | + self.assertFalse(channel._user_initiated_close()) |
| 426 | + |
| 427 | + channel._user_closed = True |
| 428 | + self.assertTrue(channel._user_initiated_close()) |
| 429 | + |
| 430 | + channel._user_closed = False |
| 431 | + connection._user_closed = True |
| 432 | + self.assertTrue(channel._user_initiated_close()) |
| 433 | + |
| 434 | + def test_channel_check_for_errors_still_raises_after_user_close(self): |
| 435 | + connection = FakeConnection(state=FakeConnection.CLOSED) |
| 436 | + connection._user_closed = True |
| 437 | + channel = Channel(0, connection, 360) |
| 438 | + |
| 439 | + self.assertRaises(AMQPConnectionError, channel.check_for_errors) |
| 440 | + |
341 | 441 |
|
342 | 442 | class ChannelProcessDataEventTests(TestFramework): |
343 | 443 | def test_channel_process_data_events(self): |
|
0 commit comments