コード例 #1
0
    def setUp(self):
        kwargs_fwdr = {
            "spec": "file:../txamqp_ext/spec/amqp0-9-1.xml",
            "parallel": True,
            "full_content": True,
            "skip_decoding": True,
            "skip_encoding": True,
        }
        self.forwarder = AmqpReconnectingFactory(self, **kwargs_fwdr)
        self.forwarder.setup_read_queue(
            EXC, RK2, self.fwdr_handle, queue_name="forwarder", durable=False, auto_delete=True
        )

        self.backwarder = AmqpReconnectingFactory(self, **kwargs_fwdr)
        self.backwarder.setup_read_queue(
            EXC, RK3, self.fwdr_handle, queue_name="backwarder", durable=False, auto_delete=True
        )

        kwargs_common = {
            "spec": "file:../txamqp_ext/spec/amqp0-9-1.xml",
            "parallel": True,
            "exchange": EXC,
            "serialization": "content_based",
            "rk": RK2,
        }
        kwargs_json = copy(kwargs_common)
        kwargs_json["default_content_type"] = "application/json"
        self.push_json = AmqpSynFactory(self, **kwargs_json)
        self.push_json.setup_read_queue(EXC, "route_json", durable=False, auto_delete=True)

        kwargs_pickle = copy(kwargs_common)
        kwargs_pickle["default_content_type"] = "application/x-pickle"
        self.push_pickle = AmqpSynFactory(self, **kwargs_pickle)
        self.push_pickle.setup_read_queue(EXC, "route_pickle", durable=False, auto_delete=True)

        kwargs_responder = {
            "spec": "file:../txamqp_ext/spec/amqp0-9-1.xml",
            "parallel": True,
            "push_back": True,
            "full_content": True,
            "serialization": "content_based",
            "default_content_type": "application/json",
        }
        self.responder = AmqpReconnectingFactory(self, **kwargs_responder)
        self.responder.setup_read_queue(
            EXC, RK, self.msg_handle, queue_name="responder", durable=False, auto_delete=True
        )

        return DeferredList(
            [
                self.forwarder.connected,
                self.backwarder.connected,
                self.push_json.connected,
                self.push_pickle.connected,
                self.responder.connected,
            ]
        )
コード例 #2
0
ファイル: test_factory.py プロジェクト: winshuai/txamqp_ext
 def setUp(self):
     kwargs = {'spec': 'file:../txamqp_ext/spec/amqp0-8.xml',
               'parallel': False}
     self.f = AmqpReconnectingFactory(self, **kwargs)
     self.f.declare([{'type':'exchange',
                             'kwargs': {'exchange': EXC,
                                        'durable': True,
                                        'type': 'topic'}},
                            ])
コード例 #3
0
 def setUp(self):
     kwargs = {
         "spec": "file:../txamqp_ext/spec/amqp0-8.xml",
         "parallel": False,
         "serialization": "cPickle",
         "full_content": True,
         "skip_decoding": True,
     }
     self.f = AmqpReconnectingFactory(self, **kwargs)
コード例 #4
0
ファイル: test_factory.py プロジェクト: winshuai/txamqp_ext
class FactoryB(TestCase):
    timeout = 10
    def setUp(self):
        kwargs = {'spec': 'file:../txamqp_ext/spec/amqp0-8.xml',
                  'parallel': False}
        self.f = AmqpReconnectingFactory(self, **kwargs)

    def test_01_basic_setup_receive(self):
        def message_get(msg):
            print msg
        d = self.f.setup_read_queue(EXC, RK, message_get,
                                    queue_name=QUE,
                                    durable=True,
                                    auto_delete=False)
        return d

    def test_02_basic_send_and_receive(self):
        d1 = Deferred()
        txt = 'test_message'
        def message_get(msg):
            assert msg==txt, 'MSG: %r TXT: %r'%(msg, txt)
            d1.callback(msg)
        d = self.f.setup_read_queue(EXC, RK, message_get,
                                    no_ack=False,
                                    auto_delete=True,
                                    durable=False)
        def send_msg(_none):
            c = txt
            self.f.send_message(EXC, RK, c)
        def rloop_started(_none):
            d2 = self.f.client.on_read_loop_started()
            d2.addCallback(send_msg)
            return d2
        d.addCallback(rloop_started)
        return DeferredList([d, d1])

    def tearDown(self):
        return self.f.shutdown_factory()
