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 <[email protected]>
---
 ryu/tests/unit/packet/test_dhcp.py |  113 ++++++++++++++++++++++++++++++++----
 1 file changed, 102 insertions(+), 11 deletions(-)

diff --git a/ryu/tests/unit/packet/test_dhcp.py 
b/ryu/tests/unit/packet/test_dhcp.py
index 768b233..84044c4 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 = []
-- 
1.7.10.4


------------------------------------------------------------------------------
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register >
http://pubads.g.doubleclick.net/gampad/clk?id=60133471&iu=/4140/ostg.clktrk
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to