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()
def on_sendable(self, event): if self.num_messages < 2: request = Message() request.correlation_id = "C1" request.address = "amqp:/_local/$management" request.properties = { u'type': u'org.amqp.management', u'name': u'self', u'operation': u'GET-MGMT-NODES' } request.reply_to = self.receiver.remote_source.address event.sender.send(request) self.num_messages += 1 request = Message() request.address = "amqp:/_topo/0/QDR.B/$management" request.correlation_id = "C2" request.reply_to = self.receiver.remote_source.address request.properties = { u'type': u'org.amqp.management', u'name': u'self', u'operation': u'GET-MGMT-NODES' } event.sender.send(request) self.num_messages += 1
def test_09_management(self): M = self.messenger() M.start() M.route("amqp:/*", self.routers[0].addresses[0] + "/$1") sub = M.subscribe("amqp:/#") reply = sub.address request = Message() response = Message() request.address = "amqp:/_local/$management" request.reply_to = reply request.properties = {u"type": u"org.amqp.management", u"name": u"self", u"operation": u"GET-MGMT-NODES"} M.put(request) M.send() M.recv() M.get(response) assert response.properties["statusCode"] == 200, response.properties["statusDescription"] self.assertIn("amqp:/_topo/0/QDR.B/$management", response.body) request.address = "amqp:/_topo/0/QDR.B/$management" request.reply_to = reply request.properties = {u"type": u"org.amqp.management", u"name": u"self", u"operation": u"GET-MGMT-NODES"} M.put(request) M.send() M.recv() M.get(response) self.assertEqual(response.properties["statusCode"], 200) self.assertTrue("amqp:/_topo/0/QDR.A/$management" in response.body) M.stop()
def test_09_management(self): M = self.messenger() M.start() M.route("amqp:/*", self.routers[0].addresses[0]+"/$1") sub = M.subscribe("amqp:/#") reply = sub.address request = Message() response = Message() request.address = "amqp:/_local/$management" request.reply_to = reply request.properties = {u'type':u'org.amqp.management', u'name':u'self', u'operation':u'GET-MGMT-NODES'} M.put(request) M.send() M.recv() M.get(response) assert response.properties['statusCode'] == 200, response.properties['statusDescription'] self.assertIn('amqp:/_topo/0/QDR.B/$management', response.body) request.address = "amqp:/_topo/0/QDR.B/$management" request.reply_to = reply request.properties = {u'type':u'org.amqp.management', u'name':u'self', u'operation':u'GET-MGMT-NODES'} M.put(request) M.send() M.recv() M.get(response) self.assertEqual(response.properties['statusCode'], 200) self.assertTrue('amqp:/_topo/0/QDR.A/$management' in response.body) M.stop()
def test_09_management(self): addr = "amqp:/$management" M = self.messenger() M.start() M.route("amqp:/*", self.address+"/$1") sub = M.subscribe("amqp:/#") reply = sub.address request = Message() response = Message() request.address = addr request.reply_to = reply request.correlation_id = "C1" request.properties = {u'type':u'org.amqp.management', u'name':u'self', u'operation':u'GET-MGMT-NODES'} M.put(request) M.send() M.recv() M.get(response) assert response.properties['statusCode'] == 200, response.properties['statusCode'] self.assertEqual(response.correlation_id, "C1") self.assertEqual(response.body, []) request.address = addr request.reply_to = reply request.correlation_id = 135 request.properties = {u'type':u'org.amqp.management', u'name':u'self', u'operation':u'GET-MGMT-NODES'} M.put(request) M.send() M.recv() M.get(response) self.assertEqual(response.properties['statusCode'], 200) self.assertEqual(response.correlation_id, 135) self.assertEqual(response.body, []) request.address = addr request.reply_to = reply request.properties = {u'type':u'org.amqp.management', u'name':u'self', u'operation':u'GET-MGMT-NODES'} M.put(request) M.send() M.recv() M.get(response) self.assertEqual(response.properties['statusCode'], 200) self.assertEqual(response.body, []) M.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_09d_management_not_implemented(self): addr = "amqp:/$management" M = self.messenger() M.start() M.route("amqp:/*", self.address+"/$1") sub = M.subscribe("amqp:/#") reply = sub.address request = Message() response = Message() ## ## Request with an invalid operation ## request.address = addr request.reply_to = reply request.properties = {u'type':u'org.amqp.management', u'name':u'self', u'operation':u'NOT-IMPL'} M.put(request) M.send() M.recv() M.get(response) self.assertEqual(response.properties['statusCode'], 501) M.stop()
def test_09c_management_get_operations(self): addr = "amqp:/_local/$management" M = self.messenger() M.start() M.route("amqp:/*", self.address+"/$1") sub = M.subscribe("amqp:/#") reply = sub.address request = Message() response = Message() ## ## Unrestricted request ## request.address = addr request.reply_to = reply request.properties = {u'type':u'org.amqp.management', u'name':u'self', u'operation':u'GET-OPERATIONS'} M.put(request) M.send() M.recv() M.get(response) self.assertEqual(response.properties['statusCode'], 200) self.assertEqual(response.body.__class__, dict) self.assertTrue('org.apache.qpid.dispatch.router' in response.body.keys()) self.assertTrue(len(response.body.keys()) > 2) self.assertTrue(response.body['org.apache.qpid.dispatch.router'].__class__, list) M.stop()
def test_09d_management_not_implemented(self): addr = "amqp:/$management" M = self.messenger() M.start() M.route("amqp:/*", self.address + "/$1") sub = M.subscribe("amqp:/#") reply = sub.address request = Message() response = Message() ## ## Request with an invalid operation ## request.address = addr request.reply_to = reply request.properties = { u'type': u'org.amqp.management', u'name': u'self', u'operation': u'NOT-IMPL' } M.put(request) M.send() M.recv() M.get(response) self.assertEqual(response.properties['statusCode'], 501) M.stop()
def _request_msg(self, properties, body=None): """ Create a management request message """ req = Message() req.properties = properties req.body = body or {} return req
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)
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 run(self): while (True): if self.mng.incoming < 1: self.mng.recv(1) if self.mng.incoming > 0: request = Message() self.mng.get(request) if request.reply_to: response = Message() response.address = request.reply_to response.correlation_id = request.correlation_id response.properties = {} response.properties['result'], response.body = self.process(request.properties, request.body) self.mng.put(response) self.mng.send()
def test_09a_management_no_reply(self): addr = "amqp:/$management" M = self.messenger() M.start() M.route("amqp:/*", self.address+"/$1") request = Message() request.address = addr request.correlation_id = "C1" request.properties = {u'type':u'org.amqp.management', u'name':u'self', u'operation':u'GET-MGMT-NODES'} M.put(request) M.send() M.put(request) M.send() M.stop()
def on_sendable(self, event): if not self.sent: msg = Message() msg.address = self.address msg.id = '123455' msg.user_id = BINARY('testuser') msg.subject = 'test-subject' msg.content_type = 'text/html; charset=utf-8' msg.correlation_id = 89 msg.creation_time = 1487772623.883 msg.group_id = "group1" msg.reply_to = 'hello_world' msg.content_encoding = 'gzip, deflate' msg.reply_to_group_id = "group0" application_properties = dict() application_properties['app-property'] = [10, 20, 30] application_properties['some-other'] = symbol("O_one") msg.properties = application_properties msg.body = u"Hello World!" event.sender.send(msg) self.sent = True
def on_sendable(self, event): if not self.sent: msg = Message() msg.address = self.address msg.id = '123455' msg.user_id = 'testuser' msg.subject = 'test-subject' msg.content_type = 'text/html; charset=utf-8' msg.correlation_id = 89 msg.creation_time = 1487772623.883 msg.group_id = "group1" msg.reply_to = 'hello_world' msg.content_encoding = 'gzip, deflate' msg.reply_to_group_id = "group0" application_properties = dict() application_properties['app-property'] = [10, 20, 30] application_properties['some-other'] = symbol("O_one") msg.properties = application_properties msg.body = u"Hello World!" event.sender.send(msg) self.sent = True
def GetObject(self, cls): request = Message() response = Message() request.address = self.address request.reply_to = self.reply request.correlation_id = 1 request.properties = {u'operation':u'GET', u'type':cls} request.body = {'attributeNames': []} self.M.put(request) self.M.send() self.M.recv() self.M.get(response) if response.properties['status-code'] != 200: raise Exception("Agent reports: %d %s" % (response.properties['status-code'], response.properties['status-description'])) entities = [] results = response.body for e in results: entities.append(AmqpEntity(e)) return entities
def test_03_bad_response_message(self): """ Test various improperly constructed response messages """ DUMMY_TESTS = { "GET": [ ( RequestMsg("GET", "/GET/test_03_bad_response_message", headers={"Content-Length": "000"}), None, None, ), ] } body_filler = "?" * 1024 * 300 # Q2 # fake server - just to create a sink for the "fakeServer" address so # credit will be granted. rx = AsyncTestReceiver(self.INT_A.listener, source="fakeServer") # no correlation id: client = ThreadedTestClient(DUMMY_TESTS, self.http_fake_port) req = rx.queue.get(timeout=TIMEOUT) resp = Message(body="NO CORRELATION ID " + body_filler) resp.to = req.reply_to ts = AsyncTestSender(address=self.INT_A.listener, target=req.reply_to, message=resp) ts.wait() self.assertEqual(1, ts.rejected) client.wait() self.assertIsNotNone(client.error) # missing application properties client = ThreadedTestClient(DUMMY_TESTS, self.http_fake_port) req = rx.queue.get(timeout=TIMEOUT) resp = Message(body="NO APPLICATION PROPS " + body_filler) resp.to = req.reply_to resp.correlation_id = req.id ts = AsyncTestSender(address=self.INT_A.listener, target=req.reply_to, message=resp) ts.wait() self.assertEqual(1, ts.rejected) client.wait() self.assertIsNotNone(client.error) # no status application property client = ThreadedTestClient(DUMMY_TESTS, self.http_fake_port) req = rx.queue.get(timeout=TIMEOUT) resp = Message(body="MISSING STATUS HEADER " + body_filler) resp.to = req.reply_to resp.correlation_id = req.id resp.properties = {"stuff": "value"} ts = AsyncTestSender(address=self.INT_A.listener, target=req.reply_to, message=resp) ts.wait() self.assertEqual(1, ts.rejected) client.wait() self.assertIsNotNone(client.error) # TODO: fix body parsing (returns NEED_MORE) # # invalid body format # client = ThreadedTestClient(DUMMY_TESTS, # self.http_fake_port) # req = rx.queue.get(timeout=TIMEOUT) # resp = Message(body="INVALID BODY FORMAT " + body_filler) # resp.to = req.reply_to # resp.correlation_id = req.id # resp.properties = {"http:status": 200} # ts = AsyncTestSender(address=self.INT_A.listener, # target=req.reply_to, # message=resp) # ts.wait() # self.assertEqual(1, ts.rejected); # client.wait() # self.assertIsNotNone(client.error) rx.stop() sleep(0.5) # fudge factor allow socket close to complete # verify router is still sane: count, error = http1_ping(self.http_server_port, self.http_listener_port) self.assertIsNone(error) self.assertEqual(1, count)