コード例 #5
0
ファイル: test_factory.py プロジェクト: cybergrind/txamqp_ext
class FactoryF(FactoryD):
    def setUp(self):
        kwargs = {'spec': 'file:../txamqp_ext/spec/amqp0-8.xml',
                  'exchange': EXC,
                  'full_content': True,
                  'delivery_mode': 1,
                  'serialization': 'cPickle',
                  'parallel': False,
                  'rk': RK2 }
        kwargs2 = copy(kwargs)
        kwargs2['push_back'] = True
        self.f = AmqpSynFactory(self, **kwargs)
        self.f.setup_read_queue(EXC,
                                durable=False,
                                auto_delete=True,
                                exclusive=True)
        self.f2 = AmqpReconnectingFactory(self, **kwargs2)
        self.f2.setup_read_queue(EXC, RK2, self._test_echoer,
                                 durable=False,
                                 auto_delete=True,
                                 exclusive=True)
        dl = DeferredList([self.f.connected, self.f2.connected])
        return dl
コード例 #6
0
ファイル: test_encoding.py プロジェクト: winshuai/txamqp_ext
class TestEncoding(TestCase):
    timeout = 3

    def setUp(self):
        kwargs = {'spec': 'file:../txamqp_ext/spec/amqp0-8.xml',
                  'parallel': False,
                  'serialization': 'cjson'}
        self.f = AmqpReconnectingFactory(self, **kwargs)
        return self.f.connected


    def test_001_fail_encoding(self):
        d = Deferred()
        d1 = Deferred()

        def _failed(failure):
            failure.trap(cjson.EncodeError)
            d.callback(True)

        self.f.send_message(EXC, RK, {1: self}, callback=d1).addErrback(_failed)
        return DeferredList([d])

    def test_002_skip_encoding(self):
        d = Deferred()
        d1 = Deferred()
        d2 = Deferred()

        def _ok(_any):
            d.callback(True)

        def _ok_msg(_any):
            pass
        def _err_msg(_any, msg):
            d2.callback(True)

        self.f.setup_read_queue(EXC, RK, _ok_msg,
                                queue_name=QUE, durable=True,
                                auto_delete=False,
                                requeue_on_error=False,
                                read_error_handler=_err_msg)
        self.f.send_message(EXC, RK, {1: self}, callback=d1,
                            skip_encoding=True).addCallback(_ok)

        return DeferredList([d, d2])

    def tearDown(self):
        return self.f.shutdown_factory()
コード例 #7
0
ファイル: test_factory.py プロジェクト: winshuai/txamqp_ext
 def setUp(self):
     kwargs = {'spec': 'file:../txamqp_ext/spec/amqp0-8.xml',
               'parallel': False,
               'exchange': EXC,
               'full_content': True,
               'delivery_mode': 1,
               'timeout': 10,
               'rk': RK2 }
     self.f = AmqpSynFactory(self, **kwargs)
     self.f.setup_read_queue(EXC, RK3,
                             durable=False,
                             auto_delete=True,
                             exclusive=True)
     self.f2 = AmqpReconnectingFactory(self, **kwargs)
     d = self.f2.setup_read_queue(EXC, RK2, self._test_echoer,
                                  durable=False,
                                  auto_delete=True,
                                  exclusive=True)
     return DeferredList([self.f.connected, self.f2.connected])
コード例 #8
0
ファイル: test_factory.py プロジェクト: winshuai/txamqp_ext
 def setUp(self):
     kwargs = {'spec': 'file:../txamqp_ext/spec/amqp0-8.xml',
               'parallel': False}
     self.f = AmqpReconnectingFactory(self, **kwargs)
