Exemple #1
0
    def test_send_recv_multiple_endpoints(self):
        r = ZmqTestSubConnection(
            self.factory,
            ZmqEndpoint(ZmqEndpointType.bind, "tcp://127.0.0.1:5556"))
        r.addEndpoints(
            [ZmqEndpoint(ZmqEndpointType.bind, "inproc://endpoint")])
        s1 = ZmqPubConnection(
            self.factory,
            ZmqEndpoint(ZmqEndpointType.connect, "tcp://127.0.0.1:5556"))
        s2 = ZmqPubConnection(
            self.factory,
            ZmqEndpoint(ZmqEndpointType.connect, "inproc://endpoint"))

        r.subscribe('')

        def publish(ignore):
            s1.publish('111', 'tag1')
            s2.publish('222', 'tag2')

        def check(ignore):
            result = getattr(r, 'messages', [])
            expected = [['tag1', '111'], ['tag2', '222']]
            self.failUnlessEqual(sorted(result), expected,
                                 "Message should have been received")

        return _wait(0.1).addCallback(publish) \
            .addCallback(lambda _: _wait(0.1)).addCallback(check)
Exemple #2
0
    def test_send_recv_pgm(self):
        r = ZmqTestSubConnection(
            self.factory,
            ZmqEndpoint(ZmqEndpointType.bind,
                        "epgm://127.0.0.1;239.192.1.1:5556"))

        s = ZmqPubConnection(
            self.factory,
            ZmqEndpoint(ZmqEndpointType.connect,
                        "epgm://127.0.0.1;239.192.1.1:5556"))

        r.subscribe('tag')

        def publish(ignore):
            s.publish('xyz', 'different-tag')
            s.publish('abcd', 'tag1')

        def check(ignore):
            result = getattr(r, 'messages', [])
            expected = [['tag1', 'abcd']]
            self.failUnlessEqual(result, expected,
                                 "Message should have been received")

        return _wait(0.2).addCallback(publish) \
            .addCallback(lambda _: _wait(0.2)).addCallback(check)
Exemple #3
0
 def setUp(self):
     self.factory1 = ZmqFactory()
     self.factory2 = ZmqFactory()
     c = ZmqEndpoint(ZmqEndpointType.connect, "tcp://127.0.0.1:7859")
     self.c1 = ZmqRequestConnection(self.factory1, c, identity=b'master')
     b = ZmqEndpoint(ZmqEndpointType.bind, "tcp://127.0.0.1:7859")
     self.c2 = ZmqReplyConnection(self.factory2, b, identity=b'slave')
     self.c1.d = defer.Deferred()
Exemple #4
0
    def test_send_timeout_fail(self):
        b = ZmqEndpoint(ZmqEndpointType.bind, "ipc://#4")
        ZmqSlowREPConnection(self.factory, b)
        c = ZmqEndpoint(ZmqEndpointType.connect, "ipc://#4")
        s = ZmqREQConnection(self.factory, c, identity=b'client2')

        return s.sendMsg(b'aaa', timeout=0.05) \
            .addCallbacks(lambda _: self.fail("Should timeout"),
                          lambda fail: fail.trap(ZmqRequestTimeoutError)) \
            .addCallback(lambda _: _wait(0.1))
    def setUp(self):
        self.factory1 = ZmqFactory()
        dealer_endpoint = ZmqEndpoint(ZmqEndpointType.connect, "ipc://#7")
        self.dealer = ZmqTestDealerConnection(self.factory1,
                                              dealer_endpoint,
                                              identity='dealer')
        self.dealer.d = defer.Deferred()

        self.factory2 = ZmqFactory()
        router_endpoint = ZmqEndpoint(ZmqEndpointType.bind, "ipc://#7")
        self.router = ZmqTestRouterConnection(self.factory2,
                                              router_endpoint,
                                              identity='router')
Exemple #6
0
    def test_send_recv(self):
        r = ZmqTestReceiver(self.factory,
                            ZmqEndpoint(ZmqEndpointType.bind, "inproc://#1"))
        s = ZmqTestSender(self.factory,
                          ZmqEndpoint(ZmqEndpointType.connect, "inproc://#1"))

        s.send('abcd')

        def check(ignore):
            result = getattr(r, 'messages', [])
            expected = [['abcd']]
            self.failUnlessEqual(result, expected,
                                 "Message should have been received")

        return _wait(0.01).addCallback(check)
