Exemplo n.º 1
0
    def test_timeout_with_concurrently_queues(self):
        transport = self.useFixture(utils.TransportFixture(
            self.conf, self.url))
        target = oslo_messaging.Target(topic="topic_" + str(uuid.uuid4()),
                                       server="server_" + str(uuid.uuid4()))
        server = self.useFixture(
            utils.RpcServerFixture(self.conf,
                                   self.url,
                                   target,
                                   executor="threading"))
        client = utils.ClientStub(transport.transport,
                                  target,
                                  cast=False,
                                  timeout=5)

        def short_periodical_tasks():
            for i in range(10):
                client.add(increment=1)
                time.sleep(1)

        with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor:
            future = executor.submit(client.long_running_task, seconds=10)
            executor.submit(short_periodical_tasks)
            self.assertRaises(oslo_messaging.MessagingTimeout, future.result)

        self.assertEqual(10, server.endpoint.ival)
Exemplo n.º 2
0
    def test_independent_topics(self):
        transport = self.useFixture(utils.TransportFixture(self.url))
        listener_a = self.useFixture(
            utils.NotificationFixture(transport.transport, ['1']))
        listener_b = self.useFixture(
            utils.NotificationFixture(transport.transport, ['2']))
        transport.wait()

        a = listener_a.notifier('pub-1', topic='1')
        b = listener_b.notifier('pub-2', topic='2')

        a_out = [('test-1-%s' % c, 'payload-1-%s' % c) for c in 'abcdefgh']
        for event_type, payload in a_out:
            a.info({}, event_type, payload)

        b_out = [('test-2-%s' % c, 'payload-2-%s' % c) for c in 'ijklmnop']
        for event_type, payload in b_out:
            b.info({}, event_type, payload)

        for expected in a_out:
            actual = listener_a.events.get(timeout=0.5)
            self.assertEqual('info', actual[0])
            self.assertEqual(expected[0], actual[1])
            self.assertEqual(expected[1], actual[2])
            self.assertEqual('pub-1', actual[3])

        for expected in b_out:
            actual = listener_b.events.get(timeout=0.5)
            self.assertEqual('info', actual[0])
            self.assertEqual(expected[0], actual[1])
            self.assertEqual(expected[1], actual[2])
            self.assertEqual('pub-2', actual[3])
Exemplo n.º 3
0
 def test_timeout(self):
     transport = self.useFixture(utils.TransportFixture(
         self.conf, self.url))
     target = oslo_messaging.Target(topic="no_such_topic")
     c = utils.ClientStub(transport.transport, target, timeout=1)
     self.assertThat(c.ping,
                     matchers.raises(oslo_messaging.MessagingTimeout))
Exemplo n.º 4
0
    def test_multiple_topics(self):
        transport = self.useFixture(utils.TransportFixture(self.url))
        listener = self.useFixture(
            utils.NotificationFixture(transport.transport, ['a', 'b']))
        transport.wait()
        a = listener.notifier('pub-a', topic='a')
        b = listener.notifier('pub-b', topic='b')

        sent = {
            'pub-a': [a, 'test-a', 'payload-a'],
            'pub-b': [b, 'test-b', 'payload-b']
        }
        for e in sent.values():
            e[0].info({}, e[1], e[2])

        received = {}
        while len(received) < len(sent):
            e = listener.events.get(timeout=1)
            received[e[3]] = e

        for key in received:
            actual = received[key]
            expected = sent[key]
            self.assertEqual('info', actual[0])
            self.assertEqual(expected[1], actual[1])
            self.assertEqual(expected[2], actual[2])
Exemplo n.º 5
0
    def test_simple(self):
        transport = self.useFixture(utils.TransportFixture(self.url))
        listener = self.useFixture(
            utils.NotificationFixture(transport.transport, ['test_simple']))
        transport.wait()
        notifier = listener.notifier('abc')

        notifier.info({}, 'test', 'Hello World!')
        event = listener.events.get(timeout=1)
        self.assertEqual('info', event[0])
        self.assertEqual('test', event[1])
        self.assertEqual('Hello World!', event[2])
        self.assertEqual('abc', event[3])
Exemplo n.º 6
0
    def test_endpoint_version_namespace(self):
        # verify endpoint version and namespace are checked
        target = oslo_messaging.Target(topic="topic_" + str(uuid.uuid4()),
                                       server="server_" + str(uuid.uuid4()),
                                       namespace="Name1",
                                       version="7.5")

        class _endpoint(object):
            def __init__(self, target):
                self.target = target()

            def test(self, ctxt, echo):
                return echo

        transport = self.useFixture(utils.TransportFixture(
            self.conf, self.url))
        self.useFixture(
            utils.RpcServerFixture(self.conf,
                                   self.url,
                                   target,
                                   executor="threading",
                                   endpoint=_endpoint(target)))
        client1 = utils.ClientStub(transport.transport,
                                   target,
                                   cast=False,
                                   timeout=5)
        self.assertEqual("Hi there", client1.test(echo="Hi there"))

        # unsupported version
        target2 = target()
        target2.version = "7.6"
        client2 = utils.ClientStub(transport.transport,
                                   target2,
                                   cast=False,
                                   timeout=5)
        self.assertRaises(oslo_messaging.rpc.client.RemoteError,
                          client2.test,
                          echo="Expect failure")

        # no matching namespace
        target3 = oslo_messaging.Target(topic=target.topic,
                                        server=target.server,
                                        version=target.version,
                                        namespace="Name2")
        client3 = utils.ClientStub(transport.transport,
                                   target3,
                                   cast=False,
                                   timeout=5)
        self.assertRaises(oslo_messaging.rpc.client.RemoteError,
                          client3.test,
                          echo="Expect failure")
