instead of guessing.
Signed-off-by: YAMAMOTO Takashi <[email protected]>
---
ryu/tests/unit/ofproto/test_parser.py | 81 +++++++++++++++++++++++++++++++----
1 file changed, 72 insertions(+), 9 deletions(-)
diff --git a/ryu/tests/unit/ofproto/test_parser.py
b/ryu/tests/unit/ofproto/test_parser.py
index 08329c7..d1746e5 100644
--- a/ryu/tests/unit/ofproto/test_parser.py
+++ b/ryu/tests/unit/ofproto/test_parser.py
@@ -30,6 +30,71 @@ from ryu.ofproto import ofproto_v1_3_parser
import json
+# (has_parser, has_serializer)
+implemented = {
+ 1: {
+ ofproto_v1_0.OFPT_PACKET_OUT: (False, True),
+ ofproto_v1_0.OFPT_FEATURES_REQUEST: (False, True),
+ ofproto_v1_0.OFPT_FEATURES_REPLY: (True, False),
+ ofproto_v1_0.OFPT_PACKET_IN: (True, False),
+ ofproto_v1_0.OFPT_FLOW_MOD: (False, True),
+ },
+ 3: {
+ ofproto_v1_2.OFPT_ERROR: (True, False), # OFPET_EXPERIMENTER lacks
+ # serializer
+ ofproto_v1_2.OFPT_EXPERIMENTER: (True, False),
+ ofproto_v1_2.OFPT_FEATURES_REQUEST: (False, True),
+ ofproto_v1_2.OFPT_FEATURES_REPLY: (True, False),
+ ofproto_v1_2.OFPT_GET_CONFIG_REQUEST: (False, True),
+ ofproto_v1_2.OFPT_GET_CONFIG_REPLY: (True, False),
+ ofproto_v1_2.OFPT_SET_CONFIG: (False, True),
+ ofproto_v1_2.OFPT_PACKET_IN: (True, False),
+ ofproto_v1_2.OFPT_FLOW_REMOVED: (True, False),
+ ofproto_v1_2.OFPT_PORT_STATUS: (True, False),
+ ofproto_v1_2.OFPT_PACKET_OUT: (False, True),
+ ofproto_v1_2.OFPT_FLOW_MOD: (False, True),
+ ofproto_v1_2.OFPT_GROUP_MOD: (False, True),
+ ofproto_v1_2.OFPT_PORT_MOD: (False, True),
+ ofproto_v1_2.OFPT_TABLE_MOD: (False, True),
+ ofproto_v1_2.OFPT_STATS_REQUEST: (False, True),
+ ofproto_v1_2.OFPT_STATS_REPLY: (True, False),
+ ofproto_v1_2.OFPT_BARRIER_REQUEST: (False, True),
+ ofproto_v1_2.OFPT_QUEUE_GET_CONFIG_REQUEST: (False, True),
+ ofproto_v1_2.OFPT_QUEUE_GET_CONFIG_REPLY: (True, False),
+ ofproto_v1_2.OFPT_ROLE_REQUEST: (False, True),
+ ofproto_v1_2.OFPT_ROLE_REPLY: (True, False),
+ },
+ 4: {
+ ofproto_v1_3.OFPT_HELLO: (True, False),
+ ofproto_v1_3.OFPT_EXPERIMENTER: (True, False),
+ ofproto_v1_3.OFPT_FEATURES_REQUEST: (False, True),
+ ofproto_v1_3.OFPT_FEATURES_REPLY: (True, False),
+ ofproto_v1_3.OFPT_GET_CONFIG_REQUEST: (False, True),
+ ofproto_v1_3.OFPT_GET_CONFIG_REPLY: (True, False),
+ ofproto_v1_3.OFPT_SET_CONFIG: (False, True),
+ ofproto_v1_3.OFPT_PACKET_IN: (True, False),
+ ofproto_v1_3.OFPT_FLOW_REMOVED: (True, False),
+ ofproto_v1_3.OFPT_PORT_STATUS: (True, False),
+ ofproto_v1_3.OFPT_PACKET_OUT: (False, True),
+ ofproto_v1_3.OFPT_FLOW_MOD: (False, True),
+ ofproto_v1_3.OFPT_GROUP_MOD: (False, True),
+ ofproto_v1_3.OFPT_PORT_MOD: (False, True),
+ ofproto_v1_3.OFPT_METER_MOD: (False, True),
+ ofproto_v1_3.OFPT_TABLE_MOD: (False, True),
+ ofproto_v1_3.OFPT_MULTIPART_REQUEST: (False, True),
+ ofproto_v1_3.OFPT_MULTIPART_REPLY: (True, False),
+ ofproto_v1_3.OFPT_BARRIER_REQUEST: (False, True),
+ ofproto_v1_3.OFPT_QUEUE_GET_CONFIG_REQUEST: (False, True),
+ ofproto_v1_3.OFPT_QUEUE_GET_CONFIG_REPLY: (True, False),
+ ofproto_v1_3.OFPT_ROLE_REQUEST: (False, True),
+ ofproto_v1_3.OFPT_ROLE_REPLY: (True, False),
+ ofproto_v1_3.OFPT_GET_ASYNC_REQUEST: (False, True),
+ ofproto_v1_3.OFPT_GET_ASYNC_REPLY: (True, False),
+ ofproto_v1_3.OFPT_SET_ASYNC: (False, True),
+ },
+}
+
+
# XXX dummy dp for testing
class DummyDatapath(object):
def __init__(self, ofp, ofpp):
@@ -71,23 +136,21 @@ class Test_Parser(unittest.TestCase):
def _test_msg(self, name, wire_msg, json_str):
json_dict = json.loads(json_str)
# on-wire -> OFPxxx -> json
- has_parser = False
(version, msg_type, msg_len, xid) = ofproto_parser.header(wire_msg)
try:
- dp = DummyDatapath(*self._ofp_versions[version])
+ has_parser, has_serializer = implemented[version][msg_type]
+ except KeyError:
+ has_parser = True
+ has_serializer = True
+
+ dp = DummyDatapath(*self._ofp_versions[version])
+ if has_parser:
msg = ofproto_parser.msg(dp, version, msg_type, msg_len, xid,
wire_msg)
json_dict2 = self._msg_to_jsondict(msg)
# XXXdebug code
open(('/tmp/%s.json' % name), 'wb').write(json.dumps(json_dict2))
eq_(json_dict, json_dict2)
- has_parser = True
- except TypeError:
- # not all msg_type has a proper parser
- pass
-
- # XXX either of parser or serializer should work at least
- has_serializer = not has_parser
# json -> OFPxxx -> json
msg2 = self._jsondict_to_msg(dp, json_dict)
--
1.8.1.5
------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with <2% overhead.
Download for free and get started troubleshooting in minutes.
http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel