def relay_event(issuer, key, namespace, queuename, event):
    # TODO can do this faster by persisting something? Maybe the Messenger? How to do that with celery threading?
    messenger = Messenger()
    message = Message()
    message.address = "amqps://{issuer}:{key}@{namespace}.servicebus.windows.net/{queuename}".format(
        issuer = issuer,
        key = urllib.quote(key, ""),
        namespace = namespace,
        queuename = queuename)

    message.properties = {}
    # TODO align with Service Bus / Service Tool team
    message.properties[u"DefineProject"] = event['project']
    del event['project']
    message.properties[u"EventCategory"] = event['category']
    del event['category']
    if 'ticket' in event:
        message.properties[u"Ticket"] = event['ticket']
        del event['ticket']
        message.properties[u"Actor"] = event['author']
        del event['author']

    message.body = event
    messenger.put(message)
    messenger.send()
Example #2
0
 def on_link_local_open(self, event):
     msg = Message()
     msg.properties = {u"opcode": "route"}
     msg.body = (self.address, (self.host, self.port, self.redirect_target), None)
     if self.policy:
         msg.body += (self.policy,)
     msg.send(event.link)
     if self.agent:
         msg.body = (self.agent, (self.host, self.port, None), None)
         msg.send(event.link)
Example #3
0
 def on_link_remote_open(self, event):
     msg = Message()
     msg.properties = {u"opcode": "route"}
     msg.body = (self.address, (self.host, self.port, self.redirect_target),
                 None)
     if self.policy:
         msg.body += (self.policy, )
     self.sender.send(msg)
     if self.agent:
         msg.body = (self.agent, (self.host, self.port, None), None)
         self.sender.send(msg)
 def test_08a_test_strip_message_annotations_out_timeout(self):
     addr = self.router.addresses[3]+"/strip_message_annotations_out_timeout/1"
     
     M1 = self.messenger()
     M2 = self.messenger()
     
     M1.start()
     M2.start()
     M2.timeout = 0.5
     M2.subscribe(addr)
     
     ingress_message = Message()
     ingress_message.address = addr
     ingress_message.body = {'message': 'Hello World!'}
     
     ingress_message_annotations = {'x-opt-qd.ingress': '0/QDR', 'x-opt-qd.trace': ['0/QDR']}
     ingress_message.annotations = ingress_message_annotations
     
     #Put and send the message
     M1.put(ingress_message)
     M1.send()
     
     timed_out = False
     try:
         # Receive the message, this should timeout because the router thinks that this message has looped.
         M2.recv(1)
     except Timeout:
         timed_out = True
     
     self.assertTrue(timed_out)
     
     M1.stop()
     M2.stop()
    def test_08a_test_strip_message_annotations_both_custom(self):
        addr = self.router.addresses[2]+"/strip_message_annotations_both/1"

        M1 = self.messenger()
        M2 = self.messenger()

        M1.start()
        M2.start()
        M2.subscribe(addr)

        ingress_message = Message()
        ingress_message.address = addr
        ingress_message.body = {'message': 'Hello World!'}

        # Only annotations with prefix "x-opt-qd." will be stripped
        ingress_message_annotations = {'stay': 'humble', 'x-opt-qd': 'work'}
        ingress_message.annotations = ingress_message_annotations

        #Put and send the message
        M1.put(ingress_message)
        M1.send()

        # Receive the message
        M2.recv(1)
        egress_message = Message()
        M2.get(egress_message)

        self.assertEqual(egress_message.annotations, ingress_message_annotations)

        M1.stop()
        M2.stop()
    def test_simple_pre_settled(self):
        addr = self.routers[0].addresses[4]+"/test/1"
        M1 = self.messenger()
        M2 = self.messenger()

        M1.start()
        M2.start()
        M2.subscribe(addr)

        tm = Message()
        rm = Message()

        tm.address = addr
        for i in range(100):
            tm.body = {'number': i}
            M1.put(tm)
        M1.send()

        for i in range(100):
            M2.recv(1)
            M2.get(rm)
            self.assertEqual(i, rm.body['number'])

        M1.stop()
        M2.stop()
Example #7
0
def zaqar_to_proton(message):
    """Convert a message retrieved from storage to a Proton message"""
    msg = Message()

    msg.ttl = message.get('ttl')
    msg.body = message.get('body')

    # NOTE(vkmc) This won't work for now - there is no 'amqp10' field yet
    if message.get('amqp10'):
        msg.priority = message.get('amqp10').get('priority')
        msg.first_acquirer = message.get('amqp10').get('first_acquirer')
        msg.delivery_count = message.get('amqp10').get('delivery_count')
        msg.id = message.get('amqp10').get('id'),
        msg.user_id = message.get('amqp10').get('user_id')
        msg.address = message.get('amqp10').get('address')
        msg.subject = message.get('amqp10').get('subject')
        msg.reply_to = message.get('amqp10').get('reply_to')
        msg.correlation_id = message.get('amqp10').get('correlation_id')
        msg.content_type = message.get('amqp10').get('content_type')
        msg.content_encoding = message.get('amqp10').get('content_encoding')
        msg.expiry_time = message.get('amqp10').get('expiry_time')
        msg.creation_time = message.get('amqp10').get('creation_time'),
        msg.group_id = message.get('amqp10').get('group_id')
        msg.group_sequence = message.get('amqp10').get('group_sequence')
        msg.reply_to_group_id = message.get('amqp10').get('reply_to_group_id')
        msg.format = message.get('amqp10').get('format')

    return msg
    def test_16_delivery_annotations(self):
        addr = "amqp:/delivery_annotations.1"
        M1 = self.messenger()
        M2 = self.messenger()

        M1.route("amqp:/*", self.routers[0].addresses[0]+"/$1")
        M2.route("amqp:/*", self.routers[1].addresses[0]+"/$1")
        M1.start()
        M2.start()
        M2.subscribe(addr)

        tm = Message()
        rm = Message()

        self.routers[0].wait_address("delivery_annotations.1", 0, 1)

        tm.annotations = {'a1': 'a1', 'b1': 'b2'}
        tm.address = addr
        tm.instructions = {'work': 'hard', 'stay': 'humble'}
        tm.body = {'number': 38}
        M1.put(tm)
        M1.send()

        M2.recv(1)
        M2.get(rm)
        self.assertEqual(38, rm.body['number'])

        M1.stop()
        M2.stop()
    def test_08a_test_strip_message_annotations_both_custom(self):
        addr = self.router.addresses[2] + "/strip_message_annotations_both/1"

        M1 = self.messenger()
        M2 = self.messenger()

        M1.start()
        M2.start()
        M2.subscribe(addr)

        ingress_message = Message()
        ingress_message.address = addr
        ingress_message.body = {'message': 'Hello World!'}

        # Only annotations with prefix "x-opt-qd." will be stripped
        ingress_message_annotations = {'stay': 'humble', 'x-opt-qd': 'work'}
        ingress_message.annotations = ingress_message_annotations

        #Put and send the message
        M1.put(ingress_message)
        M1.send()

        # Receive the message
        M2.recv(1)
        egress_message = Message()
        M2.get(egress_message)

        self.assertEqual(egress_message.annotations,
                         ingress_message_annotations)

        M1.stop()
        M2.stop()
