to_jsondict() JSON-izes public member variables of the object.
from_jsondict() calls the constructor using JSON members as the arguments.
BPDU has the public member that is not required for the constructor, so 
TypeError occurs in from_jsondict().
this patch suppresses the output of to_jsondict() by changing unnecessary 
public members into protected members.

examination code:

    from ryu.lib.packet import bpdu
    msg1 = bpdu.RstBPDUs()
    print msg1
    jsondict = msg1.to_jsondict()
    msg2 = bpdu.RstBPDUs.from_jsondict(jsondict['RstBPDUs'])
    print msg2
    print str(msg1) == str(msg2)

before applying this patch:

    
RstBPDUs(bpdu_type=2,bridge_mac_address='00:00:00:00:00:00',bridge_priority=32768,bridge_system_id_extension=0,flags=0,forward_delay=15,hello_time=2,max_age=20,message_age=0,port_number=0,port_priority=128,protocol_id=0,root_mac_address='00:00:00:00:00:00',root_path_cost=0,root_priority=32768,root_system_id_extension=0,version_1_length=0,version_id=2)
    CLS <class 'ryu.lib.packet.bpdu.RstBPDUs'>
    ARG {'max_age': 20, 'bpdu_type': 2, 'bridge_mac_address': 
'MDA6MDA6MDA6MDA6MDA6MDA=', 'hello_time': 2, 'protocol_id': 0, 
'bridge_priority': 32768, 'message_age': 0, 'version_id': 2, 'port_priority': 
128, 'flags': 0, 'root_priority': 32768, 'version_1_length': 0, 
'root_path_cost': 0, 'port_number': 0, 'root_mac_address': 
'MDA6MDA6MDA6MDA6MDA6MDA=', 'root_system_id_extension': 0, 'forward_delay': 15, 
'bridge_system_id_extension': 0}
    KWARG {'max_age': 20, 'bpdu_type': 2, 'bridge_mac_address': 
'00:00:00:00:00:00', 'hello_time': 2, 'protocol_id': 0, 'bridge_priority': 
32768, 'message_age': 0, 'version_id': 2, 'port_priority': 128, 'flags': 0, 
'root_priority': 32768, 'version_1_length': 0, 'root_path_cost': 0, 
'port_number': 0, 'root_mac_address': '00:00:00:00:00:00', 
'root_system_id_extension': 0, 'forward_delay': 15, 
'bridge_system_id_extension': 0}
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/local/lib/python2.7/dist-packages/ryu/lib/stringify.py", line 
293, in from_jsondict
        return cls(**dict(kwargs, **additional_args))
    TypeError: __init__() got an unexpected keyword argument 'bpdu_type'

after applying this patch:

    
RstBPDUs(bridge_mac_address='00:00:00:00:00:00',bridge_priority=32768,bridge_system_id_extension=0,flags=0,forward_delay=15,hello_time=2,max_age=20,message_age=0,port_number=0,port_priority=128,root_mac_address='00:00:00:00:00:00',root_path_cost=0,root_priority=32768,root_system_id_extension=0)
    
RstBPDUs(bridge_mac_address='00:00:00:00:00:00',bridge_priority=32768,bridge_system_id_extension=0,flags=0,forward_delay=15,hello_time=2,max_age=20,message_age=0,port_number=0,port_priority=128,root_mac_address='00:00:00:00:00:00',root_path_cost=0,root_priority=32768,root_system_id_extension=0)
    True

Signed-off-by: Yuichi Ito <[email protected]>
---
 ryu/lib/packet/bpdu.py               |   14 +++++++-------
 ryu/tests/unit/packet/test_packet.py |   11 ++++-------
 2 files changed, 11 insertions(+), 14 deletions(-)

diff --git a/ryu/lib/packet/bpdu.py b/ryu/lib/packet/bpdu.py
index 8756518..9834df7 100644
--- a/ryu/lib/packet/bpdu.py
+++ b/ryu/lib/packet/bpdu.py
@@ -180,9 +180,9 @@ class bpdu(packet_base.PacketBase):
         assert hasattr(self, 'VERSION_ID')
         assert hasattr(self, 'BPDU_TYPE')

