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)
Exemple #2
0
    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)
Exemple #5
0
    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)
Exemple #6
0
 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)
Exemple #7
0
    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))
Exemple #8
0
    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)
Exemple #9
0
    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)
Exemple #10
0
    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)
Exemple #11
0
    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)