summaryrefslogtreecommitdiffstats
path: root/framework/src/onos/utils/misc/src/test/java/org/onlab/packet/IPv4Test.java
blob: 1bacf2a233d433ea324ee46d2abcd98b08dd241d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/*
 * Copyright 2015 Open Networking Laboratory
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.onlab.packet;

import org.junit.Before;
import org.junit.Test;

import java.nio.ByteBuffer;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

/**
 * Unit tests for IPv4 class.
 */
public class IPv4Test {

    private Deserializer<IPv4> deserializer;

    private byte version = 4;
    private byte headerLength = 6;
    private byte diffServ = 2;
    private short totalLength = 20;
    private short identification = 1;
    private byte flags = 1;
    private short fragmentOffset = 1;
    private byte ttl = 60;
    private byte protocol = 4;
    private short checksum = 4;
    private int sourceAddress = 1;
    private int destinationAddress = 2;
    private byte[] options = new byte[] {0x1, 0x2, 0x3, 0x4};

    private byte[] headerBytes;

    @Before
    public void setUp() throws Exception {
        deserializer = IPv4.deserializer();

        ByteBuffer bb = ByteBuffer.allocate(headerLength * 4);

        bb.put((byte) ((version & 0xf) << 4 | headerLength & 0xf));
        bb.put(diffServ);
        bb.putShort(totalLength);
        bb.putShort(identification);
        bb.putShort((short) ((flags & 0x7) << 13 | fragmentOffset & 0x1fff));
        bb.put(ttl);
        bb.put(protocol);
        bb.putShort(checksum);
        bb.putInt(sourceAddress);
        bb.putInt(destinationAddress);
        bb.put(options);

        headerBytes = bb.array();
    }

    @Test
    public void testDeserializeBadInput() throws Exception {
        PacketTestUtils.testDeserializeBadInput(deserializer);
    }

    @Test
    public void testDeserializeTruncated() throws Exception {
        PacketTestUtils.testDeserializeTruncated(deserializer, headerBytes);
    }

    @Test
    public void testDeserialize() throws Exception {
        IPv4 ipv4 = deserializer.deserialize(headerBytes, 0, headerBytes.length);

        assertEquals(version, ipv4.getVersion());
        assertEquals(headerLength, ipv4.getHeaderLength());
        assertEquals(diffServ, ipv4.getDiffServ());
        assertEquals(totalLength, ipv4.getTotalLength());
        assertEquals(identification, ipv4.getIdentification());
        assertEquals(flags, ipv4.getFlags());
        assertEquals(fragmentOffset, ipv4.getFragmentOffset());
        assertEquals(ttl, ipv4.getTtl());
        assertEquals(protocol, ipv4.getProtocol());
        assertEquals(checksum, ipv4.getChecksum());
        assertEquals(sourceAddress, ipv4.getSourceAddress());
        assertEquals(destinationAddress, ipv4.getDestinationAddress());
        assertTrue(ipv4.isTruncated());
    }
}