コード例 #9
0
ファイル: test_factory.py プロジェクト: winshuai/txamqp_ext
class FactoryD(TestCase):
    timeout = 10
    def setUp(self):
        kwargs = {'spec': 'file:../txamqp_ext/spec/amqp0-8.xml',
                  'parallel': False,
                  'exchange': EXC,
                  'full_content': True,
                  'timeout': 1,
                  'delivery_mode': 1,
                  'rk': RK2 }
        kwargs2 = copy(kwargs)
        kwargs2['push_back'] = True
        self.f = AmqpSynFactory(self, **kwargs)
        self.f.setup_read_queue(EXC,
                                durable=False,
                                auto_delete=True,
                                exclusive=True)
        self.f2 = AmqpReconnectingFactory(self, **kwargs2)
        d = self.f2.setup_read_queue(EXC, RK2, self._test_echoer,
                                     durable=False,
                                     auto_delete=True,
                                     exclusive=True)
        dl = DeferredList([self.f.connected, self.f2.connected])
        return dl

    def _test_echoer(self, msg, d):
        tid=msg['headers'].get('tid')
        return d.callback(tid)

    def test_01_pb_basic_start(self):
        pass

    def test_02_pb_send_rec(self):
        d1 = Deferred()
        def _get_result(result):
            print 'GOT RESULT: %r'%result
            d1.callback(True)
        def _push_msg():
            print 'PUSH MESSAGE'
            d = self.f.push_message('test')
            d.addCallback(_get_result)
        reactor.callLater(0.05, _push_msg)
        return DeferredList([d1])

    def test_03_pb_send_rec_many(self):
        d = {}
        def _get_result(result):
            tid = result['headers'][self.f.tid_name]
            assert result.body == tid, 'body: %r'%result.body
            d[tid].callback(True)
        for i in xrange(250):
            tid = str(int(time.time()*1e7))
            d[tid] = Deferred()
            d1 = self.f.push_message(tid, tid=tid)
            d1.addCallback(_get_result)
            d1.addErrback(self._err)
        return DeferredList(d.values())

    def test_04_reconnect(self):
        d = Deferred()
        def _sleep(n):
            s = Deferred()
            reactor.callLater(n, s.callback, True)
            return s
        def _get_result(result):
            d.callback(True)
        def _no_result(failure):
            print '%s'%failure.getTraceback()
            raise Exception('No result')
        def _resend(failure):
            d1 = self.f.push_message('test', timeout_sec=5)
            d1.addCallbacks(_get_result, _no_result)
        def sl(failure):
            s = _sleep(3)
            print 'Resend. %s'%failure.getTraceback()
            s.addCallback(_resend)
        def _ecb(*_any):
            raise Exception('ERR: %r'%(_any))
        def push_first():
            d1 = self.f.push_message('test', timeout_sec=0.5)
            d1.addCallback(_ecb)
            d1.addErrback(sl)
        self.f.client.shutdown_protocol()
        push_first()
        return d

    def _err(self, failure):
        raise failure

    def tearDown(self):
        dl = []
        dl.append(self.f.shutdown_factory())
        dl.append(self.f2.shutdown_factory())
        return DeferredList(dl)