Example #10
0
    def test_simple_pre_settled(self):

        if not is_ipv6_enabled():
            return self.skipTest("Skipping test..IPV6 not enabled")

        addr = self.routers[0].addresses[4] + "/test/1"
        M1 = self.messenger()
        M2 = self.messenger()

        M1.start()
        M2.start()
        M2.subscribe(addr)

        tm = Message()
        rm = Message()

        tm.address = addr
        for i in range(100):
            tm.body = {'number': i}
            M1.put(tm)
        M1.send()

        for i in range(100):
            M2.recv(1)
            M2.get(rm)
            self.assertEqual(i, rm.body['number'])

        M1.stop()
        M2.stop()
    def test_01_pre_settled(self):
        addr = "amqp:/pre_settled.1"
        M1 = self.messenger()
        M2 = self.messenger()

        M1.route("amqp:/*", self.routers[0].addresses[0]+"/$1")
        M2.route("amqp:/*", self.routers[1].addresses[0]+"/$1")

        M2.subscribe(addr)

        tm = Message()
        rm = Message()

        self.routers[0].wait_address("pre_settled.1", 0, 1)

        tm.address = addr
        for i in range(100):
            tm.body = {'number': i}
            M1.put(tm)
        M1.send()

        for i in range(100):
            M2.recv(1)
            M2.get(rm)
            self.assertEqual(i, rm.body['number'])

        M1.stop()
        M2.stop()
    def test_03_propagated_disposition(self):
        addr = "amqp:/unsettled/2"
        M1 = self.messenger()
        M2 = self.messenger()

        M1.route("amqp:/*", self.routers[0].addresses[0]+"/$1")
        M2.route("amqp:/*", self.routers[1].addresses[0]+"/$1")

        M1.outgoing_window = 5
        M2.incoming_window = 5

        M1.start()
        M2.start()
        M2.subscribe(addr)
        self.routers[0].wait_address("unsettled/2", 0, 1)

        tm = Message()
        rm = Message()

        tm.address = addr
        tm.body = {'number': 0}

        ##
        ## Test ACCEPT
        ##
        tx_tracker = M1.put(tm)
        M1.send(0)
        M2.recv(1)
        rx_tracker = M2.get(rm)
        self.assertEqual(0, rm.body['number'])
        self.assertEqual(PENDING, M1.status(tx_tracker))

        M2.accept(rx_tracker)
        M2.settle(rx_tracker)

        M2.flush()
        M1.flush()

        self.assertEqual(ACCEPTED, M1.status(tx_tracker))

        ##
        ## Test REJECT
        ##
        tx_tracker = M1.put(tm)
        M1.send(0)
        M2.recv(1)
        rx_tracker = M2.get(rm)
        self.assertEqual(0, rm.body['number'])
        self.assertEqual(PENDING, M1.status(tx_tracker))

        M2.reject(rx_tracker)
        M2.settle(rx_tracker)

        M2.flush()
        M1.flush()

        self.assertEqual(REJECTED, M1.status(tx_tracker))

        M1.stop()
        M2.stop()
    def test_02b_disp_to_closed_connection(self):
        addr = self.address+"/pre_settled/2"
        M1 = self.messenger()
        M2 = self.messenger()


        M1.outgoing_window = 5
        M2.incoming_window = 5

        M1.start()
        M2.start()
        M2.subscribe(addr)

        tm = Message()
        rm = Message()

        tm.address = addr
        for i in range(2):
            tm.body = {'number': i}
            M1.put(tm)
        M1.send(0)
        M1.stop()

        for i in range(2):
            M2.recv(1)
            trk = M2.get(rm)
            M2.accept(trk)
            M2.settle(trk)
            self.assertEqual(i, rm.body['number'])

        M2.stop()
    def test_02b_disp_to_closed_connection(self):
        addr = self.address + "/pre_settled/2"
        M1 = self.messenger()
        M2 = self.messenger()

        M1.outgoing_window = 5
        M2.incoming_window = 5

        M1.start()
        M2.start()
        M2.subscribe(addr)

        tm = Message()
        rm = Message()

        tm.address = addr
        for i in range(2):
            tm.body = {'number': i}
            M1.put(tm)
        M1.send(0)
        M1.stop()

        for i in range(2):
            M2.recv(1)
            trk = M2.get(rm)
            M2.accept(trk)
            M2.settle(trk)
            self.assertEqual(i, rm.body['number'])

        M2.stop()
    def test_13_to_override(self):
        addr = self.address + "/toov/1"
        M1 = self.messenger()
        M2 = self.messenger()

        M1.start()
        M2.start()
        M2.subscribe(addr)

        tm = Message()
        rm = Message()

        tm.address = addr

        ##
        ## Pre-existing TO
        ##
        tm.annotations = {'x-opt-qd.to': 'toov/1'}
        for i in range(10):
            tm.body = {'number': i}
            M1.put(tm)
        M1.send()

        for i in range(10):
            M2.recv(1)
            M2.get(rm)
            self.assertEqual(i, rm.body['number'])
            ma = rm.annotations
            self.assertEqual(ma.__class__, dict)
            self.assertEqual(ma['x-opt-qd.to'], 'toov/1')

        M1.stop()
        M2.stop()
    def test_03_propagated_disposition(self):
        addr = "amqp:/unsettled/2"
        M1 = self.messenger()
        M2 = self.messenger()

        M1.route("amqp:/*", self.routers[0].addresses[0] + "/$1")
        M2.route("amqp:/*", self.routers[1].addresses[0] + "/$1")

        M1.outgoing_window = 5
        M2.incoming_window = 5

        M1.start()
        M2.start()
        M2.subscribe(addr)
        self.routers[0].wait_address("unsettled/2", 0, 1)

        tm = Message()
        rm = Message()

        tm.address = addr
        tm.body = {'number': 0}

        ##
        ## Test ACCEPT
        ##
        tx_tracker = M1.put(tm)
        M1.send(0)
        M2.recv(1)
        rx_tracker = M2.get(rm)
        self.assertEqual(0, rm.body['number'])
        self.assertEqual(PENDING, M1.status(tx_tracker))

        M2.accept(rx_tracker)
        M2.settle(rx_tracker)

        M2.flush()
        M1.flush()

        self.assertEqual(ACCEPTED, M1.status(tx_tracker))

        ##
        ## Test REJECT
        ##
        tx_tracker = M1.put(tm)
        M1.send(0)
        M2.recv(1)
        rx_tracker = M2.get(rm)
        self.assertEqual(0, rm.body['number'])
        self.assertEqual(PENDING, M1.status(tx_tracker))

        M2.reject(rx_tracker)
        M2.settle(rx_tracker)

        M2.flush()
        M1.flush()

        self.assertEqual(REJECTED, M1.status(tx_tracker))

        M1.stop()
        M2.stop()
    def test_01_pre_settled(self):
        addr = self.address + "/pre_settled/1"
        M1 = self.messenger()
        M2 = self.messenger()

        M1.start()
        M2.start()
        M2.subscribe(addr)

        tm = Message()
        rm = Message()

        tm.address = addr
        for i in range(100):
            tm.body = {'number': i}
            M1.put(tm)
        M1.send()

        for i in range(100):
            M2.recv(1)
            M2.get(rm)
            self.assertEqual(i, rm.body['number'])

        M1.stop()
        M2.stop()
 def on_sendable(self, event):
     print(15)
     body = {"attributeNames": ['name', 'role', 'name']}
     properties = {
         "operation": 'QUERY',
         'type': 'org.amqp.management',
         'name': "self",
         'entityType': 'org.apache.qpid.dispatch.listener'
     }
     address = '/$management'
     # reply_to = "receiver.remote.attach.source.address"
     # reply_to = "myManagement"
     reply_to = "/"
     print('reply_to ', reply_to)
     while event.sender.credit and self.sent < self.total:
         msg = Message(id=(self.sent + 1))
         msg.body = body
         msg.properties = properties
         msg.address = address
         msg.reply_to = reply_to
         event.sender.send(msg)
         self.sent += 1
     # event.sender.detach()
     event.sender.close()
     print('sent')
    def test_02c_sender_settles_first(self):
        addr = self.address + "/settled/senderfirst/1"
        M1 = self.messenger()
        M2 = self.messenger()

        M1.outgoing_window = 5
        M2.incoming_window = 5

        M1.start()
        M2.start()
        M2.subscribe(addr)

        tm = Message()
        rm = Message()

        tm.address = addr
        tm.body = {'number': 0}
        ttrk = M1.put(tm)
        M1.send(0)

        M1.settle(ttrk)
        M1.flush()
        M2.flush()

        M2.recv(1)
        rtrk = M2.get(rm)
        M2.accept(rtrk)
        M2.settle(rtrk)
        self.assertEqual(0, rm.body['number'])

        M1.flush()
        M2.flush()

        M1.stop()
        M2.stop()
