summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYusuke Iwase <iwase.yusuke0@gmail.com>2015-09-09 10:17:45 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2015-09-10 11:14:58 +0900
commit23b2fc4b41a755ab1f9b7918c5d45f24291183d4 (patch)
tree2628ba3553b468f8673ed84ba03ec6727d0d6139
parent27befc18faf98463604e4b42442431da0a29ea55 (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.py27
-rw-r--r--ryu/utils.py8
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