ofctl: Add some tests for ofp_instruction_from_str

Signed-off-by: IWAMOTO Toshihiro <iwamoto@valinux.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
This commit is contained in:
IWAMOTO Toshihiro 2017-05-26 17:30:22 +09:00 committed by FUJITA Tomonori
parent a52c62a120
commit 430bc97638
1 changed files with 151 additions and 0 deletions

View File

@ -0,0 +1,151 @@
# Copyright (C) 2017 Nippon Telegraph and Telephone Corporation.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import unittest
from ryu.lib import ofctl_string
from ryu.ofproto import ofproto_parser
from ryu.ofproto.ofproto_protocol import ProtocolDesc
from ryu.ofproto import ofproto_v1_5
class Test_OfctlString(unittest.TestCase):
"""Test cases for ryu.ofproto.ofp_instruction_from_str.
"""
def __init__(self, methodName):
print('init %s' % methodName)
self.fake_dp_of15 = ProtocolDesc(ofproto_v1_5.OFP_VERSION)
self.maxDiff = None
super(Test_OfctlString, self).__init__(methodName)
def _test_str(self, dp, ofctl_str, *jsondict):
json = ofctl_string.ofp_instruction_from_str(
ofproto_v1_5, ofctl_str)
inst = ofproto_parser.ofp_instruction_from_jsondict(dp, json)
self.assertEqual(len(inst), len(jsondict))
for i in range(len(inst)):
self.assertEqual(jsondict[i], inst[i].to_jsondict())
def test_drop(self):
inst = ofctl_string.ofp_instruction_from_str(
ofproto_v1_5, 'drop')
self.assertEqual(inst, [])
def test_conjunction(self):
self._test_str(self.fake_dp_of15,
'conjunction(0x234, 1/3),conjunction(0xdea, 2/2)',
{'OFPInstructionActions': {
'actions': [
{'NXActionConjunction': {'clause': 0,
'experimenter': 8992,
'id': 0x234,
'len': None,
'n_clauses': 3,
'subtype': 34,
'type': 65535}},
{'NXActionConjunction': {'clause': 1,
'experimenter': 8992,
'id': 0xdea,
'len': None,
'n_clauses': 2,
'subtype': 34,
'type': 65535}}],
'type': 4}})
def test_ct(self):
self._test_str(self.fake_dp_of15,
'ct(commit)',
{'OFPInstructionActions': {
'actions': [{'NXActionCT': {'actions': [],
'alg': 0,
'experimenter': 8992,
'flags': 1,
'len': None,
'recirc_table': 255,
'subtype': 35,
'type': 65535,
'zone_ofs_nbits': 0,
'zone_src': u''}}],
'type': 4}})
def test_ct_2(self):
self._test_str(self.fake_dp_of15,
'ct(commit,zone=NXM_NX_REG8[0..15],'
'exec(set_field:1->ct_mark))',
{'OFPInstructionActions': {
'actions': [{'NXActionCT': {
'actions': [
{'OFPActionSetField': {
'field': {'OXMTlv': {'field': 'ct_mark',
'mask': None,
'value': 1}},
'len': 8,
'type': 25}}],
'alg': 0,
'experimenter': 8992,
'flags': 1,
'len': None,
'recirc_table': 255,
'subtype': 35,
'type': 65535,
'zone_ofs_nbits': 15,
'zone_src': u'reg8'}}],
'type': 4}})
def test_resubmit(self):
self._test_str(self.fake_dp_of15,
'resubmit(,10)',
{'OFPInstructionActions':
{'actions': [{'NXActionResubmitTable': {
'experimenter': 8992,
'in_port': 65528,
'len': None,
'subtype': 14,
'table_id': 10,
'type': 65535}}],
'type': 4}})
def test_set_field(self):
self._test_str(self.fake_dp_of15,
'set_field:10/0xff->tun_id',
{'OFPInstructionActions':
{'actions': [{'OFPActionSetField': {
'field': {'OXMTlv': {'field': 'tunnel_id',
'mask': 255,
'value': 10}},
'len': 8,
'type': 25}}],
'type': 4}})
def test_pop_vlan(self):
self._test_str(self.fake_dp_of15,
'pop_vlan',
{'OFPInstructionActions':
{'actions': [{'OFPActionPopVlan': {'len': 8,
'type': 18}}],
'type': 4}})
def test_multi(self):
self._test_str(self.fake_dp_of15,
'pop_vlan,goto_table:33',
{'OFPInstructionActions':
{'actions': [{'OFPActionPopVlan': {'len': 8,
'type': 18}}],
'type': 4}},
{'OFPInstructionGotoTable':
{'len': 8,
'table_id': 33,
'type': 1}})