Example #20
0
    def test_abort(self):
        """Issue several operations, then close before processing I/O."""
        c1_events = common.ConnCallback()
        c2_events = common.ConnCallback()
        c1 = self.container1.create_connection("c1", c1_events)
        c2 = self.container2.create_connection("c2", c2_events)

        # create sender & receiver, send msg,
        # and grant credit prior to opening c2:
        c1.open()
        s1_handler = common.SenderCallback()
        sender = c1.create_sender("my-source", "req-target",
                                  event_handler=s1_handler)
        sender.open()
        msg = Message()
        msg.body = "Hi"
        sender.send(msg)
        r1_handler = common.ReceiverCallback()
        receiver = c1.create_receiver("my-target", "req-source",
                                      event_handler=r1_handler)
        receiver.add_capacity(1)
        receiver.open()
        c1.close()
        c2.open()
        common.process_connections(c1, c2)
        assert c2_events.remote_closed_ct
        c2.close()
        common.process_connections(c1, c2)
        assert c1_events.closed_ct
        assert c2_events.closed_ct
    def test_01_pre_settled(self):
        addr = "amqp:/pre_settled.1"
        M1 = self.messenger()
        M2 = self.messenger()

        M1.route("amqp:/*", self.routers[0].addresses[0] + "/$1")
        M2.route("amqp:/*", self.routers[1].addresses[0] + "/$1")

        M2.subscribe(addr)

        tm = Message()
        rm = Message()

        self.routers[0].wait_address("pre_settled.1", 0, 1)

        tm.address = addr
        for i in range(100):
            tm.body = {'number': i}
            M1.put(tm)
        M1.send()

        for i in range(100):
            M2.recv(1)
            M2.get(rm)
            self.assertEqual(i, rm.body['number'])

        M1.stop()
        M2.stop()
Example #22
0
    def test_abort(self):
        """Issue several operations, then close before processing I/O."""
        c1_events = common.ConnCallback()
        c2_events = common.ConnCallback()
        c1 = self.container1.create_connection("c1", c1_events)
        c2 = self.container2.create_connection("c2", c2_events)

        # create sender & receiver, send msg,
        # and grant credit prior to opening c2:
        c1.open()
        s1_handler = common.SenderCallback()
        sender = c1.create_sender("my-source",
                                  "req-target",
                                  event_handler=s1_handler)
        sender.open()
        msg = Message()
        msg.body = "Hi"
        sender.send(msg)
        r1_handler = common.ReceiverCallback()
        receiver = c1.create_receiver("my-target",
                                      "req-source",
                                      event_handler=r1_handler)
        receiver.add_capacity(1)
        receiver.open()
        c1.close()
        c2.open()
        common.process_connections(c1, c2)
        assert c2_events.remote_closed_ct
        c2.close()
        common.process_connections(c1, c2)
        assert c1_events.closed_ct
        assert c2_events.closed_ct
    def test_16_delivery_annotations(self):
        addr = "amqp:/delivery_annotations.1"
        M1 = self.messenger()
        M2 = self.messenger()

        M1.route("amqp:/*", self.routers[0].addresses[0] + "/$1")
        M2.route("amqp:/*", self.routers[1].addresses[0] + "/$1")
        M1.start()
        M2.start()
        M2.subscribe(addr)

        tm = Message()
        rm = Message()

        self.routers[0].wait_address("delivery_annotations.1", 0, 1)

        tm.annotations = {'a1': 'a1', 'b1': 'b2'}
        tm.address = addr
        tm.instructions = {'work': 'hard', 'stay': 'humble'}
        tm.body = {'number': 38}
        M1.put(tm)
        M1.send()

        M2.recv(1)
        M2.get(rm)
        self.assertEqual(38, rm.body['number'])

        M1.stop()
        M2.stop()