コード例 #10
0
ファイル: test_factory.py プロジェクト: winshuai/txamqp_ext
class FactoryA(TestCase):
    timeout = 10
    def setUp(self):
        kwargs = {'spec': 'file:../txamqp_ext/spec/amqp0-8.xml',
                  'parallel': False}
        self.f = AmqpReconnectingFactory(self, **kwargs)
        self.f.declare([{'type':'exchange',
                                'kwargs': {'exchange': EXC,
                                           'durable': True,
                                           'type': 'topic'}},
                               ])
        
    def test_001_basic_connect(self):
        return self.f.connected

    def test_002_reconnect_test(self):
        d = self.f.connected
        c = 'test_one'
        self.f.send_message(EXC, RK, c)

        def _analyze(_none):
            c = 'test_line'
            self.f.send_message(EXC, RK, c)
            print 'RETRIES: %r'%self.f.retries
            print 'CURR: %r'%self.f.processing_send
            assert len(self.f.dropped_send_messages.pending) == 1,\
                        'Dropped size: %r'%len(self.f.dropped_send_messages.pending)
        def p(_none):
            self.f.add_trap(self.f.client._trap_closed)
            c = Content({'body':'one'})
            self.f.send_message(EXC, RK, c, tx=True)
            dl = []
            for i in xrange(2):
                c = 'test_line'
                cb = Deferred()
                dl.append(cb)
                self.f.send_message(EXC, RK, c, callback=cb)
            return DeferredList(dl)
        return d.addCallback(p)

    def test_003_close_client(self):
        d = self.f.connected
        def _sd(_none):
            d2 = Deferred()
            reactor.callLater(5, d2.callback, None)
            d1 = self.f.client.shutdown_protocol()
            return DeferredList([d1, d2])
        d.addCallback(_sd)
        return d

    def test_004_declare(self):
        self.f.declare([{'kwargs': {'exchange': 'test2',
                                    'auto_delete': False,
                                    'durable': True,
                                    'type': 'topic',},
                         'type': 'exchange'}])
        return self.f.connected

    def _err(self, failure):
        print failure.getTraceback()

    def tearDown(self):
        return self.f.shutdown_factory()
コード例 #11
0
ファイル: test_factory.py プロジェクト: winshuai/txamqp_ext
class FactoryC(TestCase):
    timeout = 10
    def setUp(self):
        kwargs = {'spec': 'file:../txamqp_ext/spec/amqp0-8.xml',
                  'parallel': False,
                  'exchange': EXC,
                  'full_content': True,
                  'delivery_mode': 1,
                  'timeout': 10,
                  'rk': RK2 }
        self.f = AmqpSynFactory(self, **kwargs)
        self.f.setup_read_queue(EXC, RK3,
                                durable=False,
                                auto_delete=True,
                                exclusive=True)
        self.f2 = AmqpReconnectingFactory(self, **kwargs)
        d = self.f2.setup_read_queue(EXC, RK2, self._test_echoer,
                                     durable=False,
                                     auto_delete=True,
                                     exclusive=True)
        return DeferredList([self.f.connected, self.f2.connected])

    def _test_echoer(self, msg):
        c = Content(msg.body)
        c['headers'] = {'tid': msg['headers'].get('tid')}
        c['tid'] = msg['headers'].get('tid')
        #c['tid'] = msg['tid']
        self.f2.send_message(EXC, RK3, c, tid=msg['headers'].get('tid'))

    def test_01_basic_start(self):
        pass

    def test_02_send_rec(self):
        d1 = Deferred()
        def _get_result(result):
            print 'GOT RESULT: %r'%result
            d1.callback(True)
        d = self.f.push_message('test')
        d.addCallback(_get_result)
        return DeferredList([d1, d])

    def test_03_send_rec_many(self):
        d = {}
        def _get_result(result):
            tid = result['headers']['tid']
            assert result.body == tid, 'body: %r'%result.body
            d[tid].callback(True)
        for i in xrange(500):
            tid = str(int(time.time()*1e7))
            d[tid] = Deferred()
            d1 = self.f.push_message(tid, tid=tid)
            d1.addCallback(_get_result)
            d1.addErrback(self._err)
        return DeferredList(d.values())

    def _err(self, failure):
        raise failure

    def tearDown(self):
        dl = []
        dl.append(self.f.shutdown_factory())
        dl.append(self.f2.shutdown_factory())
        return DeferredList(dl)
