def _create_encoded_metadata_response(self, broker_data, topic_data, topic_errors, partition_errors): encoded = struct.pack('>ii', 3, len(broker_data)) for node_id, broker in compat.dict_items(broker_data): encoded += struct.pack('>ih%dsi' % len(broker.host), node_id, len(broker.host), compat.bytes(broker.host), broker.port) encoded += struct.pack('>i', len(topic_data)) for topic, partitions in compat.dict_items(topic_data): encoded += struct.pack('>hh%dsi' % len(topic), topic_errors[topic], len(topic), compat.bytes(topic), len(partitions)) for partition, metadata in compat.dict_items(partitions): encoded += struct.pack('>hiii', partition_errors[(topic, partition)], partition, metadata.leader, len(metadata.replicas)) if len(metadata.replicas) > 0: encoded += struct.pack('>%di' % len(metadata.replicas), *metadata.replicas) encoded += struct.pack('>i', len(metadata.isr)) if len(metadata.isr) > 0: encoded += struct.pack('>%di' % len(metadata.isr), *metadata.isr) return encoded
def test_send_broker_unaware_request_fail(self): 'Tests that call fails when all hosts are unavailable' mocked_conns = { ('kafka01', 9092): MagicMock(), ('kafka02', 9092): MagicMock() } # inject KafkaConnection side effects mocked_conns[('kafka01', 9092)].send.side_effect = RuntimeError("kafka01 went away (unittest)") mocked_conns[('kafka02', 9092)].send.side_effect = RuntimeError("Kafka02 went away (unittest)") def mock_get_conn(host, port): return mocked_conns[(host, port)] # patch to avoid making requests before we want it with patch.object(KafkaClient, 'load_metadata_for_topics'): with patch.object(KafkaClient, '_get_conn', side_effect=mock_get_conn): client = KafkaClient(hosts=['kafka01:9092', 'kafka02:9092']) with self.assertRaises(KafkaUnavailableError): client._send_broker_unaware_request(1, 'fake request') for key, conn in compat.dict_items(mocked_conns): conn.send.assert_called_with(1, 'fake request')
def test_send_broker_unaware_request_fail(self): 'Tests that call fails when all hosts are unavailable' mocked_conns = { ('kafka01', 9092): MagicMock(), ('kafka02', 9092): MagicMock() } # inject KafkaConnection side effects mocked_conns[('kafka01', 9092)].send.side_effect = RuntimeError( "kafka01 went away (unittest)") mocked_conns[('kafka02', 9092)].send.side_effect = RuntimeError( "Kafka02 went away (unittest)") def mock_get_conn(host, port): return mocked_conns[(host, port)] # patch to avoid making requests before we want it with patch.object(KafkaClient, 'load_metadata_for_topics'): with patch.object(KafkaClient, '_get_conn', side_effect=mock_get_conn): client = KafkaClient(hosts=['kafka01:9092', 'kafka02:9092']) with self.assertRaises(KafkaUnavailableError): client._send_broker_unaware_request(1, 'fake request') for key, conn in compat.dict_items(mocked_conns): conn.send.assert_called_with(1, 'fake request')