Example #24
0
 def test_send_abort(self):
     sl_handler = common.SenderCallback()
     cb = common.DeliveryCallback()
     sender = self.conn1.create_sender("saddr", "taddr",
                                       sl_handler)
     msg = Message()
     msg.body = "Hi"
     sender.send(msg, cb, None)
     sender.open()
     sender.close()
     self.process_connections()
     assert self.conn2_handler.receiver_requested_ct == 1
     args = self.conn2_handler.receiver_requested_args[0]
     rl_handler = common.ReceiverCallback()
     receiver1 = self.conn2.accept_receiver(args.link_handle,
                                            event_handler=rl_handler)
     receiver1.open()
     self.process_connections()
     assert rl_handler.remote_closed_ct
     receiver1.close()
     self.process_connections()
     assert sl_handler.closed_ct
     assert sl_handler.active_ct == 0
     assert cb.count
     assert cb.status == pyngus.SenderLink.ABORTED
    def test_08a_test_strip_message_annotations_out(self):
        addr = self.router.addresses[3]+"/strip_message_annotations_out/1"

        M1 = self.messenger()
        M2 = self.messenger()

        M1.start()
        M2.start()
        M2.subscribe(addr)

        ingress_message = Message()
        ingress_message.address = addr
        ingress_message.body = {'message': 'Hello World!'}

        #Put and send the message
        M1.put(ingress_message)
        M1.send()

        # Receive the message
        M2.recv(1)
        egress_message = Message()
        M2.get(egress_message)

        self.assertEqual(egress_message.annotations, None)

        M1.stop()
        M2.stop()
    def test_13_to_override(self):
        addr = self.address+"/toov/1"
        M1 = self.messenger()
        M2 = self.messenger()

        M1.start()
        M2.start()
        M2.subscribe(addr)

        tm = Message()
        rm = Message()

        tm.address = addr

        ##
        ## Pre-existing TO
        ##
        tm.annotations = {'x-opt-qd.to': 'toov/1'}
        for i in range(10):
            tm.body = {'number': i}
            M1.put(tm)
        M1.send()

        for i in range(10):
            M2.recv(1)
            M2.get(rm)
            self.assertEqual(i, rm.body['number'])
            ma = rm.annotations
            self.assertEqual(ma.__class__, dict)
            self.assertEqual(ma['x-opt-qd.to'], 'toov/1')

        M1.stop()
        M2.stop()
    def test_08a_test_strip_message_annotations_out(self):
        addr = self.router.addresses[3] + "/strip_message_annotations_out/1"

        M1 = self.messenger()
        M2 = self.messenger()

        M1.start()
        M2.start()
        M2.subscribe(addr)

        ingress_message = Message()
        ingress_message.address = addr
        ingress_message.body = {'message': 'Hello World!'}

        #Put and send the message
        M1.put(ingress_message)
        M1.send()

        # Receive the message
        M2.recv(1)
        egress_message = Message()
        M2.get(egress_message)

        self.assertEqual(egress_message.annotations, None)

        M1.stop()
        M2.stop()
    def test_02a_multicast_unsettled(self):
        addr = "amqp:/multicast.2"
        M1 = self.messenger()
        M2 = self.messenger()
        M3 = self.messenger()
        M4 = self.messenger()

        M1.route("amqp:/*", self.routers[0].addresses[0]+"/$1")
        M2.route("amqp:/*", self.routers[1].addresses[0]+"/$1")
        M3.route("amqp:/*", self.routers[0].addresses[0]+"/$1")
        M4.route("amqp:/*", self.routers[1].addresses[0]+"/$1")

        M1.outgoing_window = 5
        M2.incoming_window = 5
        M3.incoming_window = 5
        M4.incoming_window = 5

        M1.start()
        M2.start()
        M3.start()
        M4.start()

        M2.subscribe(addr)
        M3.subscribe(addr)
        M4.subscribe(addr)
        self.routers[0].wait_address("multicast.2", 1, 1)

        tm = Message()
        rm = Message()

        tm.address = addr
        for i in range(2):
            tm.body = {'number': i}
            M1.put(tm)
        M1.send(0)

        for i in range(2):
            M2.recv(1)
            trk = M2.get(rm)
            M2.accept(trk)
            M2.settle(trk)
            self.assertEqual(i, rm.body['number'])

            M3.recv(1)
            trk = M3.get(rm)
            M3.accept(trk)
            M3.settle(trk)
            self.assertEqual(i, rm.body['number'])

            M4.recv(1)
            trk = M4.get(rm)
            M4.accept(trk)
            M4.settle(trk)
            self.assertEqual(i, rm.body['number'])

        M1.stop()
        M2.stop()
        M3.stop()
        M4.stop()
    def test_02a_multicast_unsettled(self):
        addr = "amqp:/multicast.2"
        M1 = self.messenger()
        M2 = self.messenger()
        M3 = self.messenger()
        M4 = self.messenger()

        M1.route("amqp:/*", self.routers[0].addresses[0] + "/$1")
        M2.route("amqp:/*", self.routers[1].addresses[0] + "/$1")
        M3.route("amqp:/*", self.routers[0].addresses[0] + "/$1")
        M4.route("amqp:/*", self.routers[1].addresses[0] + "/$1")

        M1.outgoing_window = 5
        M2.incoming_window = 5
        M3.incoming_window = 5
        M4.incoming_window = 5

        M1.start()
        M2.start()
        M3.start()
        M4.start()

        M2.subscribe(addr)
        M3.subscribe(addr)
        M4.subscribe(addr)
        self.routers[0].wait_address("multicast.2", 1, 1)

        tm = Message()
        rm = Message()

        tm.address = addr
        for i in range(2):
            tm.body = {'number': i}
            M1.put(tm)
        M1.send(0)

        for i in range(2):
            M2.recv(1)
            trk = M2.get(rm)
            M2.accept(trk)
            M2.settle(trk)
            self.assertEqual(i, rm.body['number'])

            M3.recv(1)
            trk = M3.get(rm)
            M3.accept(trk)
            M3.settle(trk)
            self.assertEqual(i, rm.body['number'])

            M4.recv(1)
            trk = M4.get(rm)
            M4.accept(trk)
            M4.settle(trk)
            self.assertEqual(i, rm.body['number'])

        M1.stop()
        M2.stop()
        M3.stop()
        M4.stop()
Example #30
0
 def _request_msg(self, properties, body=None):
     """
     Create a management request message
     """
     req = Message()
     req.properties = properties
     req.body = body or {}
     return req
