This patch adds test case of NVGRE. Also, fixes unit tests for GRE to the method using packet capture. For that reason, add packet capture files.
Signed-off-by: Shinpei Muraoka <shinpei.mura...@gmail.com> --- ryu/tests/packet_data/pcap/gre_full_options.pcap | Bin 0 -> 190 bytes ryu/tests/packet_data/pcap/gre_no_option.pcap | Bin 0 -> 178 bytes ryu/tests/packet_data/pcap/gre_nvgre_option.pcap | Bin 0 -> 190 bytes ryu/tests/unit/packet/test_gre.py | 136 ++++++++++++++--------- 4 files changed, 85 insertions(+), 51 deletions(-) create mode 100644 ryu/tests/packet_data/pcap/gre_full_options.pcap create mode 100644 ryu/tests/packet_data/pcap/gre_no_option.pcap create mode 100644 ryu/tests/packet_data/pcap/gre_nvgre_option.pcap diff --git a/ryu/tests/packet_data/pcap/gre_full_options.pcap b/ryu/tests/packet_data/pcap/gre_full_options.pcap new file mode 100644 index 0000000000000000000000000000000000000000..cabf51998bae772d4fd10e693aca32fc6a6ac1e2 GIT binary patch literal 190 zcmca|c+)~A1{MYw`2U}Qff2}QG7E~B@RgHc8juabhgi)|eq=htWImmNfrG)7fuVyz zj)CF7zBS7l0ZFDc0{l!HfZ{H^Aaj^s00}OjniK|kpc+Oi<pV1in1GmtgMqo3femZ{ N1A|1>iq&T+g8-9LNhAOO literal 0 HcmV?d00001 diff --git a/ryu/tests/packet_data/pcap/gre_no_option.pcap b/ryu/tests/packet_data/pcap/gre_no_option.pcap new file mode 100644 index 0000000000000000000000000000000000000000..258126ba05bef7d7cb4f98fdc1fc26b508992066 GIT binary patch literal 178 zcmca|c+)~A1{MZ5P+(wS1aeB6T0JJPGcj}l*&uv~)%@f~rbA5T(-{~z7+e_`Y8d1g z82;;93#<{4WLhJ@&jb}uVUP!kGg>JhSi!&q#4H>P%*_mJU_%)gB&t@dK1&${09wRE AqyPW_ literal 0 HcmV?d00001 diff --git a/ryu/tests/packet_data/pcap/gre_nvgre_option.pcap b/ryu/tests/packet_data/pcap/gre_nvgre_option.pcap new file mode 100644 index 0000000000000000000000000000000000000000..fb1b29806644dbadb532451bbe3cd51f20cce44f GIT binary patch literal 190 zcmca|c+)~A1{MYw`2U}Qff2}Qx@i&m;v5^pG$0#<Ggwa<WHc~{`f_oc;b3rOVCeA4 zbzpGNKg!RQ!o>*0ObQIC5kQ40A&ZROhe!try*F}Q-N@jO0#wbz5Ct;SK`^VBk%^gw zm5rT)dk6ml2Dg}LNvVnHIjMRjrFnU&IeMvi$%zH==|!pWX*v1j@nt!QdGVPAWhU{Z TDFq4zi75sk!Vp9lfe2#&(W^8i literal 0 HcmV?d00001 diff --git a/ryu/tests/unit/packet/test_gre.py b/ryu/tests/unit/packet/test_gre.py index a2ca729..c955ec7 100644 --- a/ryu/tests/unit/packet/test_gre.py +++ b/ryu/tests/unit/packet/test_gre.py @@ -13,69 +13,103 @@ # See the License for the specific language governing permissions and # limitations under the License. +from __future__ import print_function -import unittest import logging -import struct +import os +import sys -import six -from nose.tools import eq_, raises +import unittest +from nose.tools import eq_ +from nose.tools import ok_ -from ryu.lib.packet.gre import gre -from ryu.lib.packet.ether_types import ETH_TYPE_IP +from ryu.lib import pcaplib +from ryu.lib.packet import gre +from ryu.lib.packet import packet +from ryu.utils import binary_str +from ryu.lib.packet.ether_types import ETH_TYPE_IP, ETH_TYPE_TEB LOG = logging.getLogger(__name__) +GENEVE_DATA_DIR = os.path.join( + os.path.dirname(sys.modules[__name__].__file__), + '../../packet_data/pcap/') + class Test_gre(unittest.TestCase): - """ Test case for gre + """ + Test case gre for ryu.lib.packet.gre. """ - protocol = ETH_TYPE_IP + version = 0 + gre_proto = ETH_TYPE_IP + nvgre_proto = ETH_TYPE_TEB checksum = 0x440d - key = 1000 seq_number = 10 - - buf = struct.pack("!BBHH2xII", 0xb0, 0, protocol, checksum, key, seq_number) - gre = gre(protocol, checksum, key, seq_number) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.protocol, self.gre.protocol) - eq_(self.checksum, self.gre.checksum) - eq_(self.key, self.gre.key) - eq_(self.seq_number, self.gre.seq_number) + key = 256100 + vsid = 1000 + flow_id = 100 + + gre = gre.gre(version=version, protocol=gre_proto, checksum=checksum, + key=key, seq_number=seq_number) + + def test_key_setter(self): + self.gre.key = self.key + eq_(self.gre._key, self.key) + eq_(self.gre._vsid, self.vsid) + eq_(self.gre._flow_id, self.flow_id) + + def test_key_setter_none(self): + self.gre.key = None + eq_(self.gre._key, None) + eq_(self.gre._vsid, None) + eq_(self.gre._flow_id, None) + + self.gre.key = self.key + + def test_vsid_setter(self): + self.gre.vsid = self.vsid + eq_(self.gre._key, self.key) + eq_(self.gre._vsid, self.vsid) + eq_(self.gre._flow_id, self.flow_id) + + def test_flowid_setter(self): + self.gre.flow_id = self.flow_id + eq_(self.gre._key, self.key) + eq_(self.gre._vsid, self.vsid) + eq_(self.gre._flow_id, self.flow_id) + + def test_nvgre_init(self): + nvgre = gre.nvgre(version=self.version, vsid=self.vsid, + flow_id=self.flow_id) + + eq_(nvgre.version, self.version) + eq_(nvgre.protocol, self.nvgre_proto) + eq_(nvgre.checksum, None) + eq_(nvgre.seq_number, None) + eq_(nvgre._key, self.key) + eq_(nvgre._vsid, self.vsid) + eq_(nvgre._flow_id, self.flow_id) def test_parser(self): - res, _, _ = self.gre.parser(self.buf) - - eq_(res.protocol, self.protocol) - eq_(res.checksum, self.checksum) - eq_(res.key, self.key) - eq_(res.seq_number, self.seq_number) - - def test_serialize(self): - buf = self.gre.serialize() - res = struct.unpack_from("!BBHH2xII", six.binary_type(buf)) - - eq_(res[0], 0xb0) - eq_(res[1], 0) - eq_(res[2], self.protocol) - eq_(res[3], self.checksum) - eq_(res[4], self.key) - eq_(res[5], self.seq_number) - - @raises(Exception) - def test_malformed_gre(self): - m_short_buf = self.buf[1:gre._MIN_LEN] - gre.parser(m_short_buf) - - def test_json(self): - jsondict = self.gre.to_jsondict() - g = gre.from_jsondict(jsondict['gre']) - eq_(str(self.gre), str(g)) + files = [ + 'gre_full_options', + 'gre_no_option', + 'gre_nvgre_option', + ] + + for f in files: + # print('*** testing %s ...' % f) + for _, buf in pcaplib.Reader( + open(GENEVE_DATA_DIR + f + '.pcap', 'rb')): + # Checks if message can be parsed as expected. + pkt = packet.Packet(buf) + gre_pkt = pkt.get_protocol(gre.gre) + ok_(isinstance(gre_pkt, gre.gre), + 'Failed to parse Gre message: %s' % pkt) + + # Checks if message can be serialized as expected. + pkt.serialize() + + eq_(buf, pkt.data, + "b'%s' != b'%s'" % (binary_str(buf), binary_str(pkt.data))) -- 2.7.4 ------------------------------------------------------------------------------ Developer Access Program for Intel Xeon Phi Processors Access to Intel Xeon Phi processor-based developer platforms. With one year of Intel Parallel Studio XE. Training and support from Colfax. Order your platform today.http://sdm.link/intel _______________________________________________ Ryu-devel mailing list Ryu-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ryu-devel