Exemplo n.º 7
0
    def test_different_exchanges(self):
        t = self.useFixture(utils.TransportFixture(self.url))
        # If the different exchanges are not honoured, then the
        # teardown may hang unless we broadcast all control messages
        # to each server
        group1 = self.useFixture(
            utils.RpcServerGroupFixture(self.url,
                                        transport=t,
                                        use_fanout_ctrl=True))
        group2 = self.useFixture(
            utils.RpcServerGroupFixture(self.url,
                                        exchange="a",
                                        transport=t,
                                        use_fanout_ctrl=True))
        group3 = self.useFixture(
            utils.RpcServerGroupFixture(self.url,
                                        exchange="b",
                                        transport=t,
                                        use_fanout_ctrl=True))

        client1 = group1.client(1)
        data1 = [c for c in 'abcdefghijklmn']
        for i in data1:
            client1.append(text=i)

        client2 = group2.client()
        data2 = [c for c in 'opqrstuvwxyz']
        for i in data2:
            client2.append(text=i)

        actual1 = [[c for c in s.endpoint.sval] for s in group1.servers]
        self.assertThat(actual1, utils.IsValidDistributionOf(data1))
        actual1 = [c for c in group1.servers[1].endpoint.sval]
        self.assertThat([actual1], utils.IsValidDistributionOf(data1))
        for s in group1.servers:
            expected = len(data1) if group1.servers.index(s) == 1 else 0
            self.assertEqual(expected, len(s.endpoint.sval))
            self.assertEqual(0, s.endpoint.ival)

        actual2 = [[c for c in s.endpoint.sval] for s in group2.servers]
        for s in group2.servers:
            self.assertThat(len(s.endpoint.sval), matchers.GreaterThan(0))
            self.assertEqual(0, s.endpoint.ival)
        self.assertThat(actual2, utils.IsValidDistributionOf(data2))

        for s in group3.servers:
            self.assertEqual(0, len(s.endpoint.sval))
            self.assertEqual(0, s.endpoint.ival)
Exemplo n.º 8
0
    def test_bad_endpoint(self):
        # 'target' attribute is reserved and should be of type Target

        class _endpoint(object):
            def target(self, ctxt, echo):
                return echo

        target = oslo_messaging.Target(topic="topic_" + str(uuid.uuid4()),
                                       server="server_" + str(uuid.uuid4()))
        transport = self.useFixture(utils.TransportFixture(
            self.conf, self.url))
        self.assertRaises(TypeError,
                          oslo_messaging.get_rpc_server,
                          transport=transport.transport,
                          target=target,
                          endpoints=[_endpoint()],
                          executor="threading")
Exemplo n.º 9
0
    def test_multiple_servers(self):
        transport = self.useFixture(utils.TransportFixture(self.url))
        listener_a = self.useFixture(
            utils.NotificationFixture(transport.transport, ['test-topic']))
        listener_b = self.useFixture(
            utils.NotificationFixture(transport.transport, ['test-topic']))
        transport.wait()
        n = listener_a.notifier('pub')

        events_out = [('test-%s' % c, 'payload-%s' % c) for c in 'abcdefgh']

        for event_type, payload in events_out:
            n.info({}, event_type, payload)

        events_in = [[(e[1], e[2]) for e in listener_a.get_events()],
                     [(e[1], e[2]) for e in listener_b.get_events()]]

        self.assertThat(events_in, utils.IsValidDistributionOf(events_out))
        for stream in events_in:
            self.assertThat(len(stream), matchers.GreaterThan(0))
Exemplo n.º 10
0
    def test_all_categories(self):
        transport = self.useFixture(utils.TransportFixture(self.url))
        listener = self.useFixture(
            utils.NotificationFixture(transport.transport,
                                      ['test_all_categories']))
        transport.wait()
        n = listener.notifier('abc')

        cats = ['debug', 'audit', 'info', 'warn', 'error', 'critical']
        events = [(getattr(n, c), c, 'type-' + c, c + '-data') for c in cats]
        for e in events:
            e[0]({}, e[2], e[3])

        # order between events with different categories is not guaranteed
        received = {}
        for expected in events:
            e = listener.events.get(timeout=0.5)
            received[e[0]] = e

        for expected in events:
            actual = received[expected[1]]
            self.assertEqual(expected[1], actual[0])
            self.assertEqual(expected[2], actual[1])
            self.assertEqual(expected[3], actual[2])