Example #31
0
 def on_sendable(self, event):
     while event.sender.credit and self.sent < self.total:
         msg = Message(id=(self.sent + 1))
         msg.body = self.sent
         # msg.address = address
         # msg.reply_to = reply_to
         event.sender.send(msg)
         self.sent += 1
    def test_10_semantics_multicast(self):
        addr = "amqp:/multicast.1"
        M1 = self.messenger()
        M2 = self.messenger()
        M3 = self.messenger()
        M4 = self.messenger()

        M1.route("amqp:/*", self.routers[0].addresses[0]+"/$1")
        M2.route("amqp:/*", self.routers[1].addresses[0]+"/$1")
        M3.route("amqp:/*", self.routers[0].addresses[0]+"/$1")
        M4.route("amqp:/*", self.routers[1].addresses[0]+"/$1")

        M1.start()
        M2.start()
        M3.start()
        M4.start()

        M2.subscribe(addr)
        M3.subscribe(addr)
        M4.subscribe(addr)
        self.routers[0].wait_address("multicast.1", 1, 1)

        tm = Message()
        rm = Message()

        tm.address = addr
        for i in range(100):
            tm.body = {'number': i}
            M1.put(tm)
        M1.send()

        for i in range(100):
            try:
                M2.recv(1)
                M2.get(rm)
                self.assertEqual(i, rm.body['number'])
            except:
                print "M2 at", i

            try:
                M3.recv(1)
                M3.get(rm)
                self.assertEqual(i, rm.body['number'])
            except:
                print "M3 at", i

            try:
                M4.recv(1)
                M4.get(rm)
                self.assertEqual(i, rm.body['number'])
            except:
                print "M4 at", i

        M1.stop()
        M2.stop()
        M3.stop()
        M4.stop()
 def test_00_discard(self):
     addr = self.routers[0].addresses[0]+"/discard/1"
     M1 = self.messenger()
     tm = Message()
     tm.address = addr
     for i in range(100):
         tm.body = {'number': i}
         M1.put(tm)
     M1.send()
    def test_10_semantics_multicast(self):
        addr = "amqp:/multicast.1"
        M1 = self.messenger()
        M2 = self.messenger()
        M3 = self.messenger()
        M4 = self.messenger()

        M1.route("amqp:/*", self.routers[0].addresses[0] + "/$1")
        M2.route("amqp:/*", self.routers[1].addresses[0] + "/$1")
        M3.route("amqp:/*", self.routers[0].addresses[0] + "/$1")
        M4.route("amqp:/*", self.routers[1].addresses[0] + "/$1")

        M1.start()
        M2.start()
        M3.start()
        M4.start()

        M2.subscribe(addr)
        M3.subscribe(addr)
        M4.subscribe(addr)
        self.routers[0].wait_address("multicast.1", 1, 1)

        tm = Message()
        rm = Message()

        tm.address = addr
        for i in range(100):
            tm.body = {'number': i}
            M1.put(tm)
        M1.send()

        for i in range(100):
            try:
                M2.recv(1)
                M2.get(rm)
                self.assertEqual(i, rm.body['number'])
            except:
                print "M2 at", i

            try:
                M3.recv(1)
                M3.get(rm)
                self.assertEqual(i, rm.body['number'])
            except:
                print "M3 at", i

            try:
                M4.recv(1)
                M4.get(rm)
                self.assertEqual(i, rm.body['number'])
            except:
                print "M4 at", i

        M1.stop()
        M2.stop()
        M3.stop()
        M4.stop()
Example #35
0
 def test_send_expired_no_callback(self):
     sender, receiver = self._setup_receiver_sync()
     rl_handler = receiver.user_context
     msg = Message()
     msg.body = "Hi"
     sender.send(msg, deadline=10)
     assert sender.pending == 1
     self.process_connections(timestamp=12)
     assert rl_handler.message_received_ct == 0
     assert sender.pending == 0
Example #36
0
 def test_send_expired_no_callback(self):
     sender, receiver = self._setup_receiver_sync()
     rl_handler = receiver.user_context
     msg = Message()
     msg.body = "Hi"
     sender.send(msg, deadline=10)
     assert sender.pending == 1
     self.process_connections(timestamp=12)
     assert rl_handler.message_received_ct == 0
     assert sender.pending == 0
Example #37
0
    def departures_today_handler(self,
                                 icao24: str,
                                 context: Optional[Any] = None) -> Message:
        departures = self._get_departures_today(icao24)

        message = Message()
        message.content_type = 'application/json'
        message.body = json.dumps(departures)

        return message
Example #38
0
    def arrivals_today_handler(self,
                               icao24: str,
                               context: Optional[Any] = None) -> Message:
        arrivals = self._get_arrivals_today(icao24)

        message = Message()
        message.content_type = 'application/json'
        message.body = json.dumps(arrivals)

        return message
    def test_02a_multicast_unsettled(self):
        addr = self.address+"/multicast.unsettled.1"
        M1 = self.messenger()
        M2 = self.messenger()
        M3 = self.messenger()
        M4 = self.messenger()


        M1.outgoing_window = 5
        M2.incoming_window = 5
        M3.incoming_window = 5
        M4.incoming_window = 5

        M1.start()
        M2.start()
        M3.start()
        M4.start()

        M2.subscribe(addr)
        M3.subscribe(addr)
        M4.subscribe(addr)

        tm = Message()
        rm = Message()

        tm.address = addr
        for i in range(2):
            tm.body = {'number': i}
            M1.put(tm)
        M1.send(0)

        for i in range(2):
            M2.recv(1)
            trk = M2.get(rm)
            M2.accept(trk)
            M2.settle(trk)
            self.assertEqual(i, rm.body['number'])

            M3.recv(1)
            trk = M3.get(rm)
            M3.accept(trk)
            M3.settle(trk)
            self.assertEqual(i, rm.body['number'])

            M4.recv(1)
            trk = M4.get(rm)
            M4.accept(trk)
            M4.settle(trk)
            self.assertEqual(i, rm.body['number'])

        M1.stop()
        M2.stop()
        M3.stop()
        M4.stop()
    def test_02a_multicast_unsettled(self):
        addr = self.address+"/multicast.unsettled.1"
        M1 = self.messenger()
        M2 = self.messenger()
        M3 = self.messenger()
        M4 = self.messenger()


        M1.outgoing_window = 5
        M2.incoming_window = 5
        M3.incoming_window = 5
        M4.incoming_window = 5

        M1.start()
        M2.start()
        M3.start()
        M4.start()

        M2.subscribe(addr)
        M3.subscribe(addr)
        M4.subscribe(addr)

        tm = Message()
        rm = Message()

        tm.address = addr
        for i in range(2):
            tm.body = {'number': i}
            M1.put(tm)
        M1.send(0)

        for i in range(2):
            M2.recv(1)
            trk = M2.get(rm)
            M2.accept(trk)
            M2.settle(trk)
            self.assertEqual(i, rm.body['number'])

            M3.recv(1)
            trk = M3.get(rm)
            M3.accept(trk)
            M3.settle(trk)
            self.assertEqual(i, rm.body['number'])

            M4.recv(1)
            trk = M4.get(rm)
            M4.accept(trk)
            M4.settle(trk)
            self.assertEqual(i, rm.body['number'])

        M1.stop()
        M2.stop()
        M3.stop()
        M4.stop()
