def setUp(self): super(QPidHATestCase, self).setUp() self.brokers = ['host1', 'host2', 'host3', 'host4', 'host5'] self.config(qpid_hosts=self.brokers, qpid_username=None, qpid_password=None, group='oslo_messaging_qpid') hostname_sets = set() self.info = {'attempt': 0, 'fail': False} def _connect(myself, broker): # do as little work that is enough to pass connection attempt myself.connection = mock.Mock() hostname = broker['host'] self.assertNotIn(hostname, hostname_sets) hostname_sets.add(hostname) self.info['attempt'] += 1 if self.info['fail']: raise qpid.messaging.exceptions.ConnectionError # just make sure connection instantiation does not fail with an # exception self.stubs.Set(qpid_driver.Connection, '_connect', _connect) # starting from the first broker in the list url = oslo_messaging.TransportURL.parse(self.conf, None) self.connection = qpid_driver.Connection(self.conf, url, amqp.PURPOSE_SEND) self.addCleanup(self.connection.close) self.info.update({'attempt': 0, 'fail': True}) hostname_sets.clear()
def test_reconnect_order(self): brokers = ['host1', 'host2', 'host3', 'host4', 'host5'] brokers_count = len(brokers) self.config(qpid_hosts=brokers, group='oslo_messaging_qpid') with mock.patch('qpid.messaging.Connection') as conn_mock: # starting from the first broker in the list url = oslo_messaging.TransportURL.parse(self.conf, None) connection = qpid_driver.Connection(self.conf, url, amqp.PURPOSE_SEND) # reconnect will advance to the next broker, one broker per # attempt, and then wrap to the start of the list once the end is # reached for _ in range(brokers_count): connection.reconnect() expected = [] for broker in brokers: expected.extend([ mock.call("%s:5672" % broker), mock.call().open(), mock.call().session(), mock.call().opened(), mock.call().opened().__nonzero__(), mock.call().close() ]) conn_mock.assert_has_calls(expected, any_order=True)