def test_connection_close_handles_raise_on_write(self): connection = Connection('127.0.0.1', 'guest', 'guest', lazy=True) connection.set_state(connection.OPEN) io = IO(connection.parameters, []) io.socket = Mock(name='socket', spec=socket.socket) connection._io = io # Create some fake channels. for index in range(10): connection._channels[index + 1] = Channel( index + 1, connection, 360) def raise_on_write(_): raise AMQPConnectionError('travis-ci') connection._channel0._write_frame = raise_on_write self.assertFalse(connection.is_closed) connection.close() # Make sure all the fake channels were closed as well. for index in range(10): self.assertNotIn(index + 1, connection._channels) self.assertFalse(connection._channels) self.assertTrue(connection.is_closed)
def test_connection_close(self): connection = Connection('127.0.0.1', 'guest', 'guest', lazy=True) connection.set_state(connection.OPEN) io = IO(connection.parameters, []) io.socket = Mock(name='socket', spec=socket.socket) connection._io = io # Create some fake channels. for index in range(10): connection._channels[index + 1] = Channel( index + 1, connection, 360) def on_write(frame_out): self.assertIsInstance(frame_out, specification.Connection.Close) connection._channel0._close_connection_ok() connection._channel0._write_frame = on_write self.assertFalse(connection.is_closed) connection.close() # Make sure all the fake channels were closed as well. for index in range(10): self.assertNotIn(index + 1, connection._channels) self.assertTrue(connection.is_closed)
def test_connection_close_when_already_closed(self): connection = Connection('127.0.0.1', 'guest', 'guest', lazy=True) connection.set_state(connection.OPEN) io = IO(connection.parameters, []) io.socket = Mock(name='socket', spec=socket.socket) connection._io = io connection.set_state(connection.CLOSED) # Create some fake channels. for index in range(10): connection._channels[index + 1] = Channel( index + 1, connection, 360) def state_set(state): self.assertEqual(state, connection.CLOSED) connection.set_state = state_set self.assertTrue(connection.is_closed) connection.close() # Make sure all the fake channels were closed as well. for index in range(10): self.assertNotIn(index + 1, connection._channels) self.assertFalse(connection._channels) self.assertTrue(connection.is_closed)
def test_connection_closed_on_exception(self): connection = Connection('127.0.0.1', 'guest', 'guest', lazy=True) connection.set_state(connection.OPEN) connection.exceptions.append(AMQPConnectionError('travis-ci')) self.assertTrue(connection.is_open) self.assertRaises(AMQPConnectionError, connection.check_for_errors) self.assertTrue(connection.is_closed)
def test_connection_fileno_property(self): connection = Connection('127.0.0.1', 'guest', 'guest', lazy=True) connection.set_state(connection.OPENING) io = IO(connection.parameters, []) io.socket = Mock(name='socket', spec=socket.socket) connection._io = io io.socket.fileno.return_value = 5 self.assertEqual(connection.fileno, 5)
def test_connection_wait_for_connection_does_raise_on_error(self): connection = Connection('127.0.0.1', 'guest', 'guest', lazy=True) connection.set_state(connection.OPENING) connection.exceptions.append(AMQPConnectionError('travis-ci')) self.assertRaises(AMQPConnectionError, connection._wait_for_connection_state, connection.OPEN)
def test_connection_wait_for_connection_does_raise_on_error(self): connection = Connection('127.0.0.1', 'guest', 'guest', lazy=True) connection.set_state(connection.OPENING) connection.exceptions.append(AMQPConnectionError('travis-ci')) self.assertRaises( AMQPConnectionError, connection._wait_for_connection_state, connection.OPEN, 0.1 )
def test_connection_wait_for_connection_raises_on_timeout(self): connection = Connection('127.0.0.1', 'guest', 'guest', timeout=1, lazy=True) connection.set_state(connection.OPENING) io = IO(connection.parameters, []) io.socket = MagicMock(name='socket', spec=socket.socket) connection._io = io self.assertRaises(AMQPConnectionError, connection._wait_for_connection_to_open)
def test_connection_wait_for_connection_raises_on_timeout(self): connection = Connection('127.0.0.1', 'guest', 'guest', timeout=0.1, lazy=True) connection.set_state(connection.OPENING) io = IO(connection.parameters, []) io.socket = MagicMock(name='socket', spec=socket.socket) connection._io = io self.assertRaises(AMQPConnectionError, connection._wait_for_connection_to_open)
def test_connection_open_many_channels(self): connection = Connection('127.0.0.1', 'guest', 'guest', timeout=0.1, lazy=True) connection.set_state(connection.OPEN) for index in range(MAX_CHANNELS - 1): self.assertEqual(int(connection.channel(lazy=True)), index + 1)
def test_connection_open_new_channel(self): connection = Connection('127.0.0.1', 'guest', 'guest', lazy=True) connection.set_state(connection.OPEN) def on_open_ok(_, frame_out): self.assertIsInstance(frame_out, specification.Channel.Open) connection._channels[1].on_frame(specification.Channel.OpenOk()) connection.write_frame = on_open_ok connection.channel()
def test_connection_heartbeat_stopped_on_close(self): connection = Connection('127.0.0.1', 'guest', 'guest', lazy=True) connection.set_state(connection.OPEN) connection.heartbeat.start(connection.exceptions) connection.exceptions.append(AMQPConnectionError('travis-ci')) self.assertTrue(connection.heartbeat._running.is_set()) self.assertRaises(AMQPConnectionError, connection.check_for_errors) self.assertFalse(connection.heartbeat._running.is_set())
def test_connection_maximum_channels_reached(self): connection = Connection('127.0.0.1', 'guest', 'guest', lazy=True) connection.set_state(connection.OPEN) for index in compatibility.RANGE(MAX_CHANNELS): channel_id = connection._get_next_available_channel_id() connection._channels[channel_id] = None self.assertEqual(connection._last_channel_id, index + 1) self.assertRaisesRegexp( AMQPConnectionError, 'reached the maximum number of channels %d' % MAX_CHANNELS, connection.channel, lazy=True)
def test_connection_maximum_channels_reached(self): connection = Connection('127.0.0.1', 'guest', 'guest', timeout=0.1, lazy=True) connection.set_state(connection.OPEN) for index in range(MAX_CHANNELS - 1): self.assertEqual(int(connection.channel(lazy=True)), index + 1) self.assertRaisesRegexp(AMQPConnectionError, 'reached the maximum number of channels %d' % MAX_CHANNELS, connection.channel, lazy=True)
def test_connection_wait_for_connection(self): connection = Connection('127.0.0.1', 'guest', 'guest', lazy=True) connection.set_state(connection.OPENING) io = IO(connection.parameters, []) io.socket = Mock(name='socket', spec=socket.socket) connection._io = io self.assertFalse(connection.is_open) def set_state_to_open(conn): conn.set_state(conn.OPEN) threading.Timer(function=set_state_to_open, interval=0.1, args=(connection,)).start() connection._wait_for_connection_state(connection.OPEN) self.assertTrue(connection.is_open)
def test_connection_avoid_conflicts_with_channel_ids(self): connection = Connection('127.0.0.1', 'guest', 'guest', lazy=True) connection.set_state(connection.OPEN) for index in compatibility.RANGE(1, 301): connection._channels[index] = None for index in compatibility.RANGE(302, 65535): connection._channels[index] = None last_channel_id = int(connection.channel(lazy=True)) self.assertEqual(last_channel_id, 301) self.assertEqual(connection._last_channel_id, 301) last_channel_id = int(connection.channel(lazy=True)) self.assertEqual(last_channel_id, 65535) self.assertEqual(connection._last_channel_id, 65535)
def test_connection_avoid_conflicts_with_channel_ids(self): connection = Connection('127.0.0.1', 'guest', 'guest', lazy=True) connection.set_state(connection.OPEN) for index in compatibility.RANGE(1, 301): connection._channels[index] = None for index in compatibility.RANGE(302, 65535): connection._channels[index] = None last_channel_id = int(connection.channel(lazy=True)) self.assertEqual( last_channel_id, 301 ) self.assertEqual(connection._last_channel_id, 301) last_channel_id = int(connection.channel(lazy=True)) self.assertEqual( last_channel_id, 65535 ) self.assertEqual(connection._last_channel_id, 65535)
def test_connection_close_old_ids_with_channel(self): max_channels = 1024 connection = Connection('127.0.0.1', 'guest', 'guest', lazy=True) connection._channel0.max_allowed_channels = max_channels connection.set_state(connection.OPEN) for _ in compatibility.RANGE(max_channels): connection.channel(lazy=True) ids_to_close = [2, 8, 16, 32, 64, 128, 256, 512, 768, 1024] for _ in range(100): for index in ids_to_close: del connection._channels[index] self.assertEqual(len(connection._channels), max_channels - len(ids_to_close)) for _ in ids_to_close: self.assertIn(int(connection.channel(lazy=True)), ids_to_close) self.assertEqual(len(connection._channels), max_channels)
def test_connection_close_old_ids_with_channel(self): max_channels = 1024 connection = Connection('127.0.0.1', 'guest', 'guest', lazy=True) connection._channel0.max_allowed_channels = max_channels connection.set_state(connection.OPEN) for _ in compatibility.RANGE(max_channels): connection.channel(lazy=True) ids_to_close = [2, 8, 16, 32, 64, 128, 256, 512, 768, 1024] for _ in range(100): for index in ids_to_close: del connection._channels[index] self.assertEqual(len(connection._channels), max_channels - len(ids_to_close)) for _ in ids_to_close: self.assertIn( int(connection.channel(lazy=True)), ids_to_close ) self.assertEqual(len(connection._channels), max_channels)
def test_connection_close_state(self): connection = Connection('127.0.0.1', 'guest', 'guest', lazy=True) connection.set_state(Connection.OPEN) connection.close() self.assertTrue(connection.is_closed)
def test_connection_open_many_channels(self): connection = Connection('127.0.0.1', 'guest', 'guest', lazy=True) connection.set_state(connection.OPEN) for index in compatibility.RANGE(MAX_CHANNELS - 1): self.assertEqual(int(connection.channel(lazy=True)), index + 1)