Exemple #7
0
    def test_send_recv_tcp_large(self):
        r = ZmqTestReceiver(
            ZmqEndpoint(ZmqEndpointType.bind, "tcp://127.0.0.1:5555"))
        r.listen(self.factory)
        s = ZmqTestSender(
            ZmqEndpoint(ZmqEndpointType.connect, "tcp://127.0.0.1:5555"))
        s.connect(self.factory)
        s.send(["0" * 10000, "1" * 10000])

        def check(ignore):
            result = getattr(r, 'messages', [])
            expected = [["0" * 10000, "1" * 10000]]
            self.failUnlessEqual(result, expected,
                                 "Messages should have been received")

        return _wait(0.01).addCallback(check)
    def _zmq_connect(self, connClass, address):
        """
        Connect to an address.

        :param connClass: The connection class to be used.
        :type connClass: txzmq.ZmqConnection
        :param address: The address to connect to.
        :type address: str

        :return: The binded connection.
        :rtype: txzmq.ZmqConnection
        """
        endpoint = ZmqEndpoint(ZmqEndpointType.connect, address)
        connection = connClass(self._factory)

        if self.use_curve:
            socket = connection.socket
            public, secret = maybe_create_and_get_certificates(
                self._config_prefix, self.component_type)
            server_public_file = os.path.join(
                self._config_prefix, PUBLIC_KEYS_PREFIX, "server.key")

            server_public, _ = zmq.auth.load_certificate(server_public_file)
            socket.curve_publickey = public
            socket.curve_secretkey = secret
            socket.curve_serverkey = server_public

        connection.addEndpoints([endpoint])
        return connection
Exemple #9
0
    def setUp(self):
        self.factory = ZmqFactory()
        ZmqXREQConnection.identity = 'client'
        self.r = ZmqTestXREPConnection(
                ZmqEndpoint(ZmqEndpointType.bind, "ipc://#3"))
        self.r.listen(self.factory)
        self.s = ZmqXREQConnection(
                ZmqEndpoint(ZmqEndpointType.connect, "ipc://#3"))
        self.s.connect(self.factory)
        self.count = 0

        def get_next_id():
            self.count += 1
            return 'msg_id_%d' % (self.count,)

        self.s._getNextId = get_next_id
    def _zmq_bind(self, connClass, address):
        """
        Bind to an address.

        :param connClass: The connection class to be used.
        :type connClass: txzmq.ZmqConnection
        :param address: The address to bind to.
        :type address: str

        :return: The binded connection and port.
        :rtype: (txzmq.ZmqConnection, int)
        """
        proto, addr, port = ADDRESS_RE.search(address).groups()

        endpoint = ZmqEndpoint(ZmqEndpointType.bind, address)
        connection = connClass(self._factory)

        if self.use_curve:
            socket = connection.socket

            public, secret = maybe_create_and_get_certificates(
                self._config_prefix, self.component_type)
            socket.curve_publickey = public
            socket.curve_secretkey = secret
            self._start_authentication(connection.socket)

        if proto == 'tcp' and int(port) == 0:
            connection.endpoints.extend([endpoint])
            port = connection.socket.bind_to_random_port('tcp://%s' % addr)
        else:
            connection.addEndpoints([endpoint])

        return connection, int(port)
Exemple #11
0
    def test_send_recv_tcp(self):
        r = ZmqTestReceiver(
            self.factory,
            ZmqEndpoint(ZmqEndpointType.bind, "tcp://127.0.0.1:5555"))
        s = ZmqTestSender(
            self.factory,
            ZmqEndpoint(ZmqEndpointType.connect, "tcp://127.0.0.1:5555"))

        for i in xrange(100):
            s.send(str(i))

        def check(ignore):
            result = getattr(r, 'messages', [])
            expected = map(lambda i: [str(i)], xrange(100))
            self.failUnlessEqual(result, expected,
                                 "Messages should have been received")

        return _wait(0.01).addCallback(check)
    def test_send_recv(self):
        r = ZmqTestSubConnection(
            ZmqEndpoint(ZmqEndpointType.bind, "ipc://test-sock"))
        r.listen(self.factory)
        s = ZmqPubConnection(
            ZmqEndpoint(ZmqEndpointType.connect, "ipc://test-sock"))
        s.connect(self.factory)

        r.subscribe('tag')
        s.publish('xyz', 'different-tag')
        s.publish('abcd', 'tag1')
        s.publish('efgh', 'tag2')

        def check(ignore):
            result = getattr(r, 'messages', [])
            expected = [['tag1', 'abcd'], ['tag2', 'efgh']]
            self.failUnlessEqual(result, expected,
                                 "Message should have been received")

        return _wait(0.01).addCallback(check)
Exemple #13
0
    def test_listen_success(self):
        def fakeConnectOrBind(ignored):
            self.factory.testMessage = "Fake success!"

        def check(ignored):
            self.assertEqual(self.factory.testMessage, "Fake success!")

        s = ZmqTestReceiver(ZmqEndpoint(ZmqEndpointType.bind, "inproc://#1"))
        self.patch(s, '_connectOrBind', fakeConnectOrBind)
        d = s.listen(self.factory)
        d.addCallback(check)
        return d
