| #!/usr/bin/env python |
| # |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| # |
| |
| import sys |
| from qpid.testlib import TestBase010 |
| from qpid.datatypes import Message |
| from qpid.queue import Empty |
| from time import sleep |
| import qmf.console |
| |
| class QmfInteropTests(TestBase010): |
| |
| def test_A_agent_presence(self): |
| self.startQmf(); |
| qmf = self.qmf |
| |
| agents = [] |
| count = 0 |
| while len(agents) == 0: |
| agents = qmf.getObjects(_class="agent") |
| sleep(1) |
| count += 1 |
| if count > 10: |
| self.fail("Timed out waiting for remote agent") |
| |
| def test_B_basic_method_invocation(self): |
| self.startQmf(); |
| qmf = self.qmf |
| |
| parents = qmf.getObjects(_class="parent") |
| self.assertEqual(len(parents), 1) |
| parent = parents[0] |
| for seq in range(10): |
| result = parent.echo(seq, _timeout=5) |
| self.assertEqual(result.status, 0) |
| self.assertEqual(result.text, "OK") |
| self.assertEqual(result.sequence, seq) |
| |
| result = parent.set_numerics("bogus") |
| self.assertEqual(result.status, 1) |
| self.assertEqual(result.text, "Invalid argument value for test") |
| |
| def test_C_basic_types_numeric_big(self): |
| self.startQmf(); |
| qmf = self.qmf |
| |
| parents = qmf.getObjects(_class="parent") |
| self.assertEqual(len(parents), 1) |
| parent = parents[0] |
| |
| result = parent.set_numerics("big") |
| self.assertEqual(result.status, 0) |
| self.assertEqual(result.text, "OK") |
| |
| parent.update() |
| |
| self.assertEqual(parent.uint64val, 0x9494949449494949) |
| self.assertEqual(parent.uint32val, 0xA5A55A5A) |
| self.assertEqual(parent.uint16val, 0xB66B) |
| self.assertEqual(parent.uint8val, 0xC7) |
| |
| self.assertEqual(parent.int64val, 1000000000000000000) |
| self.assertEqual(parent.int32val, 1000000000) |
| self.assertEqual(parent.int16val, 10000) |
| self.assertEqual(parent.int8val, 100) |
| |
| def test_C_basic_types_numeric_small(self): |
| self.startQmf(); |
| qmf = self.qmf |
| |
| parents = qmf.getObjects(_class="parent") |
| self.assertEqual(len(parents), 1) |
| parent = parents[0] |
| |
| result = parent.set_numerics("small") |
| self.assertEqual(result.status, 0) |
| self.assertEqual(result.text, "OK") |
| |
| parent.update() |
| |
| self.assertEqual(parent.uint64val, 4) |
| self.assertEqual(parent.uint32val, 5) |
| self.assertEqual(parent.uint16val, 6) |
| self.assertEqual(parent.uint8val, 7) |
| |
| self.assertEqual(parent.int64val, 8) |
| self.assertEqual(parent.int32val, 9) |
| self.assertEqual(parent.int16val, 10) |
| self.assertEqual(parent.int8val, 11) |
| |
| def test_C_basic_types_numeric_negative(self): |
| self.startQmf(); |
| qmf = self.qmf |
| |
| parents = qmf.getObjects(_class="parent") |
| self.assertEqual(len(parents), 1) |
| parent = parents[0] |
| |
| result = parent.set_numerics("negative") |
| self.assertEqual(result.status, 0) |
| self.assertEqual(result.text, "OK") |
| |
| parent.update() |
| |
| self.assertEqual(parent.uint64val, 0) |
| self.assertEqual(parent.uint32val, 0) |
| self.assertEqual(parent.uint16val, 0) |
| self.assertEqual(parent.uint8val, 0) |
| |
| self.assertEqual(parent.int64val, -10000000000) |
| self.assertEqual(parent.int32val, -100000) |
| self.assertEqual(parent.int16val, -1000) |
| self.assertEqual(parent.int8val, -100) |
| |
| def disabled_test_D_userid_for_method(self): |
| self.startQmf(); |
| qmf = self.qmf |
| |
| parents = qmf.getObjects(_class="parent") |
| self.assertEqual(len(parents), 1) |
| parent = parents[0] |
| |
| result = parent.probe_userid() |
| self.assertEqual(result.status, 0) |
| self.assertEqual(result.userid, "guest") |
| |
| def test_D_get_by_object_id(self): |
| self.startQmf() |
| qmf = self.qmf |
| |
| parents = qmf.getObjects(_class="parent") |
| self.assertEqual(len(parents), 1) |
| parent = parents[0] |
| |
| newList = qmf.getObjects(_objectId=parent.getObjectId()) |
| self.assertEqual(len(newList), 1) |
| |
| def test_E_filter_by_object_id(self): |
| self.startQmf() |
| qmf = self.qmf |
| |
| list = qmf.getObjects(_class="exchange", name="qpid.management") |
| self.assertEqual(len(list), 1, "No Management Exchange") |
| mgmt_exchange = list[0] |
| |
| bindings = qmf.getObjects(_class="binding", exchangeRef=mgmt_exchange.getObjectId()) |
| if len(bindings) == 0: |
| self.fail("No bindings found on management exchange") |
| |
| for binding in bindings: |
| self.assertEqual(binding.exchangeRef, mgmt_exchange.getObjectId()) |
| |
| def test_F_events(self): |
| class Handler(qmf.console.Console): |
| def __init__(self): |
| self.queue = [] |
| |
| def event(self, broker, event): |
| if event.getClassKey().getClassName() == "test_event": |
| self.queue.append(event) |
| |
| handler = Handler() |
| self.startQmf(handler) |
| |
| parents = self.qmf.getObjects(_class="parent") |
| self.assertEqual(len(parents), 1) |
| parent = parents[0] |
| |
| parent.set_numerics("big") |
| parent.set_numerics("small") |
| parent.set_numerics("negative") |
| parent.set_short_string("TEST") |
| parent.set_long_string("LONG_TEST") |
| parent.probe_userid() |
| |
| queue = handler.queue |
| self.assertEqual(len(queue), 5) |
| self.assertEqual(queue[0].arguments["uint32val"], 0xA5A55A5A) |
| self.assertEqual(queue[0].arguments["strval"], "Unused") |
| |
| # verify map and list event content. |
| # see agent for structure of listval and mapval |
| listval = queue[0].arguments["listval"] |
| self.assertTrue(isinstance(listval, list)) |
| self.assertEqual(len(listval), 5) |
| self.assertTrue(isinstance(listval[4], list)) |
| self.assertEqual(len(listval[4]), 4) |
| self.assertTrue(isinstance(listval[4][3], dict)) |
| self.assertEqual(listval[4][3]["hi"], 10) |
| self.assertEqual(listval[4][3]["lo"], 5) |
| self.assertEqual(listval[4][3]["neg"], -3) |
| |
| mapval = queue[0].arguments["mapval"] |
| self.assertTrue(isinstance(mapval, dict)) |
| self.assertEqual(len(mapval), 7) |
| self.assertEqual(mapval['aLong'], 9999999999) |
| self.assertEqual(mapval['aInt'], 54321) |
| self.assertEqual(mapval['aSigned'], -666) |
| self.assertEqual(mapval['aString'], "A String"), |
| self.assertEqual(mapval['aFloat'], 3.1415), |
| self.assertTrue(isinstance(mapval['aMap'], dict)) |
| self.assertEqual(len(mapval['aMap']), 2) |
| self.assertEqual(mapval['aMap']['second'], 2) |
| self.assertTrue(isinstance(mapval['aList'], list)) |
| self.assertEqual(len(mapval['aList']), 4) |
| self.assertEqual(mapval['aList'][1], -1) |
| |
| self.assertEqual(queue[1].arguments["uint32val"], 5) |
| self.assertEqual(queue[1].arguments["strval"], "Unused") |
| self.assertEqual(queue[2].arguments["uint32val"], 0) |
| self.assertEqual(queue[2].arguments["strval"], "Unused") |
| self.assertEqual(queue[3].arguments["uint32val"], 0) |
| self.assertEqual(queue[3].arguments["strval"], "TEST") |
| self.assertEqual(queue[4].arguments["uint32val"], 0) |
| self.assertEqual(queue[4].arguments["strval"], "LONG_TEST") |
| |
| |
| |
| def test_G_basic_map_list_data(self): |
| self.startQmf(); |
| qmf = self.qmf |
| |
| parents = qmf.getObjects(_class="parent") |
| self.assertEqual(len(parents), 1) |
| parent = parents[0] |
| |
| # see agent for structure of listval |
| |
| self.assertTrue(isinstance(parent.listval, list)) |
| self.assertEqual(len(parent.listval), 5) |
| self.assertTrue(isinstance(parent.listval[4], list)) |
| self.assertEqual(len(parent.listval[4]), 4) |
| self.assertTrue(isinstance(parent.listval[4][3], dict)) |
| self.assertEqual(parent.listval[4][3]["hi"], 10) |
| self.assertEqual(parent.listval[4][3]["lo"], 5) |
| self.assertEqual(parent.listval[4][3]["neg"], -3) |
| |
| # see agent for structure of mapval |
| |
| self.assertTrue(isinstance(parent.mapval, dict)) |
| self.assertEqual(len(parent.mapval), 7) |
| self.assertEqual(parent.mapval['aLong'], 9999999999) |
| self.assertEqual(parent.mapval['aInt'], 54321) |
| self.assertEqual(parent.mapval['aSigned'], -666) |
| self.assertEqual(parent.mapval['aString'], "A String"), |
| self.assertEqual(parent.mapval['aFloat'], 3.1415), |
| self.assertTrue(isinstance(parent.mapval['aMap'], dict)) |
| self.assertEqual(len(parent.mapval['aMap']), 2) |
| self.assertEqual(parent.mapval['aMap']['second'], 2) |
| self.assertTrue(isinstance(parent.mapval['aList'], list)) |
| self.assertEqual(len(parent.mapval['aList']), 4) |
| self.assertEqual(parent.mapval['aList'][1], -1) |
| |
| def test_H_map_list_method_call(self): |
| self.startQmf(); |
| qmf = self.qmf |
| |
| parents = qmf.getObjects(_class="parent") |
| self.assertEqual(len(parents), 1) |
| parent = parents[0] |
| |
| inMap = {'aLong' : long(9999999999), |
| 'aInt' : int(54321), |
| 'aSigned' : -666, |
| 'aString' : "A String", |
| 'aFloat' : 3.1415, |
| 'aList' : ['x', -1, 'y', 2], |
| 'abool' : False} |
| inList = ['aString', long(1), -1, 2.7182, {'aMap': -8}, True] |
| |
| result = parent.test_map_list(inMap, inList) |
| self.assertEqual(result.status, 0) |
| self.assertEqual(result.text, "OK") |
| |
| # verify returned values |
| self.assertEqual(len(inMap), len(result.outArgs['outMap'])) |
| for key,value in result.outArgs['outMap'].items(): |
| self.assertEqual(inMap[key], value) |
| |
| self.assertEqual(len(inList), len(result.outArgs['outList'])) |
| for idx in range(len(inList)): |
| self.assertEqual(inList[idx], result.outArgs['outList'][idx]) |
| |
| |
| def getProperty(self, msg, name): |
| for h in msg.headers: |
| if hasattr(h, name): return getattr(h, name) |
| return None |
| |
| def getAppHeader(self, msg, name): |
| headers = self.getProperty(msg, "application_headers") |
| if headers: |
| return headers[name] |
| return None |