diff options
author | Yusuke Iwase <iwase.yusuke0@gmail.com> | 2015-09-09 10:17:45 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2015-09-10 11:14:58 +0900 |
commit | 23b2fc4b41a755ab1f9b7918c5d45f24291183d4 (patch) | |
tree | 2628ba3553b468f8673ed84ba03ec6727d0d6139 | |
parent | 27befc18faf98463604e4b42442431da0a29ea55 (diff) |
utils: Add binary_str() method to print binary data
Because repr() is not enough to escape ascii code or control code,
MsgBase.__str__() may collapse representation with binary data.
This patch add binary_str() in order to convert binary data into a
sequence of '\x00' style string.
Signed-off-by: IWASE Yusuke <iwase.yusuke0@gmail.com>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r-- | ryu/tests/unit/test_utils.py | 27 | ||||
-rw-r--r-- | ryu/utils.py | 8 |
2 files changed, 35 insertions, 0 deletions
diff --git a/ryu/tests/unit/test_utils.py b/ryu/tests/unit/test_utils.py index 303e2918..165f8acc 100644 --- a/ryu/tests/unit/test_utils.py +++ b/ryu/tests/unit/test_utils.py @@ -15,6 +15,7 @@ import unittest import logging +import six from nose.tools import eq_ from ryu import utils @@ -55,3 +56,29 @@ class Test_utils(unittest.TestCase): expected_result = '0x01 0x02 0x03 0x04' data = bytes(b'\x01\x02\x03\x04') eq_(expected_result, utils.hex_array(data)) + + def test_binary_str_string(self): + """ + Test binary_str() with str type. + """ + expected_result = '\\x01\\x02\\x03\\x04' + data = b'\x01\x02\x03\x04' + eq_(expected_result, utils.binary_str(data)) + + def test_binary_str_bytearray(self): + """ + Test binary_str() with bytearray type. + """ + expected_result = '\\x01\\x02\\x03\\x04' + data = bytearray(b'\x01\x02\x03\x04') + eq_(expected_result, utils.binary_str(data)) + + def test_binary_str_bytes(self): + """ + Test binary_str() with bytes type. (Python3 only) + """ + if six.PY2: + return + expected_result = '\\x01\\x02\\x03\\x04' + data = bytes(b'\x01\x02\x03\x04') + eq_(expected_result, utils.binary_str(data)) diff --git a/ryu/utils.py b/ryu/utils.py index fd8225ea..e915e0d9 100644 --- a/ryu/utils.py +++ b/ryu/utils.py @@ -106,6 +106,14 @@ def hex_array(data): return ' '.join('0x%02x' % byte for byte in bytearray(data)) +def binary_str(data): + """ + Convert six.binary_type or bytearray into str to be printed. + """ + # convert data into bytearray explicitly + return ''.join('\\x%02x' % byte for byte in bytearray(data)) + + # the following functions are taken from OpenStack # # Get requirements from the first file that exists |