コード例 #12
0
class TestContentTypes(TestCase):
    timeout = 4

    def setUp(self):
        kwargs_fwdr = {
            "spec": "file:../txamqp_ext/spec/amqp0-9-1.xml",
            "parallel": True,
            "full_content": True,
            "skip_decoding": True,
            "skip_encoding": True,
        }
        self.forwarder = AmqpReconnectingFactory(self, **kwargs_fwdr)
        self.forwarder.setup_read_queue(
            EXC, RK2, self.fwdr_handle, queue_name="forwarder", durable=False, auto_delete=True
        )

        self.backwarder = AmqpReconnectingFactory(self, **kwargs_fwdr)
        self.backwarder.setup_read_queue(
            EXC, RK3, self.fwdr_handle, queue_name="backwarder", durable=False, auto_delete=True
        )

        kwargs_common = {
            "spec": "file:../txamqp_ext/spec/amqp0-9-1.xml",
            "parallel": True,
            "exchange": EXC,
            "serialization": "content_based",
            "rk": RK2,
        }
        kwargs_json = copy(kwargs_common)
        kwargs_json["default_content_type"] = "application/json"
        self.push_json = AmqpSynFactory(self, **kwargs_json)
        self.push_json.setup_read_queue(EXC, "route_json", durable=False, auto_delete=True)

        kwargs_pickle = copy(kwargs_common)
        kwargs_pickle["default_content_type"] = "application/x-pickle"
        self.push_pickle = AmqpSynFactory(self, **kwargs_pickle)
        self.push_pickle.setup_read_queue(EXC, "route_pickle", durable=False, auto_delete=True)

        kwargs_responder = {
            "spec": "file:../txamqp_ext/spec/amqp0-9-1.xml",
            "parallel": True,
            "push_back": True,
            "full_content": True,
            "serialization": "content_based",
            "default_content_type": "application/json",
        }
        self.responder = AmqpReconnectingFactory(self, **kwargs_responder)
        self.responder.setup_read_queue(
            EXC, RK, self.msg_handle, queue_name="responder", durable=False, auto_delete=True
        )

        return DeferredList(
            [
                self.forwarder.connected,
                self.backwarder.connected,
                self.push_json.connected,
                self.push_pickle.connected,
                self.responder.connected,
            ]
        )

    def tearDown(self):
        return DeferredList(
            [
                self.forwarder.shutdown_factory(),
                self.backwarder.shutdown_factory(),
                self.push_json.shutdown_factory(),
                self.push_pickle.shutdown_factory(),
                self.responder.shutdown_factory(),
            ]
        )

    @inlineCallbacks
    def msg_handle(self, full_msg, d):
        yield d.callback(full_msg)

    @inlineCallbacks
    def fwdr_handle(self, msg):
        real_back = msg["headers"].get("real_rb")
        if not real_back:
            msg["headers"]["real_rb"] = msg["headers"]["route_back"]
            msg["headers"]["route_back"] = RK3
            yield self.forwarder.send_message(EXC, RK, msg)
        else:
            yield self.backwarder.send_message(EXC, msg["headers"]["real_rb"], msg)

    def test_0000(self):
        return

    def test_0001(self):
        d_json = Deferred()
        d_pickle = Deferred()

        @inlineCallbacks
        def run_json():
            yield self.push_json.push_message({"test_message": 1})
            d_json.callback(True)

        @inlineCallbacks
        def run_pickle():
            yield self.push_pickle.push_message({"test_message": 1})
            d_pickle.callback(True)

        run_json()
        run_pickle()
        return DeferredList([d_json, d_pickle])
