Passed
Pull Request — master (#414)
by Carlos Eduardo
02:33
created

TestPacketIn.test_unpack()   A

Complexity

Conditions 1

Size

Total Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 11
rs 9.4285
c 0
b 0
f 0
cc 1
1
"""Packet in message tests."""
2
from unittest import TestCase
3
4
from pyof.v0x04.asynchronous.packet_in import PacketIn, PacketInReason
5
from pyof.v0x04.common.flow_match import Match, OxmTLV
6
from pyof.v0x04.common.header import Header
7
from tests.test_struct import TestStruct
8
9
oxmtlv = OxmTLV(oxm_class=32768,
10
                oxm_field=0,
11
                oxm_hasmask=0,
12
                oxm_value=b'\x00\x00\x00\x16')
13
14
match = Match(match_type=1,
15
              oxm_match_fields=[oxmtlv])
16
17
packetin = PacketIn(xid=0,
18
                    buffer_id=257,
19
                    total_len=81,
20
                    reason=1,
21
                    table_id=0,
22
                    cookie=18446744073709551615,
23
                    match=match,
24
                    data=81 * b'\x00')
25
26
dump = b'\x04\n\x00{\x00\x00\x00\x00\x00\x00\x01\x01\x00Q\x01\x00\xff\xff'
27
dump += b'\xff\xff\xff\xff\xff\xff\x00\x01\x00\x0c\x80\x00\x00\x04\x00\x00'
28
dump += b'\x00\x16\x00\x00\x00\x00\x00\x00'
29
dump += 81 * b'\x00'
30
31
32
class TestPacketIn(TestCase):
33
    """Test PacketIn class."""
34
35
    def test_pack(self):
36
        """Assert pack method returns a known dump."""
37
        self.assertEqual(dump, packetin.pack())
38
39
    def test_unpack(self):
40
        """Assert the known dump is unpacked correctly."""
41
        unpacked_header = Header()
42
        unpacked_header.unpack(dump[:8])
43
        packetin.update_header_length()
44
        self.assertEqual(packetin.header, unpacked_header)
45
46
        unpacked_packetin = PacketIn()
47
        unpacked_packetin.unpack(dump[8:])
48
        unpacked_packetin.header = unpacked_header
49
        self.assertEqual(packetin, unpacked_packetin)
50
51
52
class TestPacketInRaw(TestStruct):
53
    """Test PacketIn using a dump file."""
54
55
    @classmethod
56
    def setUpClass(cls):
57
        """Configure raw file and its object in parent class (TestDump)."""
58
        super().setUpClass()
59
        super().set_raw_dump_file('v0x04', 'ofpt_packet_in')
60
        super().set_raw_dump_object(PacketIn, xid=1, buffer_id=1, total_len=1,
61
                                    reason=PacketInReason.OFPR_ACTION,
62
                                    table_id=1, cookie=1, data=b'')
63
        super().set_minimum_size(34)
64