def test_transport_url_multiple_hosts(self): self.override_config( 'transport_url', 'rabbit://{user_1}:{password_1}@{host_1}:{port_1},' '{user_2}:{password_2}@{host_2}:{port_2}/{virtual_host}'.format( user_1=USER_1, password_1=PASSWORD_1, port_1=PORT_1, host_1=HOST_1, user_2=USER_2, password_2=PASSWORD_2, host_2=HOST_2, port_2=PORT_2, virtual_host=VIRTUAL_HOST_1)) hosts = kombu_hosts.KombuHosts(cfg.CONF) self.assertEqual(VIRTUAL_HOST_1, hosts.virtual_host) self.assert_transports_host([ oslo_messaging.TransportHost(hostname=HOST_1, port=PORT_1, username=USER_1, password=PASSWORD_1), oslo_messaging.TransportHost(hostname=HOST_2, port=PORT_2, username=USER_2, password=PASSWORD_2) ], hosts.hosts)
def test_oslo_messaging_rabbit_multiple_hosts(self): self.override_config('rabbit_userid', USER_1, 'oslo_messaging_rabbit') self.override_config('rabbit_password', PASSWORD_1, 'oslo_messaging_rabbit') self.override_config('rabbit_virtual_host', VIRTUAL_HOST_1, 'oslo_messaging_rabbit') self.override_config( 'rabbit_hosts', '{host_1}:{port_1},{host_2}:{port_2}'.format(host_1=HOST_1, port_1=PORT_1, host_2=HOST_2, port_2=PORT_2), 'oslo_messaging_rabbit') self.override_config('rabbit_port', PORT_1, 'oslo_messaging_rabbit') hosts = kombu_hosts.KombuHosts(cfg.CONF) self.assertEqual(VIRTUAL_HOST_1, hosts.virtual_host) self.assert_transports_host([ oslo_messaging.TransportHost( hostname=HOST_1, port=PORT_1, username=USER_1, password=PASSWORD_1, ), oslo_messaging.TransportHost( hostname=HOST_2, port=PORT_2, username=USER_1, password=PASSWORD_1, ) ], hosts.hosts)
def _createTransportHosts(self, username, password, hosts): """Returns a list of oslo.messaging.TransportHost objects.""" transport_hosts = [] for host in hosts: host = host.strip() host_name, host_port = host.split(":") if not host_port: msg = "Invalid hosts value: %s. It should be"\ " in hostname:port format" % host raise ValueError(msg) try: host_port = int(host_port) except ValueError: msg = "Invalid port value: %s. It should be an integer" raise ValueError(msg % host_port) transport_hosts.append( oslo_msg.TransportHost(hostname=host_name, port=host_port, username=username, password=password)) return transport_hosts
def __init__(self, conf): self._conf = conf transport_url = messaging.TransportURL.parse( self._conf, self._conf.transport_url ) if transport_url.hosts: self._hosts = transport_url.hosts else: username = self._conf.oslo_messaging_rabbit.rabbit_userid password = self._conf.oslo_messaging_rabbit.rabbit_password self._hosts = [] for host in self._conf.oslo_messaging_rabbit.rabbit_hosts: hostname, port = host.split(':') self._hosts.append(messaging.TransportHost( hostname, port, username, password )) if len(self._hosts) > 1: random.shuffle(self._hosts) self._hosts_cycle = itertools.cycle(self._hosts)
def test_prefer_transport_url(self): self.override_config('rabbit_userid', USER_1, 'oslo_messaging_rabbit') self.override_config('rabbit_password', PASSWORD_1, 'oslo_messaging_rabbit') self.override_config('rabbit_virtual_host', VIRTUAL_HOST_1, 'oslo_messaging_rabbit') self.override_config('rabbit_host', HOST_1, 'oslo_messaging_rabbit') self.override_config('rabbit_port', PORT_1, 'oslo_messaging_rabbit') self.override_config( 'transport_url', 'rabbit://{user}:{password}@{host}:{port}/{virtual_host}'.format( user=USER_2, port=PORT_2, host=HOST_2, password=PASSWORD_2, virtual_host=VIRTUAL_HOST_2)) hosts = kombu_hosts.KombuHosts(cfg.CONF) self.assertEqual(VIRTUAL_HOST_2, hosts.virtual_host) self.assert_transports_host([ oslo_messaging.TransportHost( hostname=HOST_2, port=PORT_2, username=USER_2, password=PASSWORD_2, ) ], hosts.hosts)
def setUp(self): super(TestFailover, self).setUp() self._brokers = [FakeBroker(), FakeBroker()] hosts = [] for broker in self._brokers: hosts.append(oslo_messaging.TransportHost(hostname=broker.host, port=broker.port)) self._broker_url = oslo_messaging.TransportURL(self.conf, transport="amqp", hosts=hosts)
def test_parse_url(self): hosts = [] for host in self.hosts: hosts.append(oslo_messaging.TransportHost(host.get('hostname'), host.get('port'), host.get('username'), host.get('password'))) url = oslo_messaging.TransportURL(self.conf, self.transport, self.virtual_host, hosts) self.assertEqual(self.expected, str(url))
def test_parse_url(self): url = oslo_messaging.TransportURL.parse(self.conf, self.url) hosts = [] for host in self.expect.get('hosts', []): hosts.append(oslo_messaging.TransportHost(host.get('host'), host.get('port'), host.get('username'), host.get('password'))) expected = oslo_messaging.TransportURL(self.conf, self.expect.get('transport'), self.expect.get('virtual_host'), hosts) self.assertEqual(expected, url)
def _normalize_cell(self, cell, existing=None): """Normalize input cell data. Normalizations include: * Converting cell['type'] to is_parent boolean. * Merging existing transport URL with transport information. """ # Start with the cell type conversion if 'type' in cell: self._validate_cell_type(cell['type']) cell['is_parent'] = cell['type'] == 'parent' del cell['type'] # Avoid cell type being overwritten to 'child' elif existing: cell['is_parent'] = existing['is_parent'] else: cell['is_parent'] = False # Now we disassemble the existing transport URL... transport_url = existing.get('transport_url') if existing else None transport_url = rpc.get_transport_url(transport_url) if 'rpc_virtual_host' in cell: transport_url.virtual_host = cell.pop('rpc_virtual_host') if not transport_url.hosts: transport_url.hosts.append(messaging.TransportHost()) transport_host = transport_url.hosts[0] if cell.get('rpc_port') is not None: try: cell['rpc_port'] = int(cell['rpc_port']) except ValueError: raise exc.HTTPBadRequest( explanation=_('rpc_port must be integer')) # Copy over the input fields transport_field_map = { 'username': '******', 'password': '******', 'hostname': 'rpc_host', 'port': 'rpc_port', } for key, input_field in transport_field_map.items(): # Only override the value if we're given an override if input_field in cell: setattr(transport_host, key, cell.pop(input_field)) # Now set the transport URL cell['transport_url'] = str(transport_url)
def test_oslo_messaging_rabbit(self): self.override_config('rabbit_userid', USER_1, 'oslo_messaging_rabbit') self.override_config('rabbit_password', PASSWORD_1, 'oslo_messaging_rabbit') self.override_config('rabbit_virtual_host', VIRTUAL_HOST_1, 'oslo_messaging_rabbit') self.override_config('rabbit_host', HOST_1, 'oslo_messaging_rabbit') self.override_config('rabbit_port', PORT_1, 'oslo_messaging_rabbit') hosts = kombu_hosts.KombuHosts(cfg.CONF) self.assertEqual(VIRTUAL_HOST_1, hosts.virtual_host) self.assert_transports_host([ oslo_messaging.TransportHost( hostname=HOST_1, port=PORT_1, username=USER_1, password=PASSWORD_1, ) ], hosts.hosts)
def __init__(self, conf): transport_url = messaging.TransportURL.parse(conf, conf.transport_url) if transport_url.hosts: self.virtual_host = transport_url.virtual_host self.hosts = transport_url.hosts else: self.virtual_host = conf.oslo_messaging_rabbit.rabbit_virtual_host self.hosts = [] username = conf.oslo_messaging_rabbit.rabbit_userid password = conf.oslo_messaging_rabbit.rabbit_password for host in conf.oslo_messaging_rabbit.rabbit_hosts: hostname, port = host.split(':') self.hosts.append( messaging.TransportHost(hostname, int(port), username, password)) if len(self.hosts) > 1: random.shuffle(self.hosts) self._hosts_cycle = itertools.cycle(self.hosts)