Example #41
0
 def test_send_presettled(self):
     sender, receiver = self._setup_sender_sync()
     rl_handler = receiver.user_context
     msg = Message()
     msg.body = "Hi"
     sender.send(msg)
     receiver.add_capacity(1)
     self.process_connections()
     assert rl_handler.message_received_ct == 1
     msg2, handle = rl_handler.received_messages[0]
     assert msg2.body == "Hi"
     receiver.message_accepted(handle)
    def test_05_three_ack(self):
        addr = "amqp:/three_ack/1"
        M1 = self.messenger()
        M2 = self.messenger()

        M1.route("amqp:/*", self.routers[0].addresses[0] + "/$1")
        M2.route("amqp:/*", self.routers[1].addresses[0] + "/$1")

        M1.outgoing_window = 5
        M2.incoming_window = 5

        M1.start()
        M2.start()
        M2.subscribe(addr)
        self.routers[0].wait_address("three_ack/1", 0, 1)

        tm = Message()
        rm = Message()

        tm.address = addr
        tm.body = {'number': 200}

        tx_tracker = M1.put(tm)
        M1.send(0)
        M2.recv(1)
        rx_tracker = M2.get(rm)
        self.assertEqual(200, rm.body['number'])
        self.assertEqual(PENDING, M1.status(tx_tracker))

        M2.accept(rx_tracker)

        M2.flush()
        M1.flush()

        self.assertEqual(ACCEPTED, M1.status(tx_tracker))

        M1.settle(tx_tracker)

        M1.flush()
        M2.flush()

        ##
        ## We need a way to verify on M2 (receiver) that the tracker has been
        ## settled on the M1 (sender).  [ See PROTON-395 ]
        ##

        M2.settle(rx_tracker)

        M2.flush()
        M1.flush()

        M1.stop()
        M2.stop()
    def test_05_three_ack(self):
        addr = "amqp:/three_ack/1"
        M1 = self.messenger()
        M2 = self.messenger()

        M1.route("amqp:/*", self.routers[0].addresses[0]+"/$1")
        M2.route("amqp:/*", self.routers[1].addresses[0]+"/$1")

        M1.outgoing_window = 5
        M2.incoming_window = 5

        M1.start()
        M2.start()
        M2.subscribe(addr)
        self.routers[0].wait_address("three_ack/1", 0, 1)

        tm = Message()
        rm = Message()

        tm.address = addr
        tm.body = {'number': 200}

        tx_tracker = M1.put(tm)
        M1.send(0)
        M2.recv(1)
        rx_tracker = M2.get(rm)
        self.assertEqual(200, rm.body['number'])
        self.assertEqual(PENDING, M1.status(tx_tracker))

        M2.accept(rx_tracker)

        M2.flush()
        M1.flush()

        self.assertEqual(ACCEPTED, M1.status(tx_tracker))

        M1.settle(tx_tracker)

        M1.flush()
        M2.flush()

        ##
        ## We need a way to verify on M2 (receiver) that the tracker has been
        ## settled on the M1 (sender).  [ See PROTON-395 ]
        ##

        M2.settle(rx_tracker)

        M2.flush()
        M1.flush()

        M1.stop()
        M2.stop()
Example #44
0
 def test_send_presettled(self):
     sender, receiver = self._setup_sender_sync()
     rl_handler = receiver.user_context
     msg = Message()
     msg.body = "Hi"
     sender.send(msg)
     receiver.add_capacity(1)
     self.process_connections()
     assert rl_handler.message_received_ct == 1
     msg2, handle = rl_handler.received_messages[0]
     assert msg2.body == "Hi"
     receiver.message_accepted(handle)
Example #45
0
    def test_send_close_on_ack(self):
        """Verify that the sender can close itself when delivery complete."""
        class SendDoneCallback(common.DeliveryCallback):
            def __call__(self, link, handle, status, info):
                super(SendDoneCallback, self).__call__(link, handle,
                                                       status, info)
                if self.count == 1:
                    # verify that we can safely close ourself, even if there is
                    # a send that has not completed:
                    assert status == pyngus.SenderLink.ACCEPTED
                    cond = Condition("indigestion", "old sushi",
                                     {"smoked eel": "yummy"})
                    link.close(cond)
                else:
                    # the unsent message is aborted prior
                    # to invoking closed callback:
                    assert status == pyngus.SenderLink.ABORTED
                    sl_handler = link.user_context
                    assert sl_handler.closed_ct == 0

        sender, receiver = self._setup_sender_sync()
        rl_handler = receiver.user_context
        sl_handler = sender.user_context
        receiver.add_capacity(1)
        msg = Message()
        msg.body = "Hi"
        cb = SendDoneCallback()
        sender.send(msg, cb, "my-handle")
        # no credit - this one won't get sent:
        sender.send(msg, cb, "my-handle")
        self.process_connections()
        assert sender.active
        assert rl_handler.message_received_ct == 1
        msg2, handle = rl_handler.received_messages[0]
        receiver.message_accepted(handle)
        self.process_connections()
        assert not sender.active
        assert not sender.closed
        # pending messages are aborted when close completes:
        assert cb.count == 1
        assert sl_handler.closed_ct == 0
        receiver.close()
        self.process_connections()
        assert sender.closed
        assert sl_handler.closed_ct
        assert cb.count == 2
        # last callback should be abort:
        cond = cb.info.get('condition')
        assert cond
        assert cond.name == "indigestion"
        assert cb.status == pyngus.SenderLink.ABORTED
Example #46
0
    def test_send_close_on_ack(self):
        """Verify that the sender can close itself when delivery complete."""
        class SendDoneCallback(common.DeliveryCallback):
            def __call__(self, link, handle, status, info):
                super(SendDoneCallback, self).__call__(link, handle, status,
                                                       info)
                if self.count == 1:
                    # verify that we can safely close ourself, even if there is
                    # a send that has not completed:
                    assert status == pyngus.SenderLink.ACCEPTED
                    cond = Condition("indigestion", "old sushi",
                                     {"smoked eel": "yummy"})
                    link.close(cond)
                else:
                    # the unsent message is aborted prior
                    # to invoking closed callback:
                    assert status == pyngus.SenderLink.ABORTED
                    sl_handler = link.user_context
                    assert sl_handler.closed_ct == 0

        sender, receiver = self._setup_sender_sync()
        rl_handler = receiver.user_context
        sl_handler = sender.user_context
        receiver.add_capacity(1)
        msg = Message()
        msg.body = "Hi"
        cb = SendDoneCallback()
        sender.send(msg, cb, "my-handle")
        # no credit - this one won't get sent:
        sender.send(msg, cb, "my-handle")
        self.process_connections()
        assert sender.active
        assert rl_handler.message_received_ct == 1
        msg2, handle = rl_handler.received_messages[0]
        receiver.message_accepted(handle)
        self.process_connections()
        assert not sender.active
        assert not sender.closed
        # pending messages are aborted when close completes:
        assert cb.count == 1
        assert sl_handler.closed_ct == 0
        receiver.close()
        self.process_connections()
        assert sender.closed
        assert sl_handler.closed_ct
        assert cb.count == 2
        # last callback should be abort:
        cond = cb.info.get('condition')
        assert cond
        assert cond.name == "indigestion"
        assert cb.status == pyngus.SenderLink.ABORTED
    def test_11b_semantics_closest_is_remote(self):
        addr = "amqp:/closest.2"
        M1 = self.messenger()
        M2 = self.messenger()
        M3 = self.messenger()
        M4 = self.messenger()

        M1.route("amqp:/*", self.routers[0].addresses[0]+"/$1")
        M2.route("amqp:/*", self.routers[1].addresses[0]+"/$1")
        M3.route("amqp:/*", self.routers[0].addresses[0]+"/$1")
        M4.route("amqp:/*", self.routers[1].addresses[0]+"/$1")

        M1.start()
        M2.start()
        M3.start()
        M4.start()

        M2.subscribe(addr)
        M4.subscribe(addr)
        self.routers[0].wait_address("closest.2", 0, 1)

        tm = Message()
        rm = Message()

        tm.address = addr
        for i in range(30):
            tm.body = {'number': i}
            M1.put(tm)
        M1.send()

        i = 0
        rx_set = []
        for i in range(15):
            M2.recv(1)
            M2.get(rm)
            rx_set.append(rm.body['number'])

            M4.recv(1)
            M4.get(rm)
            rx_set.append(rm.body['number'])

        self.assertEqual(30, len(rx_set))
        rx_set.sort()
        for i in range(30):
            self.assertEqual(i, rx_set[i])

        M1.stop()
        M2.stop()
        M3.stop()
        M4.stop()
