Passed
Pull Request — master (#371)
by
unknown
02:17
created

TestIPv4.test_IPv4_pack()   A

Complexity

Conditions 1

Size

Total Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
dl 0
loc 9
rs 9.6666
c 1
b 1
f 0
cc 1
1
"""Test Python-openflow network types."""
2
import unittest
3
4
from pyof.foundation.basic_types import BinaryData
5
from pyof.foundation.network_types import GenericTLV, IPv4
6
7
8
class TestNetworkTypes(unittest.TestCase):
9
    """Reproduce bugs found."""
10
11
    def test_GenTLV_value_unpack(self):
12
        """Value attribute should be the same after unpacking."""
13
        value = BinaryData(b'test')
14
        tlv = GenericTLV(value=value)
15
        tlv_unpacked = GenericTLV()
16
        tlv_unpacked.unpack(tlv.pack())
17
        self.assertEqual(tlv.value.value, tlv_unpacked.value.value)
18
19
20
class TestIPv4(unittest.TestCase):
21
    """Test IPv4 packets."""
22
23
    def test_IPv4_pack(self):
24
        """Test pack/unpack of IPv4 class."""
25
        packet = IPv4(dscp=10, ttl=64, protocol=17, source="192.168.0.10",
26
                      destination="172.16.10.30", options=b'1000',
27
                      data=b'testdata')
28
        packed = packet.pack()
29
        expected = b'F(\x00 \x00\x00\x00\x00@\x11\x02'
30
        expected += b'\xc5\xc0\xa8\x00\n\xac\x10\n\x1e1000testdata'
31
        self.assertEqual(packed, expected)
32
33
    def test_IPv4_unpack(self):
34
        """Test unpack of IPv4 binary packet."""
35
        raw = b'FP\x00$\x00\x00\x00\x00\x80\x06W'
36
        raw += b'\xf4\n\x9aN\x81\xc0\xa8\xc7\xcc1000somemoredata'
37
        unpacked = IPv4()
38
        unpacked.unpack(raw)
39
        self.assertEqual(unpacked.version, 4)
40
        self.assertEqual(unpacked.ihl, 6)
41
        self.assertEqual(unpacked.dscp, 20)
42
        self.assertEqual(unpacked.ecn, 0)
43
        self.assertEqual(unpacked.length, 36)
44
        self.assertEqual(unpacked.identification, 0)
45
        self.assertEqual(unpacked.flags, 0)
46
        self.assertEqual(unpacked.offset, 0)
47
        self.assertEqual(unpacked.ttl, 128)
48
        self.assertEqual(unpacked.protocol, 6)
49
        self.assertEqual(unpacked.checksum, 22516)
50
        self.assertEqual(unpacked.source, "10.154.78.129")
51
        self.assertEqual(unpacked.destination, "192.168.199.204")
52
        self.assertEqual(unpacked.options, b'1000')
53
        self.assertEqual(unpacked.data, b'somemoredata')
54
55
    def test_IPv4_size(self):
56
        """Test Header size for IPv4 packet."""
57
        packet = IPv4()
58
        packet.pack()
59
        self.assertEqual(20, packet.get_size())
60
        self.assertEqual(20, packet.length)
61
        self.assertEqual(20, packet.ihl * 4)
62
63
    def test_IPv4_checksum(self):
64
        """Test if the IPv4 checksum is being calculated correclty."""
65
        packet = IPv4(dscp=10, ttl=64, protocol=17, source="192.168.0.10",
66
                      destination="172.16.10.30", options=b'1000',
67
                      data=b'testdata')
68
        packet.pack()
69
        self.assertEqual(packet.checksum, 709)
70