From: Shaun Crampton <[email protected]> Unit test updates to take account of ethernet padding on small packets.
Signed-off-by: Shaun Crampton <[email protected]> --- ryu/tests/unit/packet/test_ethernet.py | 6 ++++-- ryu/tests/unit/packet/test_lldp.py | 3 ++- ryu/tests/unit/packet/test_packet.py | 37 +++++++++++++++++++------------- 3 files changed, 28 insertions(+), 18 deletions(-) diff --git a/ryu/tests/unit/packet/test_ethernet.py b/ryu/tests/unit/packet/test_ethernet.py index 6378bb6..b0362b9 100644 --- a/ryu/tests/unit/packet/test_ethernet.py +++ b/ryu/tests/unit/packet/test_ethernet.py @@ -75,15 +75,17 @@ class Test_ethernet(unittest.TestCase): def test_serialize(self): data = bytearray() prev = None - buf = self.e.serialize(data, prev) + header, suffix = self.e.serialize(data, prev) fmt = ethernet._PACK_STR - res = struct.unpack(fmt, buf) + res = struct.unpack(fmt, header) eq_(res[0], self.dst) eq_(res[1], self.src) eq_(res[2], self.ethertype) + eq_(len(header) + len(suffix), 60) + @raises(Exception) def test_malformed_ethernet(self): m_short_buf = self.buf[1:ethernet._MIN_LEN] diff --git a/ryu/tests/unit/packet/test_lldp.py b/ryu/tests/unit/packet/test_lldp.py index 23402f8..8d69ca3 100644 --- a/ryu/tests/unit/packet/test_lldp.py +++ b/ryu/tests/unit/packet/test_lldp.py @@ -116,7 +116,8 @@ class TestLLDPMandatoryTLV(unittest.TestCase): eq_(len(pkt.protocols), 2) pkt.serialize() - eq_(pkt.data, self.data) + eq_(pkt.data[:len(self.data)], self.data) + eq_(len(pkt.data), 60) class TestLLDPOptionalTLV(unittest.TestCase): diff --git a/ryu/tests/unit/packet/test_packet.py b/ryu/tests/unit/packet/test_packet.py index 2e2601a..28cf3c7 100644 --- a/ryu/tests/unit/packet/test_packet.py +++ b/ryu/tests/unit/packet/test_packet.py @@ -89,6 +89,7 @@ class TestPacket(unittest.TestCase): + self.dst_ip_bin buf = e_buf + a_buf + buf += '\0' * (60 - len(buf)) eq_(buf, p.data) # parse @@ -149,7 +150,11 @@ class TestPacket(unittest.TestCase): + self.dst_mac \ + self.dst_ip_bin - buf = e_buf + v_buf + a_buf + # ethernet padding + e_pad = '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + + buf = e_buf + v_buf + a_buf + e_pad + eq_(buf, p.data) # parse @@ -185,7 +190,7 @@ class TestPacket(unittest.TestCase): eq_(self.dst_ip, p_arp.dst_ip) def test_ipv4_udp(self): - # buid packet + # build packet e = ethernet.ethernet(self.dst_mac, self.src_mac, ether.ETH_TYPE_IP) ip = ipv4.ipv4(4, 5, 1, 0, 3, 1, 4, 64, inet.IPPROTO_UDP, 0, @@ -205,26 +210,28 @@ class TestPacket(unittest.TestCase): + '\x08\x00' # ipv4 !BBHHHBBHII - ip_buf = '\x45' \ - + '\x01' \ - + '\x00\x3C' \ - + '\x00\x03' \ - + '\x20\x04' \ - + '\x40' \ - + '\x11' \ - + '\x00\x00' \ - + self.src_ip_bin \ - + self.dst_ip_bin + ip_buf = ('\x45' + # Version + '\x01' + # DSCP/ECN + '\x00\x3C' + # Total length 0x3c = 60 + '\x00\x03' + # Identification + '\x20\x04' + # Flags/fragment offset + '\x40' + # TTL + '\x11' + # Protocol + '\xdf9' + # Checksum + self.src_ip_bin + + self.dst_ip_bin) # udp !HHHH u_buf = '\x19\x0F' \ + '\x1F\x90' \ + '\x00\x28' \ - + '\x00\x00' + + 'w\xb2' buf = e_buf + ip_buf + u_buf + self.payload + eq_(len(ip_buf) + len(u_buf) + len(self.payload), 0x3c) + eq_(bytearray(buf), p.data) - # parse + # parse the serialized packet pkt = packet.Packet(array.array('B', p.data)) protocols = self.get_protocols(pkt) p_eth = protocols['ethernet'] @@ -268,7 +275,7 @@ class TestPacket(unittest.TestCase): eq_(packet_utils.checksum(t), 0) # payload - ok_('payload' in protocols) + ok_('payload' in protocols, msg="Payload missing %s" % protocols) eq_(self.payload, protocols['payload'].tostring()) def test_ipv4_tcp(self): -- 1.7.9.5 ------------------------------------------------------------------------------ Try New Relic Now & We'll Send You this Cool Shirt New Relic is the only SaaS-based application performance monitoring service that delivers powerful full stack analytics. Optimize and monitor your browser, app, & servers with just a few lines of code. Try New Relic and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_may _______________________________________________ Ryu-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ryu-devel