-        self.protocol_id = PROTOCOL_IDENTIFIER
-        self.version_id = self.VERSION_ID
-        self.bpdu_type = self.BPDU_TYPE
+        self._protocol_id = PROTOCOL_IDENTIFIER
+        self._version_id = self.VERSION_ID
+        self._bpdu_type = self.BPDU_TYPE

         if hasattr(self, 'check_parameters'):
             self.check_parameters()
@@ -205,8 +205,8 @@ class bpdu(packet_base.PacketBase):
             return buf, None, None

     def serialize(self, payload, prev):
-        return struct.pack(bpdu._PACK_STR, self.protocol_id,
-                           self.version_id, self.bpdu_type)
+        return struct.pack(bpdu._PACK_STR, self._protocol_id,
+                           self._version_id, self._bpdu_type)


 @bpdu.register_bpdu_type
@@ -450,7 +450,7 @@ class RstBPDUs(ConfigurationBPDUs):
                  message_age=0, max_age=DEFAULT_MAX_AGE,
                  hello_time=DEFAULT_HELLO_TIME,
                  forward_delay=DEFAULT_FORWARD_DELAY):
-        self.version_1_length = VERSION_1_LENGTH
+        self._version_1_length = VERSION_1_LENGTH

         super(RstBPDUs, self).__init__(flags, root_priority,
                                        root_system_id_extension,
@@ -482,5 +482,5 @@ class RstBPDUs(ConfigurationBPDUs):

     def serialize(self, payload, prev):
         base = super(RstBPDUs, self).serialize(payload, prev)
-        sub = struct.pack(RstBPDUs._PACK_STR, self.version_1_length)
+        sub = struct.pack(RstBPDUs._PACK_STR, self._version_1_length)
         return base + sub
diff --git a/ryu/tests/unit/packet/test_packet.py 
b/ryu/tests/unit/packet/test_packet.py
index a979777..b36a67e 100644
--- a/ryu/tests/unit/packet/test_packet.py
+++ b/ryu/tests/unit/packet/test_packet.py
@@ -1441,9 +1441,9 @@ class TestPacket(unittest.TestCase):

         # bpdu
         ok_(p_bpdu)
-        eq_(bpdu.PROTOCOL_IDENTIFIER, p_bpdu.protocol_id)
-        eq_(bpdu.PROTOCOLVERSION_ID_BPDU, p_bpdu.version_id)
-        eq_(bpdu.TYPE_CONFIG_BPDU, p_bpdu.bpdu_type)
+        eq_(bpdu.PROTOCOL_IDENTIFIER, p_bpdu._protocol_id)
+        eq_(bpdu.PROTOCOLVERSION_ID_BPDU, p_bpdu._version_id)
+        eq_(bpdu.TYPE_CONFIG_BPDU, p_bpdu._bpdu_type)
         eq_(0, p_bpdu.flags)
         eq_(32768, p_bpdu.root_priority)
         eq_(0, p_bpdu.root_system_id_extension)
@@ -1484,10 +1484,7 @@ class TestPacket(unittest.TestCase):
                              if k in llc_values])
         llc_str = '%s(%s)' % (llc.llc.__name__, _llc_str)

-        bpdu_values = {'protocol_id': bpdu.PROTOCOL_IDENTIFIER,
-                       'version_id': bpdu.PROTOCOLVERSION_ID_BPDU,
-                       'bpdu_type': bpdu.TYPE_CONFIG_BPDU,
-                       'flags': 0,
+        bpdu_values = {'flags': 0,
                        'root_priority': long(32768),
                        'root_system_id_extension': long(0),
                        'root_mac_address': self.src_mac,
-- 
1.7.10.4


------------------------------------------------------------------------------
Sponsored by Intel(R) XDK 
Develop, test and display web and hybrid apps with a single code base.
Download it for free now!
http://pubads.g.doubleclick.net/gampad/clk?id=111408631&iu=/4140/ostg.clktrk
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to