Example #48
0
    def _send_request(self):
        """Send a message containing the RPC method call
        """
        msg = Message()
        msg.subject = "An RPC call!"
        msg.address = self._to
        msg.reply_to = self._reply_to
        msg.body = self._method
        msg.correlation_id = 5  # whatever...

        print("sending RPC call request: %s" % str(self._method))
        # @todo send timeout self._sender.send(msg, self, None, time.time() +
        # 10)
        self._sender.send(msg, self)
    def test_11_semantics_closest(self):
        addr = self.address+"/closest.1"
        M1 = self.messenger()
        M2 = self.messenger()
        M3 = self.messenger()
        M4 = self.messenger()


        M1.start()
        M2.start()
        M3.start()
        M4.start()

        M2.subscribe(addr)
        M3.subscribe(addr)
        M4.subscribe(addr)

        tm = Message()
        rm = Message()

        tm.address = addr
        for i in range(30):
            tm.body = {'number': i}
            M1.put(tm)
        M1.send()

        i = 0
        rx_set = []
        for i in range(10):
            M2.recv(1)
            M2.get(rm)
            rx_set.append(rm.body['number'])

            M3.recv(1)
            M3.get(rm)
            rx_set.append(rm.body['number'])

            M4.recv(1)
            M4.get(rm)
            rx_set.append(rm.body['number'])

        self.assertEqual(30, len(rx_set))
        rx_set.sort()
        for i in range(30):
            self.assertEqual(i, rx_set[i])

        M1.stop()
        M2.stop()
        M3.stop()
        M4.stop()
Example #50
0
    def _send_request(self):
        """Send a message containing the RPC method call
        """
        msg = Message()
        msg.subject = "An RPC call!"
        msg.address = self._to
        msg.reply_to = self._reply_to
        msg.body = self._method
        msg.correlation_id = 5  # whatever...

        print("sending RPC call request: %s" % str(self._method))
        # @todo send timeout self._sender.send(msg, self, None, time.time() +
        # 10)
        self._sender.send(msg, self)
    def test_11b_semantics_closest_is_remote(self):
        addr = "amqp:/closest.2"
        M1 = self.messenger()
        M2 = self.messenger()
        M3 = self.messenger()
        M4 = self.messenger()

        M1.route("amqp:/*", self.routers[0].addresses[0] + "/$1")
        M2.route("amqp:/*", self.routers[1].addresses[0] + "/$1")
        M3.route("amqp:/*", self.routers[0].addresses[0] + "/$1")
        M4.route("amqp:/*", self.routers[1].addresses[0] + "/$1")

        M1.start()
        M2.start()
        M3.start()
        M4.start()

        M2.subscribe(addr)
        M4.subscribe(addr)
        self.routers[0].wait_address("closest.2", 0, 1)

        tm = Message()
        rm = Message()

        tm.address = addr
        for i in range(30):
            tm.body = {'number': i}
            M1.put(tm)
        M1.send()

        i = 0
        rx_set = []
        for i in range(15):
            M2.recv(1)
            M2.get(rm)
            rx_set.append(rm.body['number'])

            M4.recv(1)
            M4.get(rm)
            rx_set.append(rm.body['number'])

        self.assertEqual(30, len(rx_set))
        rx_set.sort()
        for i in range(30):
            self.assertEqual(i, rx_set[i])

        M1.stop()
        M2.stop()
        M3.stop()
        M4.stop()
    def test_11_semantics_closest(self):
        addr = self.address+"/closest.1"
        M1 = self.messenger()
        M2 = self.messenger()
        M3 = self.messenger()
        M4 = self.messenger()


        M1.start()
        M2.start()
        M3.start()
        M4.start()

        M2.subscribe(addr)
        M3.subscribe(addr)
        M4.subscribe(addr)

        tm = Message()
        rm = Message()

        tm.address = addr
        for i in range(30):
            tm.body = {'number': i}
            M1.put(tm)
        M1.send()

        i = 0
        rx_set = []
        for i in range(10):
            M2.recv(1)
            M2.get(rm)
            rx_set.append(rm.body['number'])

            M3.recv(1)
            M3.get(rm)
            rx_set.append(rm.body['number'])

            M4.recv(1)
            M4.get(rm)
            rx_set.append(rm.body['number'])

        self.assertEqual(30, len(rx_set))
        rx_set.sort()
        for i in range(30):
            self.assertEqual(i, rx_set[i])

        M1.stop()
        M2.stop()
        M3.stop()
        M4.stop()
    def test_08a_test_strip_message_annotations_both_add_ingress_trace(self):
        addr = "amqp:/strip_message_annotations_both_add_ingress_trace/1"

        M1 = self.messenger()
        M2 = self.messenger()

        M1.route("amqp:/*", self.routers[0].addresses[2] + "/$1")
        M2.route("amqp:/*", self.routers[1].addresses[2] + "/$1")

        M1.start()
        M2.start()
        M2.subscribe(addr)
        self.routers[0].wait_address(
            "strip_message_annotations_both_add_ingress_trace/1", 0, 1)

        ingress_message = Message()
        ingress_message.address = addr
        ingress_message.body = {'message': 'Hello World!'}

        ##
        # Pre-existing ingress and trace. Intentionally populate the trace with the 0/QDR.A which is the trace
        # of the first router. If the inbound annotations were not stripped, the router would drop this message
        # since it would consider this message as being looped.
        #
        ingress_message_annotations = {
            'work': 'hard',
            'x-opt-qd': 'humble',
            'x-opt-qd.ingress': 'ingress-router',
            'x-opt-qd.trace': ['0/QDR.A']
        }
        ingress_message.annotations = ingress_message_annotations

        #Put and send the message
        M1.put(ingress_message)
        M1.send()

        # Receive the message
        M2.recv(1)
        egress_message = Message()
        M2.get(egress_message)

        # Router specific annotations (annotations with prefix "x-opt-qd.") will be stripped. User defined annotations will not be stripped.
        self.assertEqual(egress_message.annotations, {
            'work': 'hard',
            'x-opt-qd': 'humble'
        })

        M1.stop()
        M2.stop()
    def test_08a_test_strip_message_annotations_no_add_trace(self):
        addr = "amqp:/strip_message_annotations_no_add_trace/1"

        M1 = self.messenger()
        M2 = self.messenger()

        M1.route("amqp:/*", self.routers[0].addresses[1] + "/$1")
        M2.route("amqp:/*", self.routers[1].addresses[1] + "/$1")

        M1.start()
        M2.start()
        M2.subscribe(addr)
        self.routers[0].wait_address(
            "strip_message_annotations_no_add_trace/1", 0, 1)

        ingress_message = Message()
        ingress_message.address = addr
        ingress_message.body = {'message': 'Hello World!'}

        ##
        ## Pre-existing ingress and trace
        ##
        #ingress_message_annotations = {'x-opt-qd.ingress': 'ingress-router', 'x-opt-qd.trace': ['0/QDR.1']}
        ingress_message_annotations = {'x-opt-qd.trace': ['0/QDR.1']}
        ingress_message.annotations = ingress_message_annotations

        ingress_message.annotations = ingress_message_annotations

        M1.put(ingress_message)
        M1.send()

        # Receive the message
        M2.recv(1)
        egress_message = Message()
        M2.get(egress_message)

        #Make sure 'Hello World!' is in the message body dict
        self.assertEqual('Hello World!', egress_message.body['message'])

        egress_message_annotations = egress_message.annotations

        self.assertEqual(egress_message_annotations.__class__, dict)
        self.assertEqual(egress_message_annotations['x-opt-qd.ingress'],
                         '0/QDR.A')
        self.assertEqual(egress_message_annotations['x-opt-qd.trace'],
                         ['0/QDR.1', '0/QDR.A', '0/QDR.B'])

        M1.stop()
        M2.stop()
