PROTON-490: get the python unit test to run in Python 3
Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/99299d3b Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/99299d3b Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/99299d3b Branch: refs/heads/master Commit: 99299d3b33e5e5ae9fbeff51ac6b7b25cacd6e85 Parents: efa1f68 Author: Ken Giusti <[email protected]> Authored: Wed Apr 22 16:54:25 2015 -0400 Committer: Ken Giusti <[email protected]> Committed: Fri Apr 24 15:59:03 2015 -0400 ---------------------------------------------------------------------- proton-c/bindings/python/cproton.i | 12 ++- proton-c/bindings/python/proton/__init__.py | 97 ++++++++++-------- proton-c/bindings/python/proton/reactor.py | 10 +- proton-c/bindings/python/proton/utils.py | 14 +-- proton-c/bindings/python/proton/wrapper.py | 12 ++- proton-j/src/main/resources/cmessage.py | 2 +- tests/python/proton-test | 28 ++--- tests/python/proton_tests/codec.py | 109 ++++++++++---------- tests/python/proton_tests/common.py | 9 +- tests/python/proton_tests/engine.py | 125 +++++++++++++---------- tests/python/proton_tests/interop.py | 23 +++-- tests/python/proton_tests/message.py | 6 +- tests/python/proton_tests/messenger.py | 1 + tests/python/proton_tests/sasl.py | 11 +- tests/python/proton_tests/transport.py | 25 ++--- tests/python/proton_tests/utils.py | 1 + tests/tools/apps/python/msgr-recv.py | 5 + tests/tools/apps/python/msgr-send.py | 5 + tests/tools/soak-check | 5 +- 19 files changed, 279 insertions(+), 221 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/99299d3b/proton-c/bindings/python/cproton.i ---------------------------------------------------------------------- diff --git a/proton-c/bindings/python/cproton.i b/proton-c/bindings/python/cproton.i index 5744a2d..328d68a 100644 --- a/proton-c/bindings/python/cproton.i +++ b/proton-c/bindings/python/cproton.i @@ -38,6 +38,9 @@ %cstring_output_allocate_size(char **ALLOC_OUTPUT, size_t *ALLOC_SIZE, free(*$1)); %cstring_output_maxsize(char *OUTPUT, size_t MAX_OUTPUT_SIZE) +%include <pybuffer.i> +%pybuffer_binary(const char *BIN_IN, size_t BIN_LEN) + // Typemap for methods that return binary data: // force the return type as binary - this is necessary for Python3 %typemap(in,noblock=1,fragment=SWIG_AsVal_frag(size_t)) (char *BIN_OUT, size_t *BIN_SIZE) @@ -110,7 +113,10 @@ int pn_message_encode(pn_message_t *msg, char *BIN_OUT, size_t *BIN_SIZE); %ignore pn_message_encode; -ssize_t pn_link_send(pn_link_t *transport, char *STRING, size_t LENGTH); +int pn_message_decode(pn_message_t *msg, const char *BIN_IN, size_t BIN_LEN); +%ignore pn_message_encode; + +ssize_t pn_link_send(pn_link_t *transport, const char *BIN_IN, size_t BIN_LEN); %ignore pn_link_send; %rename(pn_link_recv) wrap_pn_link_recv; @@ -127,7 +133,7 @@ ssize_t pn_link_send(pn_link_t *transport, char *STRING, size_t LENGTH); %} %ignore pn_link_recv; -ssize_t pn_transport_push(pn_transport_t *transport, char *STRING, size_t LENGTH); +ssize_t pn_transport_push(pn_transport_t *transport, const char *BIN_IN, size_t BIN_LEN); %ignore pn_transport_push; %rename(pn_transport_peek) wrap_pn_transport_peek; @@ -163,7 +169,7 @@ ssize_t pn_transport_push(pn_transport_t *transport, char *STRING, size_t LENGTH %} %ignore pn_delivery_tag; -ssize_t pn_data_decode(pn_data_t *data, char *STRING, size_t LENGTH); +ssize_t pn_data_decode(pn_data_t *data, const char *BIN_IN, size_t BIN_LEN); %ignore pn_data_decode; %rename(pn_data_encode) wrap_pn_data_encode; http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/99299d3b/proton-c/bindings/python/proton/__init__.py ---------------------------------------------------------------------- diff --git a/proton-c/bindings/python/proton/__init__.py b/proton-c/bindings/python/proton/__init__.py index 8871eda..399aec7 100644 --- a/proton-c/bindings/python/proton/__init__.py +++ b/proton-c/bindings/python/proton/__init__.py @@ -79,16 +79,16 @@ except ImportError: rand = random.Random() rand.seed((os.getpid(), time.time(), socket.gethostname())) def random_uuid(): - bytes = [rand.randint(0, 255) for i in xrange(16)] + data = [rand.randint(0, 255) for i in xrange(16)] # From RFC4122, the version bits are set to 0100 - bytes[7] &= 0x0F - bytes[7] |= 0x40 + data[7] &= 0x0F + data[7] |= 0x40 # From RFC4122, the top two bits of byte 8 get set to 01 - bytes[8] &= 0x3F - bytes[8] |= 0x80 - return "".join(map(chr, bytes)) + data[8] &= 0x3F + data[8] |= 0x80 + return "".join(map(chr, data)) def uuid4(): return uuid.UUID(bytes=random_uuid()) @@ -805,7 +805,7 @@ class Message(object): self.annotations = None self.properties = None self.body = body - for k,v in kwargs.iteritems(): + for k,v in six.iteritems(kwargs): getattr(self, k) # Raise exception if it's not a valid attribute. setattr(self, k, v) @@ -846,19 +846,19 @@ class Message(object): props = Data(pn_message_properties(self._msg)) body = Data(pn_message_body(self._msg)) - if next(inst): + if inst.next(): self.instructions = inst.get_object() else: self.instructions = None - if next(ann): + if ann.next(): self.annotations = ann.get_object() else: self.annotations = None - if next(props): + if props.next(): self.properties = props.get_object() else: self.properties = None - if next(body): + if body.next(): self.body = body.get_object() else: self.body = None @@ -1106,7 +1106,7 @@ The group-id for any replies. return data def decode(self, data): - self._check(pn_message_decode(self._msg, data, len(data))) + self._check(pn_message_decode(self._msg, data)) self._post_decode() def send(self, sender, tag=None): @@ -1803,7 +1803,7 @@ class Data: @type s: string @param s: the symbol name """ - self._check(pn_data_put_symbol(self._data, s)) + self._check(pn_data_put_symbol(self._data, s.encode('ascii'))) def get_list(self): """ @@ -1941,7 +1941,7 @@ class Data: If the current node is a char, returns its value, returns 0 otherwise. """ - return char(unichr(pn_data_get_char(self._data))) + return char(six.unichr(pn_data_get_char(self._data))) def get_ulong(self): """ @@ -2031,7 +2031,7 @@ class Data: If the current node is a symbol, returns its value, returns "" otherwise. """ - return symbol(pn_data_get_symbol(self._data)) + return symbol(pn_data_get_symbol(self._data).decode('ascii')) def copy(self, src): self._check(pn_data_copy(self._data, src._data)) @@ -2064,9 +2064,9 @@ class Data: if self.enter(): try: result = {} - while next(self): + while self.next(): k = self.get_object() - if next(self): + if self.next(): v = self.get_object() else: v = None @@ -2088,7 +2088,7 @@ class Data: if self.enter(): try: result = [] - while next(self): + while self.next(): result.append(self.get_object()) finally: self.exit() @@ -2097,9 +2097,9 @@ class Data: def get_py_described(self): if self.enter(): try: - next(self) + self.next() descriptor = self.get_object() - next(self) + self.next() value = self.get_object() finally: self.exit() @@ -2126,12 +2126,12 @@ class Data: if self.enter(): try: if described: - next(self) + self.next() descriptor = self.get_object() else: descriptor = UNDESCRIBED elements = [] - while next(self): + while self.next(): elements.append(self.get_object()) finally: self.exit() @@ -2309,7 +2309,7 @@ def dat2obj(dimpl): if dimpl: d = Data(dimpl) d.rewind() - next(d) + d.next() obj = d.get_object() d.rewind() return obj @@ -2334,21 +2334,34 @@ def millis2timeout(millis): return millis2secs(millis) def unicode2utf8(string): + """Some Proton APIs expect a null terminated string. Convert python text + types to UTF8 to avoid zero bytes introduced by other multi-byte encodings. + This method will throw if the string cannot be converted. + """ if string is None: return None - if isinstance(string, six.text_type): - return string.encode('utf8') - elif isinstance(string, str): - return string - else: - raise TypeError("Unrecognized string type: %r" % string) + if six.PY2: + if isinstance(string, unicode): + return string.encode('utf-8') + elif isinstance(string, str): + return string + elif six.PY3: + # decoding a string results in bytes + if isinstance(string, str): + string = string.encode('utf-8') + # fall through + if isinstance(string, bytes): + return string.decode('utf-8') + raise TypeError("Unrecognized string type: %r (%s)" % (string, type(string))) def utf82unicode(string): + """Covert C strings returned from proton-c into python unicode""" if string is None: return None if isinstance(string, six.text_type): + # already unicode return string - elif isinstance(string, str): + elif isinstance(string, six.binary_type): return string.decode('utf8') else: raise TypeError("Unrecognized string type") @@ -2872,11 +2885,16 @@ class Sender(Link): def offered(self, n): pn_link_offered(self._impl, n) - def stream(self, bytes): + def stream(self, data): """ - Send specified bytes as part of the current delivery + Send specified data as part of the current delivery + + @type data: binary + @param data: data to send """ - return self._check(pn_link_send(self._impl, bytes)) + #if six.PY3 and isinstance(data, six.text_type): + # data = data.encode('utf-8') + return self._check(pn_link_send(self._impl, data)) def send(self, obj, tag=None): """ @@ -2913,12 +2931,12 @@ class Receiver(Link): pn_link_flow(self._impl, n) def recv(self, limit): - n, bytes = pn_link_recv(self._impl, limit) + n, binary = pn_link_recv(self._impl, limit) if n == PN_EOS: return None else: self._check(n) - return bytes + return binary def drain(self, n): pn_link_drain(self._impl, n) @@ -3232,9 +3250,9 @@ class Transport(Wrapper): else: return self._check(c) - def push(self, bytes): - n = self._check(pn_transport_push(self._impl, bytes)) - if n != len(bytes): + def push(self, binary): + n = self._check(pn_transport_push(self._impl, binary)) + if n != len(binary): raise OverflowError("unable to process all bytes") def close_tail(self): @@ -3370,7 +3388,6 @@ class SASL(Wrapper): def done(self, outcome): pn_sasl_done(self._sasl, outcome) - class SSLException(TransportException): pass @@ -3853,7 +3870,7 @@ class Url(object): If specified, replaces corresponding part in url string. """ if url: - self._url = pn_url_parse(str(url)) + self._url = pn_url_parse(unicode2utf8(str(url))) if not self._url: raise ValueError("Invalid URL '%s'" % url) else: self._url = pn_url() http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/99299d3b/proton-c/bindings/python/proton/reactor.py ---------------------------------------------------------------------- diff --git a/proton-c/bindings/python/proton/reactor.py b/proton-c/bindings/python/proton/reactor.py index a9bd3cc..dd32648 100644 --- a/proton-c/bindings/python/proton/reactor.py +++ b/proton-c/bindings/python/proton/reactor.py @@ -482,9 +482,9 @@ class Connector(Handler): self.ssl_domain = None def _connect(self, connection): - url = next(self.address) + url = self.address.next() # IoHandler uses the hostname to determine where to try to connect to - connection.hostname = "%s:%i" % (url.host, url.port) + connection.hostname = "%s:%s" % (url.host, url.port) logging.info("connecting to %s..." % connection.hostname) transport = Transport() @@ -517,7 +517,7 @@ class Connector(Handler): if self.connection and self.connection.state & Endpoint.LOCAL_ACTIVE: if self.reconnect: event.transport.unbind() - delay = next(self.reconnect) + delay = self.reconnect.next() if delay == 0: logging.info("Disconnected, reconnecting...") self._connect(self.connection) @@ -667,7 +667,7 @@ class Container(Reactor): Various LinkOptions can be specified to further control the attachment. """ - if isinstance(context, basestring): + if isinstance(context, six.string_types): context = Url(context) if isinstance(context, Url) and not target: target = context.path @@ -708,7 +708,7 @@ class Container(Reactor): Various LinkOptions can be specified to further control the attachment. """ - if isinstance(context, basestring): + if isinstance(context, six.string_types): context = Url(context) if isinstance(context, Url) and not source: source = context.path http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/99299d3b/proton-c/bindings/python/proton/utils.py ---------------------------------------------------------------------- diff --git a/proton-c/bindings/python/proton/utils.py b/proton-c/bindings/python/proton/utils.py index 0d7f39e..7b8ec13 100644 --- a/proton-c/bindings/python/proton/utils.py +++ b/proton-c/bindings/python/proton/utils.py @@ -17,6 +17,7 @@ # under the License. # import collections, socket, time, threading +import six from six.moves import queue as Queue from proton import ConnectionException, Delivery, Endpoint, Handler, LinkException, Message @@ -24,11 +25,6 @@ from proton import ProtonException, Timeout, Url from proton.reactor import Container from proton.handlers import MessagingHandler, IncomingMessageHandler -def utf8(s): - if isinstance(s, unicode): - return s.encode('utf8') - else: - return s class BlockingLink(object): def __init__(self, connection, link): @@ -196,13 +192,13 @@ class BlockingConnection(Handler): self.container = container or Container() self.container.timeout = self.timeout self.container.start() - self.url = Url(utf8(url)).defaults() + self.url = Url(url).defaults() self.conn = self.container.connect(url=self.url, handler=self, ssl_domain=ssl_domain, reconnect=False) self.wait(lambda: not (self.conn.state & Endpoint.REMOTE_UNINIT), msg="Opening connection") def create_sender(self, address, handler=None, name=None, options=None): - return BlockingSender(self, self.container.create_sender(self.conn, utf8(address), name=utf8(name), handler=handler, options=options)) + return BlockingSender(self, self.container.create_sender(self.conn, address, name=name, handler=handler, options=options)) def create_receiver(self, address, credit=None, dynamic=False, handler=None, name=None, options=None): prefetch = credit @@ -213,7 +209,7 @@ class BlockingConnection(Handler): else: fetcher = Fetcher(self, credit) return BlockingReceiver( - self, self.container.create_receiver(self.conn, utf8(address), name=utf8(name), dynamic=dynamic, handler=handler or fetcher, options=options), fetcher, credit=prefetch) + self, self.container.create_receiver(self.conn, address, name=name, dynamic=dynamic, handler=handler or fetcher, options=options), fetcher, credit=prefetch) def close(self): self.conn.close() @@ -314,7 +310,7 @@ class SyncRequestResponse(IncomingMessageHandler): if not self.address and not request.address: raise ValueError("Request message has no address: %s" % request) request.reply_to = self.reply_to - request.correlation_id = correlation_id = next(self.correlation_id) + request.correlation_id = correlation_id = self.correlation_id.next() self.sender.send(request) def wakeup(): return self.response and (self.response.correlation_id == correlation_id) http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/99299d3b/proton-c/bindings/python/proton/wrapper.py ---------------------------------------------------------------------- diff --git a/proton-c/bindings/python/proton/wrapper.py b/proton-c/bindings/python/proton/wrapper.py index 2911d3a..d3923cf 100644 --- a/proton-c/bindings/python/proton/wrapper.py +++ b/proton-c/bindings/python/proton/wrapper.py @@ -81,11 +81,15 @@ class Wrapper(object): def __hash__(self): return hash(addressof(self._impl)) - def __cmp__(self, other): + def __eq__(self, other): if isinstance(other, Wrapper): - return cmp(addressof(self._impl), addressof(other._impl)) - else: - return -1 + return addressof(self._impl) == addressof(other._impl) + return False + + def __ne__(self, other): + if isinstance(other, Wrapper): + return addressof(self._impl) != addressof(other._impl) + return True def __del__(self): pn_decref(self._impl) http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/99299d3b/proton-j/src/main/resources/cmessage.py ---------------------------------------------------------------------- diff --git a/proton-j/src/main/resources/cmessage.py b/proton-j/src/main/resources/cmessage.py index 6035d54..a338da2 100644 --- a/proton-j/src/main/resources/cmessage.py +++ b/proton-j/src/main/resources/cmessage.py @@ -215,7 +215,7 @@ def pn_message_properties(msg): def pn_message_body(msg): return msg.body -def pn_message_decode(msg, data, n): +def pn_message_decode(msg, data): n = msg.impl.decode(array(data, 'b'), 0, len(data)) msg.post_decode() return n http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/99299d3b/tests/python/proton-test ---------------------------------------------------------------------- diff --git a/tests/python/proton-test b/tests/python/proton-test index 66113dc..5073ab4 100755 --- a/tests/python/proton-test +++ b/tests/python/proton-test @@ -20,6 +20,7 @@ # TODO: summarize, test harness preconditions (e.g. broker is alive) +import six import logging, optparse, os, struct, sys, time, traceback, types, cgi from fnmatch import fnmatchcase as match from getopt import GetoptError @@ -32,7 +33,7 @@ levels = { "ERROR": ERROR } -sorted_levels = [(v, k) for k, v in levels.items()] +sorted_levels = [(v, k) for k, v in list(levels.items())] sorted_levels.sort() sorted_levels = [v for k, v in sorted_levels] @@ -446,9 +447,9 @@ def run_test(name, test, config): if interceptor.last != "\n": sys.stdout.write("\n") sys.stdout.write(output) - print " %s" % colorize_word(runner.status()) + print(" %s" % colorize_word(runner.status())) if runner.failed() or runner.skipped(): - print runner.get_formatted_exception_trace() + print(runner.get_formatted_exception_trace()) root.setLevel(level) filter.patterns = patterns return TestResult(end - start, @@ -554,7 +555,7 @@ class FunctionScanner(PatternMatcher): class ClassScanner(PatternMatcher): def inspect(self, obj): - return type(obj) in (types.ClassType, types.TypeType) and self.matches(obj.__name__) + return type(obj) in six.class_types and self.matches(obj.__name__) def descend(self, cls): # the None is required for older versions of python @@ -565,8 +566,7 @@ class ClassScanner(PatternMatcher): names.sort() for name in names: obj = getattr(cls, name) - t = type(obj) - if t == types.MethodType and name.startswith("test"): + if six.callable(obj) and name.startswith("test"): yield MethodTest(cls, name) class ModuleScanner: @@ -633,7 +633,7 @@ def runthrough(): start = time.time() for t in filtered: if list_only: - print t.name() + print(t.name()) else: st = t.run() if xmlr: @@ -667,22 +667,22 @@ def runthrough(): skip = "skip" else: skip = "pass" - print colorize("Totals:", 1), + six.print_(colorize("Totals:", 1), end=' ') totals = [colorize_word("total", "%s tests" % total), colorize_word(_pass, "%s passed" % passed), colorize_word(skip, "%s skipped" % skipped), colorize_word(ign, "%s ignored" % len(ignored)), colorize_word(outcome, "%s failed" % failed)] - print ", ".join(totals), + six.print_(", ".join(totals), end=' ') if opts.hoe and failed > 0: - print " -- (halted after %s)" % run + print(" -- (halted after %s)" % run) else: - print + print() if opts.time and run > 0: - print colorize("Timing:", 1), + six.print_(colorize("Timing:", 1), end=' ') timing = [colorize_word("elapsed", "%.2fs elapsed" % (end - start)), colorize_word("average", "%.2fs average" % ((end - start)/run))] - print ", ".join(timing) + print(", ".join(timing)) if xmlr: xmlr.end() @@ -697,7 +697,7 @@ while limit == 0 or count < limit: if runthrough(): failures = True if count > 1: - print " -- (failures after %s runthroughs)" % count + print(" -- (failures after %s runthroughs)" % count) else: continue http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/99299d3b/tests/python/proton_tests/codec.py ---------------------------------------------------------------------- diff --git a/tests/python/proton_tests/codec.py b/tests/python/proton_tests/codec.py index e8893cf..e340732 100644 --- a/tests/python/proton_tests/codec.py +++ b/tests/python/proton_tests/codec.py @@ -18,13 +18,13 @@ # import os, sys +import six from . import common from proton import * try: from uuid import uuid4 except ImportError: from proton import uuid4 - class Test(common.Test): @@ -37,58 +37,58 @@ class Test(common.Test): class DataTest(Test): def testTopLevelNext(self): - assert next(self.data) is None + assert self.data.next() is None self.data.put_null() self.data.put_bool(False) self.data.put_int(0) - assert next(self.data) is None + assert self.data.next() is None self.data.rewind() - assert next(self.data) == Data.NULL - assert next(self.data) == Data.BOOL - assert next(self.data) == Data.INT - assert next(self.data) is None + assert self.data.next() == Data.NULL + assert self.data.next() == Data.BOOL + assert self.data.next() == Data.INT + assert self.data.next() is None def testNestedNext(self): - assert next(self.data) is None + assert self.data.next() is None self.data.put_null() - assert next(self.data) is None + assert self.data.next() is None self.data.put_list() - assert next(self.data) is None + assert self.data.next() is None self.data.put_bool(False) - assert next(self.data) is None + assert self.data.next() is None self.data.rewind() - assert next(self.data) is Data.NULL - assert next(self.data) is Data.LIST + assert self.data.next() is Data.NULL + assert self.data.next() is Data.LIST self.data.enter() - assert next(self.data) is None + assert self.data.next() is None self.data.put_ubyte(0) - assert next(self.data) is None + assert self.data.next() is None self.data.put_uint(0) - assert next(self.data) is None + assert self.data.next() is None self.data.put_int(0) - assert next(self.data) is None + assert self.data.next() is None self.data.exit() - assert next(self.data) is Data.BOOL - assert next(self.data) is None + assert self.data.next() is Data.BOOL + assert self.data.next() is None self.data.rewind() - assert next(self.data) is Data.NULL - assert next(self.data) is Data.LIST + assert self.data.next() is Data.NULL + assert self.data.next() is Data.LIST assert self.data.enter() - assert next(self.data) is Data.UBYTE - assert next(self.data) is Data.UINT - assert next(self.data) is Data.INT - assert next(self.data) is None + assert self.data.next() is Data.UBYTE + assert self.data.next() is Data.UINT + assert self.data.next() is Data.INT + assert self.data.next() is None assert self.data.exit() - assert next(self.data) is Data.BOOL - assert next(self.data) is None + assert self.data.next() is Data.BOOL + assert self.data.next() is None def testEnterExit(self): - assert next(self.data) is None + assert self.data.next() is None assert not self.data.enter() self.data.put_list() assert self.data.enter() - assert next(self.data) is None + assert self.data.next() is None self.data.put_list() assert self.data.enter() self.data.put_list() @@ -101,19 +101,19 @@ class DataTest(Test): assert self.data.get_list() == 1 assert not self.data.exit() assert self.data.get_list() == 1 - assert next(self.data) is None + assert self.data.next() is None self.data.rewind() - assert next(self.data) is Data.LIST + assert self.data.next() is Data.LIST assert self.data.get_list() == 1 assert self.data.enter() - assert next(self.data) is Data.LIST + assert self.data.next() is Data.LIST assert self.data.get_list() == 1 assert self.data.enter() - assert next(self.data) is Data.LIST + assert self.data.next() is Data.LIST assert self.data.get_list() == 0 assert self.data.enter() - assert next(self.data) is None + assert self.data.next() is None assert self.data.exit() assert self.data.get_list() == 0 assert self.data.exit() @@ -129,7 +129,7 @@ class DataTest(Test): putter(v) except Exception: etype, value, trace = sys.exc_info() - raise etype, "%s(%r): %s" % (putter.__name__, v, value), trace + six.reraise(etype, etype("%s(%r): %s" % (putter.__name__, v, value)), trace) return putter # (bits, signed) for each integer type @@ -148,12 +148,12 @@ class DataTest(Test): values = [0, 1, 2, 5, 42] if signed: min, max = -2**(bits-1), 2**(bits-1)-1 - values.append(max / 2) + values.append(max // 2) values += [-i for i in values if i] values += [min, max] else: max = 2**(bits) - 1 - values += [max / 2, max] + values += [max // 2, max] return sorted(values) def _testArray(self, dtype, descriptor, atype, *values): @@ -169,7 +169,7 @@ class DataTest(Test): self.put(putter, v) self.data.exit() self.data.rewind() - assert next(self.data) == Data.ARRAY + assert self.data.next() == Data.ARRAY count, described, type = self.data.get_array() assert count == len(values), count if dtype is None: @@ -179,17 +179,17 @@ class DataTest(Test): assert type == aTYPE, type assert self.data.enter() if described: - assert next(self.data) == dTYPE + assert self.data.next() == dTYPE getter = getattr(self.data, "get_%s" % dtype) gotten = getter() assert gotten == descriptor, gotten if values: getter = getattr(self.data, "get_%s" % atype) for v in values: - assert next(self.data) == aTYPE + assert self.data.next() == aTYPE gotten = getter() assert gotten == v, gotten - assert next(self.data) is None + assert self.data.next() is None assert self.data.exit() def testStringArray(self): @@ -231,7 +231,7 @@ class DataTest(Test): self.data.rewind() for v in values: - vtype = next(self.data) + vtype = self.data.next() assert vtype == ntype, vtype gotten = getter() assert eq(gotten, v), (gotten, v) @@ -246,7 +246,7 @@ class DataTest(Test): cgetter = getattr(copy, "get_%s" % dtype) for v in values: - vtype = next(copy) + vtype = copy.next() assert vtype == ntype, vtype gotten = cgetter() assert eq(gotten, v), (gotten, v) @@ -275,7 +275,8 @@ class DataTest(Test): self._test("double", 0, 1, 2, 3, 0.1, 0.2, 0.3, -1, -2, -3, -0.1, -0.2, -0.3) def testBinary(self): - self._test("binary", "this", "is", "a", "test", "of" "b\x00inary") + self._test("binary", six.b("this"), six.b("is"), six.b("a"), six.b("test"), + six.b("of" "b\x00inary")) def testSymbol(self): self._test("symbol", "this is a symbol test", "bleh", "blah") @@ -284,7 +285,7 @@ class DataTest(Test): self._test("timestamp", 0, 12345, 1000000) def testChar(self): - self._test("char", 'a', 'b', 'c', u'\u1234') + self._test("char", 'a', 'b', 'c', six.u('\u1234')) def testUUID(self): self._test("uuid", uuid4(), uuid4(), uuid4()) @@ -296,7 +297,7 @@ class DataTest(Test): self._test("decimal64", 0, 1, 2, 3, 4, 2**60) def testDecimal128(self): - self._test("decimal128", "fdsaasdf;lkjjkl;", "x"*16 ) + self._test("decimal128", six.b("fdsaasdf;lkjjkl;"), six.b("x"*16)) def testCopy(self): self.data.put_described() @@ -337,33 +338,33 @@ class DataTest(Test): obj = {symbol("key"): timestamp(1234), ulong(123): "blah", char("c"): "bleh", - u"desc": Described(symbol("url"), u"http://example.org"), - u"array": Array(UNDESCRIBED, Data.INT, 1, 2, 3), - u"list": [1, 2, 3, None, 4], - u"boolean": True} + six.u("desc"): Described(symbol("url"), six.u("http://example.org")), + six.u("array"): Array(UNDESCRIBED, Data.INT, 1, 2, 3), + six.u("list"): [1, 2, 3, None, 4], + six.u("boolean"): True} self.data.put_object(obj) enc = self.data.encode() data = Data() data.decode(enc) data.rewind() - assert next(data) + assert data.next() copy = data.get_object() assert copy == obj, (copy, obj) def testLookup(self): - obj = {symbol("key"): u"value", + obj = {symbol("key"): six.u("value"), symbol("pi"): 3.14159, symbol("list"): [1, 2, 3, 4]} self.data.put_object(obj) self.data.rewind() - next(self.data) + self.data.next() self.data.enter() self.data.narrow() assert self.data.lookup("pi") assert self.data.get_object() == 3.14159 self.data.rewind() assert self.data.lookup("key") - assert self.data.get_object() == u"value" + assert self.data.get_object() == six.u("value") self.data.rewind() assert self.data.lookup("list") assert self.data.get_object() == [1, 2, 3, 4] http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/99299d3b/tests/python/proton_tests/common.py ---------------------------------------------------------------------- diff --git a/tests/python/proton_tests/common.py b/tests/python/proton_tests/common.py index 585ea02..be9c75a 100644 --- a/tests/python/proton_tests/common.py +++ b/tests/python/proton_tests/common.py @@ -88,9 +88,9 @@ def pump_uni(src, dst, buffer_size=1024): elif p == 0 or c == 0: return False else: - bytes = src.peek(min(c, buffer_size)) - dst.push(bytes) - src.pop(len(bytes)) + binary = src.peek(min(c, buffer_size)) + dst.push(binary) + src.pop(len(binary)) return True @@ -244,7 +244,8 @@ class MessengerApp(object): del cmd[0:1] cmd.insert(0, foundfile) cmd.insert(0, sys.executable) - self._process = Popen(cmd, stdout=PIPE, stderr=STDOUT, bufsize=4096) + self._process = Popen(cmd, stdout=PIPE, stderr=STDOUT, + bufsize=4096, universal_newlines=True) except OSError: e = sys.exc_info()[1] print("ERROR: '%s'" % e) http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/99299d3b/tests/python/proton_tests/engine.py ---------------------------------------------------------------------- diff --git a/tests/python/proton_tests/engine.py b/tests/python/proton_tests/engine.py index 7835792..4670562 100644 --- a/tests/python/proton_tests/engine.py +++ b/tests/python/proton_tests/engine.py @@ -21,6 +21,7 @@ from __future__ import absolute_import import os, gc from . import common from time import time, sleep +import six from proton import * from .common import pump from proton.reactor import Reactor @@ -36,6 +37,19 @@ if not hasattr(gc, "garbage"): # + resuming # - locally and remotely created deliveries with the same tag +# Jython 2.5 needs this: +try: + bytes() +except: + bytes = str + +# and this... +try: + bytearray() +except: + def bytearray(x): + return six.b('\x00') * x + OUTPUT_SIZE = 10*1024 class Test(common.Test): @@ -725,7 +739,7 @@ class TransferTest(Test): assert tag == "tag", tag assert d.writable - n = self.snd.send("this is a test") + n = self.snd.send(six.b("this is a test")) assert self.snd.advance() assert self.c1.work_head is None @@ -738,7 +752,7 @@ class TransferTest(Test): def test_multiframe(self): self.rcv.flow(1) self.snd.delivery("tag") - msg = "this is a test" + msg = six.b("this is a test") n = self.snd.send(msg) assert n == len(msg) @@ -749,24 +763,24 @@ class TransferTest(Test): assert d.tag == "tag", repr(d.tag) assert d.readable - bytes = self.rcv.recv(1024) - assert bytes == msg, (bytes, msg) + binary = self.rcv.recv(1024) + assert binary == msg, (binary, msg) - bytes = self.rcv.recv(1024) - assert bytes == "" + binary = self.rcv.recv(1024) + assert binary == six.b("") - msg = "this is more" + msg = six.b("this is more") n = self.snd.send(msg) assert n == len(msg) assert self.snd.advance() self.pump() - bytes = self.rcv.recv(1024) - assert bytes == msg, (bytes, msg) + binary = self.rcv.recv(1024) + assert binary == msg, (binary, msg) - bytes = self.rcv.recv(1024) - assert bytes is None + binary = self.rcv.recv(1024) + assert binary is None def test_disposition(self): self.rcv.flow(1) @@ -774,7 +788,7 @@ class TransferTest(Test): self.pump() sd = self.snd.delivery("tag") - msg = "this is a test" + msg = six.b("this is a test") n = self.snd.send(msg) assert n == len(msg) assert self.snd.advance() @@ -809,7 +823,7 @@ class TransferTest(Test): #fill up delivery buffer on sender for m in range(1024): sd = self.snd.delivery("tag%s" % m) - msg = "message %s" % m + msg = ("message %s" % m).encode('ascii') n = self.snd.send(msg) assert n == len(msg) assert self.snd.advance() @@ -822,7 +836,7 @@ class TransferTest(Test): assert rd is not None, m assert rd.tag == ("tag%s" % m), (rd.tag, m) msg = self.rcv.recv(1024) - assert msg == ("message %s" % m), (msg, m) + assert msg == ("message %s" % m).encode('ascii'), (msg, m) rd.update(Delivery.ACCEPTED) rd.settle() @@ -831,7 +845,7 @@ class TransferTest(Test): #add some new deliveries for m in range(1024, 1450): sd = self.snd.delivery("tag%s" % m) - msg = "message %s" % m + msg = ("message %s" % m).encode('ascii') n = self.snd.send(msg) assert n == len(msg) assert self.snd.advance() @@ -848,7 +862,7 @@ class TransferTest(Test): #submit some more deliveries for m in range(1450, 1500): sd = self.snd.delivery("tag%s" % m) - msg = "message %s" % m + msg = ("message %s" % m).encode('ascii') n = self.snd.send(msg) assert n == len(msg) assert self.snd.advance() @@ -863,7 +877,7 @@ class TransferTest(Test): assert rd is not None, m assert rd.tag == ("tag%s" % m), (rd.tag, m) msg = self.rcv.recv(1024) - assert msg == ("message %s" % m), (msg, m) + assert msg == ("message %s" % m).encode('ascii'), (msg, m) rd.update(Delivery.ACCEPTED) rd.settle() @@ -873,7 +887,7 @@ class TransferTest(Test): for x in range(10): self.snd.delivery("tag%d" % x) - msg = "this is a test" + msg = six.b("this is a test") n = self.snd.send(msg) assert n == len(msg) assert self.snd.advance() @@ -915,7 +929,7 @@ class MaxFrameTransferTest(Test): parts = [] for i in range(size): parts.append(str(i)) - return "/".join(parts)[:size] + return "/".join(parts)[:size].encode("utf-8") def testMinFrame(self): """ @@ -940,11 +954,11 @@ class MaxFrameTransferTest(Test): self.pump() - bytes = self.rcv.recv(513) - assert bytes == msg + binary = self.rcv.recv(513) + assert binary == msg - bytes = self.rcv.recv(1024) - assert bytes == None + binary = self.rcv.recv(1024) + assert binary == None def testOddFrame(self): """ @@ -962,18 +976,18 @@ class MaxFrameTransferTest(Test): self.rcv.flow(2) self.snd.delivery("tag") - msg = "X" * 1699 + msg = ("X" * 1699).encode('utf-8') n = self.snd.send(msg) assert n == len(msg) assert self.snd.advance() self.pump() - bytes = self.rcv.recv(1699) - assert bytes == msg + binary = self.rcv.recv(1699) + assert binary == msg - bytes = self.rcv.recv(1024) - assert bytes == None + binary = self.rcv.recv(1024) + assert binary == None self.rcv.advance() @@ -985,13 +999,13 @@ class MaxFrameTransferTest(Test): self.pump() - bytes = self.rcv.recv(1426) - assert bytes == msg + binary = self.rcv.recv(1426) + assert binary == msg self.pump() - bytes = self.rcv.recv(1024) - assert bytes == None + binary = self.rcv.recv(1024) + assert binary == None def testBigMessage(self): """ @@ -1013,11 +1027,11 @@ class MaxFrameTransferTest(Test): self.pump() - bytes = self.rcv.recv(1024*256) - assert bytes == msg + binary = self.rcv.recv(1024*256) + assert binary == msg - bytes = self.rcv.recv(1024) - assert bytes == None + binary = self.rcv.recv(1024) + assert binary == None class IdleTimeoutTest(Test): @@ -1389,7 +1403,7 @@ class CreditTest(Test): sd = self.snd.delivery("tagA") assert sd - n = self.snd.send("A") + n = self.snd.send(six.b("A")) assert n == 1 self.pump() self.snd.advance() @@ -1405,8 +1419,8 @@ class CreditTest(Test): assert self.snd.credit == 9, self.snd.credit assert self.rcv.credit == 10, self.rcv.credit - bytes = self.rcv.recv(10) - assert bytes == "A", bytes + data = self.rcv.recv(10) + assert data == six.b("A"), data self.rcv.advance() self.pump() assert self.snd.credit == 9, self.snd.credit @@ -1427,7 +1441,7 @@ class CreditTest(Test): sd = self.snd.delivery("tagB") assert sd - n = self.snd.send("B") + n = self.snd.send(six.b("B")) assert n == 1 self.snd.advance() self.pump() @@ -1441,7 +1455,7 @@ class CreditTest(Test): sd = self.snd.delivery("tagC") assert sd - n = self.snd.send("C") + n = self.snd.send(six.b("C")) assert n == 1 self.snd.advance() self.pump() @@ -1455,11 +1469,11 @@ class CreditTest(Test): assert self.snd.credit == 0, self.snd.credit assert self.rcv.credit == 2, self.rcv.credit - bytes = self.rcv.recv(10) - assert bytes == "B", bytes + data = self.rcv.recv(10) + assert data == six.b("B"), data self.rcv.advance() - bytes = self.rcv.recv(10) - assert bytes == "C", bytes + data = self.rcv.recv(10) + assert data == six.b("C"), data self.rcv.advance() self.pump() assert self.snd.credit == 0, self.snd.credit @@ -1512,10 +1526,10 @@ class CreditTest(Test): for i in range(10): tag = "test %d" % i self.snd.delivery( tag ) - self.snd.send( tag ) + self.snd.send( tag.encode("ascii") ) assert self.snd.advance() self.snd2.delivery( tag ) - self.snd2.send( tag ) + self.snd2.send( tag.encode("ascii") ) assert self.snd2.advance() self.pump() @@ -1554,11 +1568,12 @@ class SessionCreditTest(Test): assert snd.queued == 0, snd.queued assert rcv.queued == 0, rcv.queued + data = bytes(bytearray(size)) idx = 0 while snd.credit: d = snd.delivery("tag%s" % idx) assert d - n = snd.send(chr(ord("a") + idx)*size) + n = snd.send(data) assert n == size, (n, size) assert snd.advance() self.pump() @@ -1632,7 +1647,7 @@ class SessionCreditTest(Test): idx = 0 while snd.credit: d = snd.delivery("tag%s" % idx) - snd.send("x"*1024) + snd.send(("x"*1024).encode('ascii')) assert d assert snd.advance() self.pump() @@ -1735,7 +1750,7 @@ class SettlementTest(Test): for i in range(count): sd = self.snd.delivery("tag%s" % i) assert sd - n = self.snd.send("x"*size) + n = self.snd.send(("x"*size).encode('ascii')) assert n == size, n assert self.snd.advance() self.pump() @@ -1793,7 +1808,7 @@ class PipelineTest(Test): for i in range(10): d = snd.delivery("delivery-%s" % i) - snd.send("delivery-%s" % i) + snd.send(six.b("delivery-%s" % i)) d.settle() snd.close() @@ -2225,7 +2240,7 @@ class EventTest(CollectorTest): self.expect(Event.CONNECTION_INIT, Event.SESSION_INIT, Event.LINK_INIT, Event.LINK_LOCAL_OPEN, Event.TRANSPORT) snd.delivery("delivery") - snd.send("Hello World!") + snd.send(six.b("Hello World!")) snd.advance() self.pump() self.expect() @@ -2241,7 +2256,7 @@ class EventTest(CollectorTest): snd, rcv = self.testFlowEvents() snd.open() dlv = snd.delivery("delivery") - snd.send("Hello World!") + snd.send(six.b("Hello World!")) assert snd.advance() self.expect(Event.LINK_LOCAL_OPEN, Event.TRANSPORT) self.pump() @@ -2252,7 +2267,7 @@ class EventTest(CollectorTest): rdlv.update(Delivery.ACCEPTED) self.pump() event = self.expect(Event.DELIVERY) - assert event.context == dlv + assert event.context == dlv, (dlv, event.context) def testConnectionBOUND_UNBOUND(self): c = Connection() @@ -2272,7 +2287,7 @@ class EventTest(CollectorTest): t.bind(c) self.expect(Event.CONNECTION_BOUND) assert t.condition is None - t.push("asdf") + t.push(six.b("asdf")) self.expect(Event.TRANSPORT_ERROR, Event.TRANSPORT_TAIL_CLOSED) assert t.condition is not None assert t.condition.name == "amqp:connection:framing-error" http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/99299d3b/tests/python/proton_tests/interop.py ---------------------------------------------------------------------- diff --git a/tests/python/proton_tests/interop.py b/tests/python/proton_tests/interop.py index 1ef92dd..5cbab99 100644 --- a/tests/python/proton_tests/interop.py +++ b/tests/python/proton_tests/interop.py @@ -19,6 +19,7 @@ from proton import * import os +import six from . import common @@ -71,7 +72,7 @@ class InteropTest(common.Test): self.decode_data(body) def assert_next(self, type, value): - next_type = next(self.data) + next_type = self.data.next() assert next_type == type, "Type mismatch: %s != %s"%( Data.type_names[next_type], Data.type_names[type]) next_value = self.data.get_object() @@ -80,7 +81,7 @@ class InteropTest(common.Test): def test_message(self): self.decode_message_file("message") self.assert_next(Data.STRING, "hello") - assert next(self.data) is None + assert self.data.next() is None def test_primitives(self): self.decode_data_file("primitives") @@ -95,30 +96,30 @@ class InteropTest(common.Test): self.assert_next(Data.LONG, -12345) self.assert_next(Data.FLOAT, 0.125) self.assert_next(Data.DOUBLE, 0.125) - assert next(self.data) is None + assert self.data.next() is None def test_strings(self): self.decode_data_file("strings") - self.assert_next(Data.BINARY, "abc\0defg") + self.assert_next(Data.BINARY, six.b("abc\0defg")) self.assert_next(Data.STRING, "abcdefg") self.assert_next(Data.SYMBOL, "abcdefg") - self.assert_next(Data.BINARY, "") + self.assert_next(Data.BINARY, six.b("")) self.assert_next(Data.STRING, "") self.assert_next(Data.SYMBOL, "") - assert next(self.data) is None + assert self.data.next() is None def test_described(self): self.decode_data_file("described") self.assert_next(Data.DESCRIBED, Described("foo-descriptor", "foo-value")) self.data.exit() - assert next(self.data) == Data.DESCRIBED + assert self.data.next() == Data.DESCRIBED self.data.enter() self.assert_next(Data.INT, 12) self.assert_next(Data.INT, 13) self.data.exit() - assert next(self.data) is None + assert self.data.next() is None def test_described_array(self): self.decode_data_file("described_array") @@ -129,17 +130,17 @@ class InteropTest(common.Test): self.assert_next(Data.ARRAY, Array(UNDESCRIBED, Data.INT, *range(0,100))) self.assert_next(Data.ARRAY, Array(UNDESCRIBED, Data.STRING, *["a", "b", "c"])) self.assert_next(Data.ARRAY, Array(UNDESCRIBED, Data.INT)) - assert next(self.data) is None + assert self.data.next() is None def test_lists(self): self.decode_data_file("lists") self.assert_next(Data.LIST, [32, "foo", True]) self.assert_next(Data.LIST, []) - assert next(self.data) is None + assert self.data.next() is None def test_maps(self): self.decode_data_file("maps") self.assert_next(Data.MAP, {"one":1, "two":2, "three":3 }) self.assert_next(Data.MAP, {1:"one", 2:"two", 3:"three"}) self.assert_next(Data.MAP, {}) - assert next(self.data) is None + assert self.data.next() is None http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/99299d3b/tests/python/proton_tests/message.py ---------------------------------------------------------------------- diff --git a/tests/python/proton_tests/message.py b/tests/python/proton_tests/message.py index 3366366..10d2326 100644 --- a/tests/python/proton_tests/message.py +++ b/tests/python/proton_tests/message.py @@ -18,6 +18,7 @@ # import os +import six from . import common from proton import * try: @@ -38,7 +39,7 @@ class AccessorsTest(Test): def _test(self, name, default, values): d = getattr(self.msg, name) - assert d == default, d + assert d == default, (d, default) for v in values: setattr(self.msg, name, v) gotten = getattr(self.msg, name) @@ -72,7 +73,8 @@ class AccessorsTest(Test): self._test("delivery_count", 0, range(0, 1024)) def testUserId(self): - self._test("user_id", "", ("asdf", "fdsa", "asd\x00fdsa", "")) + self._test("user_id", six.b(""), (six.b("asdf"), six.b("fdsa"), + six.b("asd\x00fdsa"), six.b(""))) def testAddress(self): self._test_str("address") http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/99299d3b/tests/python/proton_tests/messenger.py ---------------------------------------------------------------------- diff --git a/tests/python/proton_tests/messenger.py b/tests/python/proton_tests/messenger.py index 03a1b6b..30d0ec5 100644 --- a/tests/python/proton_tests/messenger.py +++ b/tests/python/proton_tests/messenger.py @@ -19,6 +19,7 @@ from __future__ import absolute_import # import os, sys, traceback +from six.moves import range as xrange from . import common from proton import * from threading import Thread, Event http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/99299d3b/tests/python/proton_tests/sasl.py ---------------------------------------------------------------------- diff --git a/tests/python/proton_tests/sasl.py b/tests/python/proton_tests/sasl.py index 4d569bc..2734364 100644 --- a/tests/python/proton_tests/sasl.py +++ b/tests/python/proton_tests/sasl.py @@ -19,6 +19,7 @@ from __future__ import absolute_import # import sys, os +import six from . import common from proton import * from .common import pump, Skipped @@ -121,7 +122,7 @@ class SaslTest(Test): c1.open() # get all t1's output in one buffer then pass it all to t2 - out1_sasl_and_amqp = "" + out1_sasl_and_amqp = six.b("") t1_still_producing = True while t1_still_producing: out1 = self.t1.peek(1024) @@ -171,17 +172,17 @@ class SaslTest(Test): out = self.t1.peek(1024) self.t1.pop(len(out)) - self.t1.push("AMQP\x03\x01\x00\x00") + self.t1.push(six.b("AMQP\x03\x01\x00\x00")) out = self.t1.peek(1024) self.t1.pop(len(out)) - self.t1.push("\x00\x00\x00") + self.t1.push(six.b("\x00\x00\x00")) out = self.t1.peek(1024) self.t1.pop(len(out)) - self.t1.push("6\x02\x01\x00\x00\x00S@\xc04\x01\xe01\x04\xa3\x05PLAIN\x0aDIGEST-MD5\x09ANONYMOUS\x08CRAM-MD5") + self.t1.push(six.b("6\x02\x01\x00\x00\x00S@\xc04\x01\xe01\x04\xa3\x05PLAIN\x0aDIGEST-MD5\x09ANONYMOUS\x08CRAM-MD5")) out = self.t1.peek(1024) self.t1.pop(len(out)) - self.t1.push("\x00\x00\x00\x10\x02\x01\x00\x00\x00SD\xc0\x03\x01P\x00") + self.t1.push(six.b("\x00\x00\x00\x10\x02\x01\x00\x00\x00SD\xc0\x03\x01P\x00")) out = self.t1.peek(1024) self.t1.pop(len(out)) while out: http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/99299d3b/tests/python/proton_tests/transport.py ---------------------------------------------------------------------- diff --git a/tests/python/proton_tests/transport.py b/tests/python/proton_tests/transport.py index e158a5b..0b22f4e 100644 --- a/tests/python/proton_tests/transport.py +++ b/tests/python/proton_tests/transport.py @@ -18,6 +18,7 @@ # import os +import six from . import common from proton import * @@ -44,9 +45,9 @@ class TransportTest(Test): if p < 0: return elif p > 0: - bytes = self.transport.peek(p) - self.peer.push(bytes) - self.transport.pop(len(bytes)) + data = self.transport.peek(p) + self.peer.push(data) + self.transport.pop(len(data)) else: assert False @@ -61,16 +62,16 @@ class TransportTest(Test): assert self.conn.remote_condition.name == name, self.conn.remote_condition def testEOS(self): - self.transport.push("") # should be a noop + self.transport.push(six.b("")) # should be a noop self.transport.close_tail() # should result in framing error self.assert_error(u'amqp:connection:framing-error') def testPartial(self): - self.transport.push("AMQ") # partial header + self.transport.push(six.b("AMQ")) # partial header self.transport.close_tail() # should result in framing error self.assert_error(u'amqp:connection:framing-error') - def testGarbage(self, garbage="GARBAGE_"): + def testGarbage(self, garbage=six.b("GARBAGE_")): self.transport.push(garbage) self.assert_error(u'amqp:connection:framing-error') assert self.transport.pending() < 0 @@ -78,13 +79,13 @@ class TransportTest(Test): assert self.transport.pending() < 0 def testSmallGarbage(self): - self.testGarbage("XXX") + self.testGarbage(six.b("XXX")) def testBigGarbage(self): - self.testGarbage("GARBAGE_XXX") + self.testGarbage(six.b("GARBAGE_XXX")) def testHeader(self): - self.transport.push("AMQP\x00\x01\x00\x00") + self.transport.push(six.b("AMQP\x00\x01\x00\x00")) self.transport.close_tail() self.assert_error(u'amqp:connection:framing-error') @@ -102,8 +103,8 @@ class TransportTest(Test): trn = Transport() trn.bind(conn) out = trn.peek(1024) - assert "test-container" in out, repr(out) - assert "test-hostname" in out, repr(out) + assert six.b("test-container") in out, repr(out) + assert six.b("test-hostname") in out, repr(out) self.transport.push(out) c = Connection() @@ -160,7 +161,7 @@ class TransportTest(Test): self.transport.pop(len(dat2) - len(dat1)) dat3 = self.transport.peek(1024) self.transport.pop(len(dat3)) - assert self.transport.peek(1024) == "" + assert self.transport.peek(1024) == six.b("") self.peer.push(dat1) self.peer.push(dat2[len(dat1):]) http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/99299d3b/tests/python/proton_tests/utils.py ---------------------------------------------------------------------- diff --git a/tests/python/proton_tests/utils.py b/tests/python/proton_tests/utils.py index 727b586..86eb6f3 100644 --- a/tests/python/proton_tests/utils.py +++ b/tests/python/proton_tests/utils.py @@ -18,6 +18,7 @@ # import os, time +from six.moves import range as xrange from threading import Thread, Event from unittest import TestCase from proton_tests.common import Test, free_tcp_port http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/99299d3b/tests/tools/apps/python/msgr-recv.py ---------------------------------------------------------------------- diff --git a/tests/tools/apps/python/msgr-recv.py b/tests/tools/apps/python/msgr-recv.py index 079c871..757b19c 100755 --- a/tests/tools/apps/python/msgr-recv.py +++ b/tests/tools/apps/python/msgr-recv.py @@ -23,6 +23,11 @@ import sys, optparse, time import logging from proton import * +# Hi python3! +try: + long() +except: + long = int usage = """ http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/99299d3b/tests/tools/apps/python/msgr-send.py ---------------------------------------------------------------------- diff --git a/tests/tools/apps/python/msgr-send.py b/tests/tools/apps/python/msgr-send.py index a2f67c5..2e2583f 100755 --- a/tests/tools/apps/python/msgr-send.py +++ b/tests/tools/apps/python/msgr-send.py @@ -23,6 +23,11 @@ import sys, optparse, time import logging from proton import * +# Hi python3! +try: + long() +except: + long = int usage = """ http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/99299d3b/tests/tools/soak-check ---------------------------------------------------------------------- diff --git a/tests/tools/soak-check b/tests/tools/soak-check index 36d7984..bf5b147 100755 --- a/tests/tools/soak-check +++ b/tests/tools/soak-check @@ -17,13 +17,14 @@ # specific language governing permissions and limitations # under the License. # +from __future__ import print_function import sys, optparse from subprocess import Popen,PIPE def run_test(cmd): try: process = Popen(cmd) - except OSError, e: + except OSError: assert False, "Unable to execute command '%s', is it in your PATH?" % cmd[0] return process.wait() @@ -121,7 +122,7 @@ def main(argv=None): command.append( "-Dverbose" ) command.append( pattern ) if verbose: - print "command='%s'" % str(command) + print("command='%s'" % str(command)) run_test(command) return 0 --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
