diff options
author | Yuichi Ito <ito.yuichi0@gmail.com> | 2013-09-27 17:48:42 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2013-09-30 16:40:45 +0900 |
commit | 116a188f74c4d2f865d90c178477faf8e88b4e63 (patch) | |
tree | db512d2dd098b239ad76de86389f029cce7cbf10 | |
parent | 349750a1fd9dd2dd9cc38d931e698e7929416433 (diff) |
packet lib: dhcp: add unittest
add the tests for __init__(), parser() and serialize() in response to using text addresses.
correct an argument for option.__init__() from string to byte.
Signed-off-by: itoyuichi <ito.yuichi0@gmail.com>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r-- | ryu/tests/unit/packet/test_dhcp.py | 113 |
1 files changed, 102 insertions, 11 deletions
diff --git a/ryu/tests/unit/packet/test_dhcp.py b/ryu/tests/unit/packet/test_dhcp.py index 768b2338..84044c40 100644 --- a/ryu/tests/unit/packet/test_dhcp.py +++ b/ryu/tests/unit/packet/test_dhcp.py @@ -17,11 +17,13 @@ import inspect import logging import socket +import struct import unittest from nose.tools import * from nose.plugins.skip import Skip, SkipTest from ryu.lib import ip from ryu.lib import mac +from ryu.lib import addrconv from ryu.lib.packet import dhcp @@ -31,7 +33,7 @@ LOG = logging.getLogger(__name__) class Test_dhcp_offer(unittest.TestCase): op = dhcp.DHCP_BOOT_REPLY - chaddr = 'AA:AA:AA:AA:AA:AA' + chaddr = 'aa:aa:aa:aa:aa:aa' htype = 1 hlen = 6 hops = 0 @@ -45,16 +47,17 @@ class Test_dhcp_offer(unittest.TestCase): sname = 'abc' boot_file = '' - option_list = [dhcp.option('35', '02'), - dhcp.option('01', 'ffffff00'), - dhcp.option('03', 'c0a80a09'), - dhcp.option('06', 'c0a80a09'), - dhcp.option('33', '0003f480'), - dhcp.option('3a', '0001fa40'), - dhcp.option('3b', '000375f0'), - dhcp.option('36', 'c0a80a09')] - magic_cookie = socket.inet_aton('99.130.83.99') - options = dhcp.options(option_list=option_list, + option_list = [ + dhcp.option(dhcp.DHCP_MESSAGE_TYPE_OPT, '\x02', 1), + dhcp.option(dhcp.DHCP_SUBNET_MASK_OPT, '\xff\xff\xff\x00', 4), + dhcp.option(dhcp.DHCP_GATEWAY_ADDR_OPT, '\xc0\xa8\x0a\x09', 4), + dhcp.option(dhcp.DHCP_DNS_SERVER_ADDR_OPT, '\xc0\xa8\x0a\x09', 4), + dhcp.option(dhcp.DHCP_IP_ADDR_LEASE_TIME_OPT, '\x00\x03\xf4\x80', 4), + dhcp.option(dhcp.DHCP_RENEWAL_TIME_OPT, '\x00\x01\xfa\x40', 4), + dhcp.option(dhcp.DHCP_REBINDING_TIME_OPT, '\x00\x03\x75\xf0', 4), + dhcp.option(dhcp.DHCP_SERVER_IDENTIFIER_OPT, '\xc0\xa8\x0a\x09', 4)] + magic_cookie = '99.130.83.99' + options = dhcp.options(option_list=option_list, options_len=50, magic_cookie=magic_cookie) dh = dhcp.dhcp(op, chaddr, options, htype=htype, hlen=hlen, @@ -62,12 +65,100 @@ class Test_dhcp_offer(unittest.TestCase): ciaddr=ciaddr, yiaddr=yiaddr, siaddr=siaddr, giaddr=giaddr, sname=sname, boot_file=boot_file) + buf = "\x02\x01\x06\x00\x00\x00\x00\x01\x00\x00\x00\x01\xc0\xa8\x0a\x0a"\ + + "\xc0\xa8\x14\x14\xc0\xa8\x1e\x1e\xc0\xa8\x28\x28\xaa\xaa\xaa\xaa"\ + + "\xaa\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\x62\x63\x00"\ + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"\ + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"\ + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"\ + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"\ + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"\ + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"\ + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"\ + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"\ + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"\ + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"\ + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"\ + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x82\x53\x63"\ + + "\x35\x01\x02\x01\x04\xff\xff\xff\x00\x03\x04\xc0\xa8\x0a\x09\x06"\ + + "\x04\xc0\xa8\x0a\x09\x33\x04\x00\x03\xf4\x80\x3a\x04\x00\x01\xfa"\ + + "\x40\x3b\x04\x00\x03\x75\xf0\x36\x04\xc0\xa8\x0a\x09\xff" + def setUp(self): pass def tearDown(self): pass + def test_init(self): + eq_(self.op, self.dh.op) + eq_(self.htype, self.dh.htype) + eq_(self.hlen, self.dh.hlen) + eq_(self.hops, self.dh.hops) + eq_(self.xid, self.dh.xid) + eq_(self.secs, self.dh.secs) + eq_(self.flags, self.dh.flags) + eq_(self.ciaddr, self.dh.ciaddr) + eq_(self.yiaddr, self.dh.yiaddr) + eq_(self.siaddr, self.dh.siaddr) + eq_(self.giaddr, self.dh.giaddr) + eq_(self.chaddr, self.dh.chaddr) + eq_(self.sname, self.dh.sname) + eq_(self.boot_file, self.dh.boot_file) + eq_(str(self.options), str(self.dh.options)) + + def test_parser(self): + _res = self.dh.parser(str(self.buf)) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + + eq_(self.op, res.op) + eq_(self.htype, res.htype) + eq_(self.hlen, res.hlen) + eq_(self.hops, res.hops) + eq_(self.xid, res.xid) + eq_(self.secs, res.secs) + eq_(self.flags, res.flags) + eq_(self.ciaddr, res.ciaddr) + eq_(self.yiaddr, res.yiaddr) + eq_(self.siaddr, res.siaddr) + eq_(self.giaddr, res.giaddr) + eq_(self.chaddr, res.chaddr) + # sname is 64 byte length. rest of data is filled by '\x00'. + eq_(self.sname.ljust(64, '\x00'), res.sname) + # boof_file is 128 byte length. rest of data is filled by '\x00'. + eq_(self.boot_file.ljust(128, '\x00'), res.boot_file) + eq_(str(self.options), str(res.options)) + + def test_serialize(self): + data = bytearray() + prev = None + buf = self.dh.serialize(data, prev) + + res = struct.unpack_from(dhcp.dhcp._DHCP_PACK_STR, str(buf)) + + eq_(self.op, res[0]) + eq_(self.htype, res[1]) + eq_(self.hlen, res[2]) + eq_(self.hops, res[3]) + eq_(self.xid, res[4]) + eq_(self.secs, res[5]) + eq_(self.flags, res[6]) + eq_(self.ciaddr, addrconv.ipv4.bin_to_text(res[7])) + eq_(self.yiaddr, addrconv.ipv4.bin_to_text(res[8])) + eq_(self.siaddr, addrconv.ipv4.bin_to_text(res[9])) + eq_(self.giaddr, addrconv.ipv4.bin_to_text(res[10])) + eq_(self.chaddr, addrconv.mac.bin_to_text(res[11][:6])) + # sname is 64 byte length. rest of data is filled by '\x00'. + eq_(self.sname.ljust(64, '\x00'), res[12]) + # boof_file is 128 byte length. rest of data is filled by '\x00'. + eq_(self.boot_file.ljust(128, '\x00'), res[13]) + options = dhcp.options.parser( + buf[struct.calcsize(dhcp.dhcp._DHCP_PACK_STR):]) + eq_(str(self.options), str(options)) + def test_to_string(self): option_values = ['tag', 'length', 'value'] opt_str_list = [] |