Example #55
0
 def test_send_expired_no_credit(self):
     cb = common.DeliveryCallback()
     sender, receiver = self._setup_receiver_sync()
     rl_handler = receiver.user_context
     msg = Message()
     msg.body = "Hi"
     sender.send(msg, cb, "my-handle", deadline=10)
     # receiver.add_capacity(1)
     self.process_connections(timestamp=9)
     assert rl_handler.message_received_ct == 0
     assert sender.pending == 1
     assert cb.status is None
     self.process_connections(timestamp=10)
     assert sender.pending == 0
     assert cb.status == pyngus.SenderLink.TIMED_OUT
Example #56
0
    def test_send_deadline_idle(self):
        """Validate the connection's deadline processing."""

        self.teardown()
        self.setup(conn1_props={"idle-time-out": 99})

        sender1 = self.conn1.create_sender("src1", "tgt1")
        sender1.open()
        self.process_connections(timestamp=1)
        assert self.conn2_handler.receiver_requested_ct == 1
        args = self.conn2_handler.receiver_requested_args[0]
        receiver1 = self.conn2.accept_receiver(args.link_handle)
        receiver1.open()

        sender2 = self.conn1.create_sender("src2", "tgt2")
        sender2.open()
        self.process_connections(timestamp=1)
        assert self.conn2_handler.receiver_requested_ct == 2
        args = self.conn2_handler.receiver_requested_args[1]
        receiver2 = self.conn2.accept_receiver(args.link_handle)
        receiver2.open()

        self.process_connections(timestamp=1)
        assert self.conn1.deadline == 100.0

        msg = Message()
        msg.body = "Hi"
        sender1.send(msg, deadline=11)
        assert self.conn1.deadline == 11
        self.process_connections(timestamp=2)
        assert self.conn1.deadline == 11

        sender2.send(msg, deadline=7)
        assert self.conn1.deadline == 7
        self.process_connections(timestamp=7)
        assert self.conn1.deadline == 11
        self.process_connections(timestamp=11)
        assert self.conn1.deadline == 100

        # next send timeout after the idle keepalive:
        sender1.send(msg, deadline=101)
        self.process_connections(timestamp=11)
        assert self.conn1.deadline == 100

        # have remote send idle, next deadline should
        # be the pending send:
        self.process_connections(timestamp=self.conn2.deadline)
        assert self.conn1.deadline == 101
Example #57
0
 def test_send_released(self):
     cb = common.DeliveryCallback()
     sender, receiver = self._setup_sender_sync()
     rl_handler = receiver.user_context
     msg = Message()
     msg.body = "Hi"
     sender.send(msg, cb, "my-handle")
     receiver.add_capacity(1)
     self.process_connections()
     assert rl_handler.message_received_ct == 1
     msg2, handle = rl_handler.received_messages[0]
     receiver.message_released(handle)
     self.process_connections()
     assert cb.link == sender
     assert cb.handle == "my-handle"
     assert cb.status == pyngus.SenderLink.RELEASED
 def test_08a_test_strip_message_annotations_no_add_trace(self):
     addr = "amqp:/strip_message_annotations_no_add_trace/1"
     
     M1 = self.messenger()
     M2 = self.messenger()
     
     M1.route("amqp:/*", self.routers[0].addresses[1]+"/$1")
     M2.route("amqp:/*", self.routers[1].addresses[1]+"/$1")
     
     M1.start()
     M2.start()
     M2.subscribe(addr)
     self.routers[0].wait_address("strip_message_annotations_no_add_trace/1", 0, 1)
     
     ingress_message = Message()
     ingress_message.address = addr
     ingress_message.body = {'message': 'Hello World!'}
      
     ##
     ## Pre-existing ingress and trace
     ##
     #ingress_message_annotations = {'x-opt-qd.ingress': 'ingress-router', 'x-opt-qd.trace': ['0/QDR.1']}
     ingress_message_annotations = {'x-opt-qd.trace': ['0/QDR.1']}
     ingress_message.annotations = ingress_message_annotations
     
     ingress_message.annotations = ingress_message_annotations
     
     M1.put(ingress_message)
     M1.send()
     
     # Receive the message
     M2.recv(1)
     egress_message = Message()
     M2.get(egress_message)
     
     #Make sure 'Hello World!' is in the message body dict
     self.assertEqual('Hello World!', egress_message.body['message'])
     
     
     egress_message_annotations = egress_message.annotations
     
     self.assertEqual(egress_message_annotations.__class__, dict)
     self.assertEqual(egress_message_annotations['x-opt-qd.ingress'], '0/QDR.A')
     self.assertEqual(egress_message_annotations['x-opt-qd.trace'], ['0/QDR.1', '0/QDR.A', '0/QDR.B'])
     
     M1.stop()
     M2.stop()
    def test_04_unsettled_undeliverable(self):
        addr = self.routers[0].addresses[0]+"/unsettled_undeliverable/1"
        M1 = self.messenger()

        M1.outgoing_window = 5

        M1.start()
        tm = Message()
        tm.address = addr
        tm.body = {'number': 200}

        tx_tracker = M1.put(tm)
        M1.send(0)
        M1.flush()
        self.assertEqual(MODIFIED, M1.status(tx_tracker))

        M1.stop()