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 <[email protected]>
---
 ryu/tests/unit/test_utils.py | 27 +++++++++++++++++++++++++++
 ryu/utils.py                 |  8 ++++++++
 2 files changed, 35 insertions(+)

diff --git a/ryu/tests/unit/test_utils.py b/ryu/tests/unit/test_utils.py
index 303e291..165f8ac 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 fd8225e..e915e0d 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
-- 
1.9.1



------------------------------------------------------------------------------
Monitor Your Dynamic Infrastructure at Any Scale With Datadog!
Get real-time metrics from all of your servers, apps and tools
in one place.
SourceForge users - Click here to start your Free Trial of Datadog now!
http://pubads.g.doubleclick.net/gampad/clk?id=241902991&iu=/4140
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to