diff options
author | Yuichi Ito <ito.yuichi0@gmail.com> | 2013-12-12 15:35:08 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2013-12-12 18:21:59 +0900 |
commit | 1e26d5a9828c7590d42fcf5aa9b860f2e437eda4 (patch) | |
tree | 53e8e7dd9dfe0c3c4b5704ef2a6073ed7ba9eebc | |
parent | a1ebf2aecae5e77e5de3629790ed5dfd189ba01e (diff) |
packet lib: slow: fix reversibility about json
to_jsondict() JSON-izes public member variables of the object.
from_jsondict() calls the constructor using JSON members as the arguments.
LACP 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 slow
msg1 = slow.lacp()
print msg1
jsondict = msg1.to_jsondict()
msg2 = slow.lacp.from_jsondict(jsondict['lacp'])
print msg2
print str(msg1) == str(msg2)
before applying this patch:
lacp(actor_key=0,actor_length=20,actor_port=0,actor_port_priority=0,actor_state=0,actor_state_activity=0,actor_state_aggregation=0,actor_state_collecting=0,actor_state_defaulted=0,actor_state_distributing=0,actor_state_expired=0,actor_state_synchronization=0,actor_state_timeout=0,actor_system='00:00:00:00:00:00',actor_system_priority=0,actor_tag=1,collector_length=16,collector_max_delay=0,collector_tag=3,partner_key=0,partner_length=20,partner_port=0,partner_port_priority=0,partner_state=0,partner_state_activity=0,partner_state_aggregation=0,partner_state_collecting=0,partner_state_defaulted=0,partner_state_distributing=0,partner_state_expired=0,partner_state_synchronization=0,partner_state_timeout=0,partner_system='00:00:00:00:00:00',partner_system_priority=0,partner_tag=2,subtype=1,terminator_length=0,terminator_tag=0,version=1)
CLS <class 'ryu.lib.packet.slow.lacp'>
ARG {'actor_state_distributing': 0, 'actor_length': 20, 'actor_system': 'MDA6MDA6MDA6MDA6MDA6MDA=', 'collector_max_delay': 0, 'terminator_length': 0, 'collector_length': 16, 'partner_state_synchronization': 0, 'partner_state_timeout': 0, 'partner_state_distributing': 0, 'partner_state_collecting': 0, 'actor_state_synchronization': 0, 'actor_state_expired': 0, 'actor_state_defaulted': 0, 'partner_state_expired': 0, 'partner_state': 0, 'partner_system_priority': 0, 'actor_state_aggregation': 0, 'version': 1, 'partner_port': 0, 'partner_length': 20, 'collector_tag': 3, 'partner_state_defaulted': 0, 'actor_state_timeout': 0, 'actor_port_priority': 0, 'partner_state_activity': 0, 'actor_state_activity': 0, 'terminator_tag': 0, 'actor_system_priority': 0, 'actor_key': 0, 'partner_system': 'MDA6MDA6MDA6MDA6MDA6MDA=', 'partner_tag': 2, 'actor_state': 0, 'actor_port': 0, 'partner_state_aggregation': 0, 'partner_port_priority': 0, 'actor_tag': 1, 'subtype': 1, 'partner_key': 0, 'actor_state
_collecting': 0}
KWARG {'actor_state_distributing': 0, 'actor_length': 20, 'actor_system': '00:00:00:00:00:00', 'collector_max_delay': 0, 'terminator_length': 0, 'collector_length': 16, 'partner_state_synchronization': 0, 'partner_state_timeout': 0, 'partner_state_distributing': 0, 'partner_state_collecting': 0, 'actor_state_synchronization': 0, 'actor_state_expired': 0, 'actor_state_defaulted': 0, 'partner_state_expired': 0, 'partner_state': 0, 'partner_system_priority': 0, 'actor_state_aggregation': 0, 'version': 1, 'partner_port': 0, 'partner_length': 20, 'collector_tag': 3, 'partner_state_defaulted': 0, 'actor_state_timeout': 0, 'actor_port_priority': 0, 'partner_state_activity': 0, 'actor_state_activity': 0, 'terminator_tag': 0, 'actor_system_priority': 0, 'actor_key': 0, 'partner_system': '00:00:00:00:00:00', 'partner_tag': 2, 'actor_state': 0, 'actor_port': 0, 'partner_state_aggregation': 0, 'partner_port_priority': 0, 'actor_tag': 1, 'subtype': 1, 'partner_key': 0, 'actor_state_collecting'
: 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 'actor_length'
after applying this patch:
lacp(actor_key=0,actor_port=0,actor_port_priority=0,actor_state_activity=0,actor_state_aggregation=0,actor_state_collecting=0,actor_state_defaulted=0,actor_state_distributing=0,actor_state_expired=0,actor_state_synchronization=0,actor_state_timeout=0,actor_system='00:00:00:00:00:00',actor_system_priority=0,collector_max_delay=0,partner_key=0,partner_port=0,partner_port_priority=0,partner_state_activity=0,partner_state_aggregation=0,partner_state_collecting=0,partner_state_defaulted=0,partner_state_distributing=0,partner_state_expired=0,partner_state_synchronization=0,partner_state_timeout=0,partner_system='00:00:00:00:00:00',partner_system_priority=0,version=1)
lacp(actor_key=0,actor_port=0,actor_port_priority=0,actor_state_activity=0,actor_state_aggregation=0,actor_state_collecting=0,actor_state_defaulted=0,actor_state_distributing=0,actor_state_expired=0,actor_state_synchronization=0,actor_state_timeout=0,actor_system='00:00:00:00:00:00',actor_system_priority=0,collector_max_delay=0,partner_key=0,partner_port=0,partner_port_priority=0,partner_state_activity=0,partner_state_aggregation=0,partner_state_collecting=0,partner_state_defaulted=0,partner_state_distributing=0,partner_state_expired=0,partner_state_synchronization=0,partner_state_timeout=0,partner_system='00:00:00:00:00:00',partner_system_priority=0,version=1)
True
Signed-off-by: Yuichi Ito <ito.yuichi0@gmail.com>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r-- | ryu/lib/packet/slow.py | 40 | ||||
-rw-r--r-- | ryu/tests/unit/packet/test_slow.py | 65 |
2 files changed, 53 insertions, 52 deletions
diff --git a/ryu/lib/packet/slow.py b/ryu/lib/packet/slow.py index 61a91c06..71be6ae5 100644 --- a/ryu/lib/packet/slow.py +++ b/ryu/lib/packet/slow.py @@ -428,13 +428,13 @@ class lacp(packet_base.PacketBase): #------------------------------ # Header #------------------------------ - self.subtype = SLOW_SUBTYPE_LACP + self._subtype = SLOW_SUBTYPE_LACP self.version = version #------------------------------ # Actor Information #------------------------------ - self.actor_tag = self.LACP_TLV_TYPE_ACTOR - self.actor_length = self._ACTPRT_INFO_PACK_LEN + self._actor_tag = self.LACP_TLV_TYPE_ACTOR + self._actor_length = self._ACTPRT_INFO_PACK_LEN self.actor_system_priority = actor_system_priority self.actor_system = actor_system self.actor_key = actor_key @@ -448,7 +448,7 @@ class lacp(packet_base.PacketBase): self.actor_state_distributing = actor_state_distributing self.actor_state_defaulted = actor_state_defaulted self.actor_state_expired = actor_state_expired - self.actor_state = ( + self._actor_state = ( (self.actor_state_activity << 0) | (self.actor_state_timeout << 1) | (self.actor_state_aggregation << 2) | @@ -460,8 +460,8 @@ class lacp(packet_base.PacketBase): #------------------------------ # Partner Information #------------------------------ - self.partner_tag = self.LACP_TLV_TYPE_PARTNER - self.partner_length = self._ACTPRT_INFO_PACK_LEN + self._partner_tag = self.LACP_TLV_TYPE_PARTNER + self._partner_length = self._ACTPRT_INFO_PACK_LEN self.partner_system_priority = partner_system_priority self.partner_system = partner_system self.partner_key = partner_key @@ -476,7 +476,7 @@ class lacp(packet_base.PacketBase): self.partner_state_distributing = partner_state_distributing self.partner_state_defaulted = partner_state_defaulted self.partner_state_expired = partner_state_expired - self.partner_state = ( + self._partner_state = ( (self.partner_state_activity << 0) | (self.partner_state_timeout << 1) | (self.partner_state_aggregation << 2) | @@ -488,14 +488,14 @@ class lacp(packet_base.PacketBase): #------------------------------ # Collector Information #------------------------------ - self.collector_tag = self.LACP_TLV_TYPE_COLLECTOR - self.collector_length = self._COL_INFO_PACK_LEN + self._collector_tag = self.LACP_TLV_TYPE_COLLECTOR + self._collector_length = self._COL_INFO_PACK_LEN self.collector_max_delay = collector_max_delay #------------------------------ # Terminator #------------------------------ - self.terminator_tag = self.LACP_TLV_TYPE_TERMINATOR - self.terminator_length = 0 + self._terminator_tag = self.LACP_TLV_TYPE_TERMINATOR + self._terminator_length = 0 @classmethod def parser(cls, buf): @@ -578,27 +578,27 @@ class lacp(packet_base.PacketBase): collector_max_delay), None, buf[lacp._ALL_PACK_LEN:] def serialize(self, payload, prev): - header = struct.pack(self._HLEN_PACK_STR, self.subtype, + header = struct.pack(self._HLEN_PACK_STR, self._subtype, self.version) actor = struct.pack(self._ACTPRT_INFO_PACK_STR, - self.actor_tag, self.actor_length, + self._actor_tag, self._actor_length, self.actor_system_priority, addrconv.mac.text_to_bin(self.actor_system), self.actor_key, self.actor_port_priority, self.actor_port, - self.actor_state) + self._actor_state) partner = struct.pack(self._ACTPRT_INFO_PACK_STR, - self.partner_tag, self.partner_length, + self._partner_tag, self._partner_length, self.partner_system_priority, addrconv.mac.text_to_bin(self.partner_system), self.partner_key, self.partner_port_priority, - self.partner_port, self.partner_state) + self.partner_port, self._partner_state) collector = struct.pack(self._COL_INFO_PACK_STR, - self.collector_tag, - self.collector_length, + self._collector_tag, + self._collector_length, self.collector_max_delay) terminator = struct.pack(self._TRM_PACK_STR, - self.terminator_tag, - self.terminator_length) + self._terminator_tag, + self._terminator_length) return header + actor + partner + collector + terminator diff --git a/ryu/tests/unit/packet/test_slow.py b/ryu/tests/unit/packet/test_slow.py index c7cd3bd5..283fc8f5 100644 --- a/ryu/tests/unit/packet/test_slow.py +++ b/ryu/tests/unit/packet/test_slow.py @@ -300,10 +300,10 @@ class Test_lacp(unittest.TestCase): return p def test_init(self): - eq_(self.subtype, self.l.subtype) + eq_(self.subtype, self.l._subtype) eq_(self.version, self.l.version) - eq_(self.actor_tag, self.l.actor_tag) - eq_(self.actor_length, self.l.actor_length) + eq_(self.actor_tag, self.l._actor_tag) + eq_(self.actor_length, self.l._actor_length) eq_(self.actor_system_priority, self.l.actor_system_priority) eq_(self.actor_system, self.l.actor_system) eq_(self.actor_key, self.l.actor_key) @@ -321,9 +321,9 @@ class Test_lacp(unittest.TestCase): self.l.actor_state_distributing) eq_(self.actor_state_defaulted, self.l.actor_state_defaulted) eq_(self.actor_state_expired, self.l.actor_state_expired) - eq_(self.actor_state, self.l.actor_state) - eq_(self.partner_tag, self.l.partner_tag) - eq_(self.partner_length, self.l.partner_length) + eq_(self.actor_state, self.l._actor_state) + eq_(self.partner_tag, self.l._partner_tag) + eq_(self.partner_length, self.l._partner_length) eq_(self.partner_system_priority, self.l.partner_system_priority) eq_(self.partner_system, self.l.partner_system) @@ -343,12 +343,12 @@ class Test_lacp(unittest.TestCase): eq_(self.partner_state_defaulted, self.l.partner_state_defaulted) eq_(self.partner_state_expired, self.l.partner_state_expired) - eq_(self.partner_state, self.l.partner_state) - eq_(self.collector_tag, self.l.collector_tag) - eq_(self.collector_length, self.l.collector_length) + eq_(self.partner_state, self.l._partner_state) + eq_(self.collector_tag, self.l._collector_tag) + eq_(self.collector_length, self.l._collector_length) eq_(self.collector_max_delay, self.l.collector_max_delay) - eq_(self.terminator_tag, self.l.terminator_tag) - eq_(self.terminator_length, self.l.terminator_length) + eq_(self.terminator_tag, self.l._terminator_tag) + eq_(self.terminator_length, self.l._terminator_length) def test_parser(self): _res = self.l.parser(self.buf) @@ -357,10 +357,10 @@ class Test_lacp(unittest.TestCase): else: res = _res - eq_(res.subtype, self.subtype) + eq_(res._subtype, self.subtype) eq_(res.version, self.version) - eq_(res.actor_tag, self.actor_tag) - eq_(res.actor_length, self.actor_length) + eq_(res._actor_tag, self.actor_tag) + eq_(res._actor_length, self.actor_length) eq_(res.actor_system_priority, self.actor_system_priority) eq_(res.actor_system, self.actor_system) eq_(res.actor_key, self.actor_key) @@ -375,9 +375,9 @@ class Test_lacp(unittest.TestCase): eq_(res.actor_state_distributing, self.actor_state_distributing) eq_(res.actor_state_defaulted, self.actor_state_defaulted) eq_(res.actor_state_expired, self.actor_state_expired) - eq_(res.actor_state, self.actor_state) - eq_(res.partner_tag, self.partner_tag) - eq_(res.partner_length, self.partner_length) + eq_(res._actor_state, self.actor_state) + eq_(res._partner_tag, self.partner_tag) + eq_(res._partner_length, self.partner_length) eq_(res.partner_system_priority, self.partner_system_priority) eq_(res.partner_system, self.partner_system) eq_(res.partner_key, self.partner_key) @@ -394,12 +394,12 @@ class Test_lacp(unittest.TestCase): self.partner_state_distributing) eq_(res.partner_state_defaulted, self.partner_state_defaulted) eq_(res.partner_state_expired, self.partner_state_expired) - eq_(res.partner_state, self.partner_state) - eq_(res.collector_tag, self.collector_tag) - eq_(res.collector_length, self.collector_length) + eq_(res._partner_state, self.partner_state) + eq_(res._collector_tag, self.collector_tag) + eq_(res._collector_length, self.collector_length) eq_(res.collector_max_delay, self.collector_max_delay) - eq_(res.terminator_tag, self.terminator_tag) - eq_(res.terminator_length, self.terminator_length) + eq_(res._terminator_tag, self.terminator_tag) + eq_(res._terminator_length, self.terminator_length) def test_serialize(self): data = bytearray() @@ -466,10 +466,10 @@ class Test_lacp(unittest.TestCase): l = self.find_protocol(p, "lacp") ok_(l) - eq_(l.subtype, self.subtype) + eq_(l._subtype, self.subtype) eq_(l.version, self.version) - eq_(l.actor_tag, self.actor_tag) - eq_(l.actor_length, self.actor_length) + eq_(l._actor_tag, self.actor_tag) + eq_(l._actor_length, self.actor_length) eq_(l.actor_system_priority, self.actor_system_priority) eq_(l.actor_system, self.actor_system) eq_(l.actor_key, self.actor_key) @@ -484,9 +484,9 @@ class Test_lacp(unittest.TestCase): eq_(l.actor_state_distributing, self.actor_state_distributing) eq_(l.actor_state_defaulted, self.actor_state_defaulted) eq_(l.actor_state_expired, self.actor_state_expired) - eq_(l.actor_state, self.actor_state) - eq_(l.partner_tag, self.partner_tag) - eq_(l.partner_length, self.partner_length) + eq_(l._actor_state, self.actor_state) + eq_(l._partner_tag, self.partner_tag) + eq_(l._partner_length, self.partner_length) eq_(l.partner_system_priority, self.partner_system_priority) eq_(l.partner_system, self.partner_system) eq_(l.partner_key, self.partner_key) @@ -502,11 +502,12 @@ class Test_lacp(unittest.TestCase): self.partner_state_distributing) eq_(l.partner_state_defaulted, self.partner_state_defaulted) eq_(l.partner_state_expired, self.partner_state_expired) - eq_(l.collector_tag, self.collector_tag) - eq_(l.collector_length, self.collector_length) + eq_(l._partner_state, self.partner_state) + eq_(l._collector_tag, self.collector_tag) + eq_(l._collector_length, self.collector_length) eq_(l.collector_max_delay, self.collector_max_delay) - eq_(l.terminator_tag, self.terminator_tag) - eq_(l.terminator_length, self.terminator_length) + eq_(l._terminator_tag, self.terminator_tag) + eq_(l._terminator_length, self.terminator_length) @raises(Exception) def test_malformed_lacp(self): |