Exemple #14
0
    def test_listen_fail(self):
        def fakeConnectOrBind(factory):
            raise Exception("ohnoz!")

        def check(error):
            self.assertEqual(str(error), "exceptions.Exception: ohnoz!")

        s = ZmqTestReceiver(ZmqEndpoint(ZmqEndpointType.bind, "inproc://#1"))
        self.patch(s, '_connectOrBind', fakeConnectOrBind)
        failure = s.listen(self.factory)
        d = self.assertFailure(failure, exceptions.ListenError)
        d.addCallback(check)
        return d
    def test_subscribe_success(self):
        def checkSubscribe(ignored):
            self.assertEqual(self.factory.testMessage, "Fake success!")

        def checkConnect(client):
            self.assertEqual(self.factory.testMessage, "")
            d = client.subscribe("tag")
            d.addCallback(checkSubscribe)

        s = ZmqSubConnection(
            ZmqEndpoint(ZmqEndpointType.connect, "tcp://127.0.0.1:5556"))
        self.patchSocket(TestSocketSuccess, s)
        d = s.connect(self.factory)
        d.addCallback(checkConnect)
        return d
    def test_subscribe_fail(self):
        def checkSubscribe(error):
            self.assertEqual(str(error), "exceptions.Exception: ohnoz!")

        def checkConnect(client):
            self.assertEqual(self.factory.testMessage, "")
            failure = client.subscribe("tag")
            d = self.assertFailure(failure, exceptions.SubscribingError)
            d.addCallback(checkSubscribe)

        s = ZmqSubConnection(
            ZmqEndpoint(ZmqEndpointType.connect, "tcp://127.0.0.1:5556"))
        self.patchSocket(TestSocketFailure, s)
        d = s.connect(self.factory)
        d.addCallback(checkConnect)
        return d
    def test_publish_fail(self):
        def fakeSend(factory):
            raise Exception("ohnoz!")

        def checkPublish(error):
            self.assertEqual(str(error), "exceptions.Exception: ohnoz!")

        def checkListen(server):
            self.assertEqual(self.factory.testMessage, "")
            failure = server.publish("a really special message")
            d = self.assertFailure(failure, exceptions.PublishingError)
            d.addCallback(checkPublish)

        s = ZmqPubConnection(ZmqEndpoint(ZmqEndpointType.bind, "inproc://#1"))
        self.patch(s, 'send', fakeSend)
        d = s.listen(self.factory)
        d.addCallback(checkListen)
        return d
    def test_publish_success(self):
        def fakeSend(message):
            self.factory.testMessage = message

        def checkPublish(server):
            expected = "\x00a really special message"
            self.assertEqual(self.factory.testMessage, expected)

        def checkListen(server):
            self.assertEqual(self.factory.testMessage, "")
            d = server.publish("a really special message")
            d.addCallback(checkPublish)

        s = ZmqPubConnection(ZmqEndpoint(ZmqEndpointType.bind, "inproc://#1"))
        self.patch(s, 'send', fakeSend)
        d = s.listen(self.factory)
        d.addCallback(checkListen)
        return d
Exemple #19
0
 def start(self):
     endpoint = ZmqEndpoint(ZmqEndpointType.bind, self.address)
     self.addEndpoints([endpoint])
Exemple #20
0
 def test_repr(self):
     expected = ("ZmqTestReceiver(ZmqFactory(), "
                 "[ZmqEndpoint(type='bind', address='inproc://#1')])")
     result = ZmqTestReceiver(
         self.factory, ZmqEndpoint(ZmqEndpointType.bind, "inproc://#1"))
     self.failUnlessEqual(expected, repr(result))
Exemple #21
0
 def test_init(self):
     ZmqTestReceiver(self.factory,
                     ZmqEndpoint(ZmqEndpointType.bind, "inproc://#1"))
     ZmqTestSender(self.factory,
                   ZmqEndpoint(ZmqEndpointType.connect, "inproc://#1"))
Exemple #22
0
 def start(self):
     endpoint = ZmqEndpoint(ZmqEndpointType.connect, self.address)
     self.addEndpoints([endpoint])
Exemple #23
0
 def setUp(self):
     self.factory = ZmqFactory()
     b = ZmqEndpoint(ZmqEndpointType.bind, "ipc://#3")
     self.r = ZmqTestREPConnection(self.factory, b)
     c = ZmqEndpoint(ZmqEndpointType.connect, "ipc://#3")
     self.s = ZmqREQConnection(self.factory, c, identity=b'client')
Exemple #24
0
 def test_repr(self):
     expected = ("ZmqTestReceiver(ZmqFactory(), "
                 "(ZmqEndpoint(type='bind', address='inproc://#1'),))")
     r = ZmqTestReceiver(ZmqEndpoint(ZmqEndpointType.bind, "inproc://#1"))
     r.connect(self.factory)
     self.failUnlessEqual(expected, repr(r))