コード例 #13
0
class TestEncoding(TestCase):
    timeout = 4

    def setUp(self):
        kwargs = {
            "spec": "file:../txamqp_ext/spec/amqp0-8.xml",
            "parallel": False,
            "serialization": "cPickle",
            "full_content": True,
            "skip_decoding": True,
        }
        self.f = AmqpReconnectingFactory(self, **kwargs)

    def test_001_fail_encoding(self):
        d = Deferred()
        d1 = Deferred()

        def _failed(failure):
            failure.trap(TypeError)
            d.callback(True)

        self.f.send_message(EXC, RK, {1: self}, callback=d1).addErrback(_failed)
        return DeferredList([d, self.f.connected])

    @inlineCallbacks
    def test_002_skip_encoding(self):
        d = Deferred()
        d1 = Deferred()
        d2 = Deferred()

        encoded_body = json.dumps({"test_message": "asdf"})
        encoded = Content(encoded_body)
        encoded["content type"] = "application/json"

        def _ok(_any):
            d.callback(True)

        def _ok_msg(_any):
            assert _any["content type"] == "application/json", _any
            assert encoded_body == _any.body, "Got %r" % _any.body
            d2.callback(True)

        def _err_msg(_any, msg):
            print "Fail002: %r" % msg
            d2.errback(True)
            return {}

        yield self.f.setup_read_queue(
            EXC,
            RK,
            _ok_msg,
            queue_name=EQUE,
            durable=False,
            auto_delete=True,
            requeue_on_error=False,
            read_error_handler=_err_msg,
        )
        yield self.f.client.on_read_loop_started()
        self.f.send_message(EXC, RK, encoded, callback=d1, skip_encoding=True).addCallback(_ok)

        yield DeferredList([d, d2])

    @inlineCallbacks
    def test_003_set_content_type(self):
        d = Deferred()
        d1 = Deferred()
        d2 = Deferred()

        encoded = {"test_message": "asdf"}

        def _ok(_any):
            d.callback(True)

        def _ok_msg(_any):
            assert _any["content type"] == "application/x-pickle", _any
            assert encoded == cPickle.loads(_any.body), "Got %r" % _any.body
            d2.callback(True)

        def _err_msg(_any, msg):
            print "REJ: %r" % msg
            d2.errback(True)
            return {}

        yield self.f.setup_read_queue(
            EXC,
            RK,
            _ok_msg,
            queue_name=EQUE,
            durable=False,
            auto_delete=True,
            requeue_on_error=False,
            read_error_handler=_err_msg,
        )
        yield self.f.client.on_read_loop_started()
        self.f.send_message(EXC, RK, encoded, callback=d1, skip_encoding=False).addCallback(_ok)

        yield DeferredList([d, d2])

    @inlineCallbacks
    def test_004_msgpack(self):
        d = Deferred()
        d1 = Deferred()
        d2 = Deferred()

        msg_body = {"test_message": "asdf"}
        encoded_body = msgpack.dumps(msg_body)
        encoded_msg = Content(encoded_body)
        encoded_msg["content type"] = "application/x-msgpack"
        self.f.skip_decoding = False
        self.f.serialization = "content_based"

        def _ok(_any):
            d.callback(True)

        def _ok_msg(_any):
            assert _any["content type"] == "application/x-msgpack", _any
            assert msg_body == _any.body, "Got %r" % _any.body
            d2.callback(True)

        def _err_msg(_any, msg):
            print "Fail002: %r" % msg
            d2.errback(True)
            return {}

        yield self.f.setup_read_queue(
            EXC,
            RK,
            _ok_msg,
            queue_name=EQUE,
            durable=False,
            auto_delete=True,
            requeue_on_error=False,
            read_error_handler=_err_msg,
        )
        yield self.f.client.on_read_loop_started()
        self.f.send_message(EXC, RK, encoded_msg, callback=d1, skip_encoding=True).addCallback(_ok)

        yield DeferredList([d, d2])

    @inlineCallbacks
    def tearDown(self):
        if hasattr(self.f.protocol, "read_chan"):
            yield self.f.protocol.read_chan.queue_delete(queue=EQUE)
        yield self.f.shutdown_factory()
コード例 #14
0
ファイル: test_encoding.py プロジェクト: winshuai/txamqp_ext
 def setUp(self):
     kwargs = {'spec': 'file:../txamqp_ext/spec/amqp0-8.xml',
               'parallel': False,
               'serialization': 'cjson'}
     self.f = AmqpReconnectingFactory(self, **kwargs)
     return self.f.connected