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 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): 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 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 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 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 on_link_opened(self, event): if event.receiver != self.receiver: return request = Message(self.message_body) request.reply_to = self.receiver.remote_source.address self.sender.send(request) print("REQUEST: Sent request '{0}'".format(request.body))
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 on_link_opened(self, event): if event.link.is_sender: print("REQUEST: Opened sender for target address '{0}'".format( event.sender.target.address)) if event.link.is_receiver: print("REQUEST: Opened dynamic receiver for responses") request = Message(self.message_body) request.id = uuid.uuid4() request.reply_to = event.receiver.remote_source.address self.sender.send(request) print("REQUEST: Sent request '{0}'".format(request.body))
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 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 test_message_user_id_proxy_blank_name_allowed(self): # Send a message with a blank user_id that should be allowed M1 = self.messenger() M1.route("amqp:/*", self.address(14) + "/$1") subscription = M1.subscribe("amqp:/#") reply_to = subscription.address addr = 'amqp:/_local/$displayname' tm = Message() rm = Message() tm.address = addr tm.reply_to = reply_to tm.body = {'profilename': 'server-ssl10', 'opcode': 'QUERY', 'userid': '94745961c5646ee0129536b3acef1eea0d8d2f26f8c353455233027bcd47'} M1.put(tm) M1.send() M1.recv(1) M1.get(rm) self.assertEqual('elaine', rm.body['user_name'])
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_02_bad_request_message(self): """ Test various improperly constructed request messages """ server = TestServer(server_port=self.http_server_port, client_port=self.http_listener_port, tests={}) body_filler = "?" * 1024 * 300 # Q2 msg = Message(body="NOMSGID " + body_filler) ts = AsyncTestSender(address=self.INT_A.listener, target="testServer", message=msg) ts.wait() self.assertEqual(1, ts.rejected) msg = Message(body="NO REPLY TO " + body_filler) msg.id = 1 ts = AsyncTestSender(address=self.INT_A.listener, target="testServer", message=msg) ts.wait() self.assertEqual(1, ts.rejected) msg = Message(body="NO SUBJECT " + body_filler) msg.id = 1 msg.reply_to = "amqp://fake/reply_to" ts = AsyncTestSender(address=self.INT_A.listener, target="testServer", message=msg) ts.wait() self.assertEqual(1, ts.rejected) msg = Message(body="NO APP PROPERTIES " + body_filler) msg.id = 1 msg.reply_to = "amqp://fake/reply_to" msg.subject = "GET" ts = AsyncTestSender(address=self.INT_A.listener, target="testServer", message=msg) ts.wait() self.assertEqual(1, ts.rejected) # TODO: fix body parsing (returns NEED_MORE) # msg = Message(body="INVALID BODY " + body_filler) # msg.id = 1 # msg.reply_to = "amqp://fake/reply_to" # msg.subject = "GET" # msg.properties = {"http:target": "/Some/target"} # ts = AsyncTestSender(address=self.INT_A.listener, # target="testServer", # message=msg) # ts.wait() # self.assertEqual(1, ts.rejected); server.wait() # verify router is still sane: count, error = http1_ping(self.http_server_port, self.http_listener_port) self.assertIsNone(error) self.assertEqual(1, count)
def test_ssl_user_id(self): ssl_opts = dict() ssl_opts['ssl-trustfile'] = self.ssl_file('ca-certificate.pem') ssl_opts['ssl-certificate'] = self.ssl_file('client-certificate.pem') ssl_opts['ssl-key'] = self.ssl_file('client-private-key.pem') ssl_opts['ssl-password'] = '******' # create the SSL domain object domain = self.create_ssl_domain(ssl_opts) addr = self.address(0).replace("amqp", "amqps") node = Node.connect(addr, ssl_domain=domain) user_id = node.query(type='org.apache.qpid.dispatch.connection', attribute_names=['user']).results[0][0] self.assertEqual("60f5dbd7ed14a5ea243785e81745ac8463494298", user_id) addr = self.address(1).replace("amqp", "amqps") node = Node.connect(addr, ssl_domain=domain) self.assertEqual("7c87f0c974f9e1aa5cb98f13fae9675625f240c98034b888753140da28094879", node.query(type='org.apache.qpid.dispatch.connection', attribute_names=['user']).results[1][0]) addr = self.address(2).replace("amqp", "amqps") node = Node.connect(addr, ssl_domain=domain) self.assertEqual("82244216b6d02ffdfb886c8da3c803e0f7a7b330a7b665dccabd30bd25d0f35e2a4fff5f0a2a01d56eb7dbae085c108e71a32b84bab16c9ec243a1f6d014900d", node.query(type='org.apache.qpid.dispatch.connection', attribute_names=['user']).results[2][0]) addr = self.address(3).replace("amqp", "amqps") node = Node.connect(addr, ssl_domain=domain) self.assertEqual("7c87f0c974f9e1aa5cb98f13fae9675625f240c98034b888753140da28094879;127.0.0.1;Client;Dev;US;NC", node.query(type='org.apache.qpid.dispatch.connection', attribute_names=['user']).results[3][0]) addr = self.address(4).replace("amqp", "amqps") node = Node.connect(addr, ssl_domain=domain) self.assertEqual("60f5dbd7ed14a5ea243785e81745ac8463494298;US;NC", node.query(type='org.apache.qpid.dispatch.connection', attribute_names=['user']).results[4][0]) addr = self.address(5).replace("amqp", "amqps") node = Node.connect(addr, ssl_domain=domain) self.assertEqual("US;NC;82244216b6d02ffdfb886c8da3c803e0f7a7b330a7b665dccabd30bd25d0f35e2a4fff5f0a2a01d56eb7dbae085c108e71a32b84bab16c9ec243a1f6d014900d", node.query(type='org.apache.qpid.dispatch.connection', attribute_names=['user']).results[5][0]) addr = self.address(6).replace("amqp", "amqps") node = Node.connect(addr, ssl_domain=domain) self.assertEqual("127.0.0.1;NC;Dev;US;Client", node.query(type='org.apache.qpid.dispatch.connection', attribute_names=['user']).results[6][0]) addr = self.address(7).replace("amqp", "amqps") node = Node.connect(addr, ssl_domain=domain) self.assertEqual("NC;US;Client;Dev;127.0.0.1;Raleigh", node.query(type='org.apache.qpid.dispatch.connection', attribute_names=['user']).results[7][0]) addr = self.address(8).replace("amqp", "amqps") node = Node.connect(addr, ssl_domain=domain) self.assertEqual("C=US,ST=NC,L=Raleigh,OU=Dev,O=Client,CN=127.0.0.1", node.query(type='org.apache.qpid.dispatch.connection', attribute_names=['user']).results[8][0]) addr = self.address(9).replace("amqp", "amqps") node = Node.connect(addr, ssl_domain=domain) self.assertEqual("C=US,ST=NC,L=Raleigh,OU=Dev,O=Client,CN=127.0.0.1", node.query(type='org.apache.qpid.dispatch.connection', attribute_names=['user']).results[9][0]) addr = self.address(10).replace("amqp", "amqps") node = Node.connect(addr, ssl_domain=domain) user = node.query(type='org.apache.qpid.dispatch.connection', attribute_names=['user']).results[10][0] self.assertEqual("C=US,ST=NC,L=Raleigh,OU=Dev,O=Client,CN=127.0.0.1", str(user)) addr = self.address(11).replace("amqp", "amqps") node = Node.connect(addr) user = node.query(type='org.apache.qpid.dispatch.connection', attribute_names=['user']).results[11][0] self.assertEqual("anonymous", user) M1 = self.messenger() M1.route("amqp:/*", self.address(12)+"/$1") subscription = M1.subscribe("amqp:/#") reply_to = subscription.address addr = 'amqp:/_local/$displayname' tm = Message() rm = Message() tm.address = addr tm.reply_to = reply_to tm.body = {'profilename': 'server-ssl10', 'opcode': 'QUERY', 'userid': '94745961c5646ee0129536b3acef1eea0d8d2f26f8c353455233027bcd47'} M1.put(tm) M1.send() M1.recv(1) M1.get(rm) self.assertEqual('elaine', rm.body['user_name']) tm = Message() rm = Message() tm.address = addr tm.reply_to = reply_to tm.body = {'profilename': 'server-ssl14', 'opcode': 'QUERY', 'userid': '94745961c5646ee0129536b3acef1eea0d8d2f26f8c3ed08ece4f8f3027bcd48'} M1.put(tm) M1.send() M1.recv(1) M1.get(rm) self.assertEqual('94745961c5646ee0129536b3acef1eea0d8d2f26f8c3ed08ece4f8f3027bcd48', rm.body['user_name']) # The profile name, userid pair have a matching user name tm = Message() rm = Message() tm.address = addr tm.reply_to = reply_to tm.body = {'profilename': 'server-ssl12', 'opcode': 'QUERY', 'userid': '94745961c5646ee0129536b3acef1eea0d8d2f26f8c3ed08ece4f8f3027bcd48'} M1.put(tm) M1.send() M1.recv(1) M1.get(rm) self.assertEqual('johndoe', rm.body['user_name']) tm = Message() rm = Message() tm.address = addr tm.reply_to = reply_to tm.body = {'profilename': 'server-ssl10', 'opcode': 'QUERY', 'userid': '12345'} M1.put(tm) M1.send() M1.recv(1) M1.get(rm) self.assertEqual('12345', rm.body['user_name']) M1.stop() node.close()