blob: 6ca93073346826de7c702ddc0b75179ea7ac136c [file] [log] [blame]
Jonathan Hartdeda0ba2014-04-03 11:14:12 -07001package net.onrc.onos.core.packet;
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -08002
3import static org.junit.Assert.*;
Jonathan Hartdeda0ba2014-04-03 11:14:12 -07004import net.onrc.onos.core.packet.ARP;
5import net.onrc.onos.core.packet.Data;
6import net.onrc.onos.core.packet.Ethernet;
7import net.onrc.onos.core.packet.IPacket;
8import net.onrc.onos.core.packet.IPv4;
9import net.onrc.onos.core.packet.UDP;
Jonathan Hart96892d12014-03-26 20:21:29 -070010
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -080011import org.junit.Before;
12import org.junit.Test;
13
14public class PacketTest {
15 protected IPacket pkt1, pkt2, pkt3, pkt4;
16 protected IPacket dummyPkt;
17 protected IPacket[] packets;
18
19 @Before
20 public void setUp() {
21 this.pkt1 = new Ethernet()
22 .setDestinationMACAddress("00:11:22:33:44:55")
23 .setSourceMACAddress("00:44:33:22:11:00")
24 .setEtherType(Ethernet.TYPE_IPv4)
25 .setPayload(
26 new IPv4()
27 .setTtl((byte) 128)
28 .setSourceAddress("192.168.1.1")
29 .setDestinationAddress("192.168.1.2")
30 .setPayload(new UDP()
31 .setSourcePort((short) 5000)
32 .setDestinationPort((short) 5001)
33 .setPayload(new Data(new byte[] {0x01}))));
34
35 this.pkt2 = new Ethernet()
36 .setSourceMACAddress("00:44:33:22:11:01")
37 .setDestinationMACAddress("00:11:22:33:44:55")
38 .setEtherType(Ethernet.TYPE_ARP)
39 .setVlanID((short)5)
40 .setPayload(
41 new ARP()
42 .setHardwareType(ARP.HW_TYPE_ETHERNET)
43 .setProtocolType(ARP.PROTO_TYPE_IP)
44 .setHardwareAddressLength((byte) 6)
45 .setProtocolAddressLength((byte) 4)
46 .setOpCode(ARP.OP_REPLY)
47 .setSenderHardwareAddress(Ethernet.toMACAddress("00:44:33:22:11:01"))
48 .setSenderProtocolAddress(IPv4.toIPv4AddressBytes("192.168.1.1"))
49 .setTargetHardwareAddress(Ethernet.toMACAddress("00:11:22:33:44:55"))
50 .setTargetProtocolAddress(IPv4.toIPv4AddressBytes("192.168.1.2")));
51
52
53 this.pkt3 = new Ethernet()
54 .setSourceMACAddress("00:44:33:22:11:01")
55 .setDestinationMACAddress("00:11:22:33:44:55")
56 .setEtherType(Ethernet.TYPE_ARP)
57 .setPayload(
58 new ARP()
59 .setHardwareType(ARP.HW_TYPE_ETHERNET)
60 .setProtocolType(ARP.PROTO_TYPE_IP)
61 .setHardwareAddressLength((byte) 6)
62 .setProtocolAddressLength((byte) 4)
63 .setOpCode(ARP.OP_REPLY)
64 .setSenderHardwareAddress(Ethernet.toMACAddress("00:44:33:22:11:01"))
65 .setSenderProtocolAddress(IPv4.toIPv4AddressBytes("192.168.1.1"))
66 .setTargetHardwareAddress(Ethernet.toMACAddress("00:11:22:33:44:55"))
67 .setTargetProtocolAddress(IPv4.toIPv4AddressBytes("192.168.1.2")));
68
69 this.pkt4 = new Ethernet()
70 .setDestinationMACAddress("FF:FF:FF:FF:FF:FF")
71 .setSourceMACAddress("00:11:33:55:77:01")
72 .setEtherType(Ethernet.TYPE_IPv4)
73 .setPayload(
74 new IPv4()
75 .setTtl((byte) 128)
76 .setSourceAddress("192.168.10.1")
77 .setDestinationAddress("192.168.255.255")
78 .setPayload(new UDP()
79 .setSourcePort((short) 5000)
80 .setDestinationPort((short) 5001)
81 .setPayload(new Data(new byte[] {0x01}))));
82
83 this.dummyPkt = new IPv4()
84 .setTtl((byte) 32)
85 .setSourceAddress("1.2.3.4")
86 .setDestinationAddress("5.6.7.8");
87
88 this.packets = new IPacket[] { pkt1, pkt2, pkt3, pkt4 };
89 }
90
91 protected void doTestClone(IPacket pkt) {
92 if (pkt.getPayload() != null)
93 doTestClone(pkt.getPayload());
94 IPacket newPkt = (IPacket)pkt.clone();
95 assertSame(pkt.getClass(), newPkt.getClass());
96 assertNotSame(pkt, newPkt);
97 assertSame(pkt.getParent(), newPkt.getParent());
98 assertEquals(pkt, newPkt);
99 assertEquals(pkt.getPayload(), newPkt.getPayload());
100 if (pkt.getPayload() != null)
101 assertNotSame(pkt.getPayload(), newPkt.getPayload());
102
103 if (pkt instanceof Ethernet) {
104 Ethernet eth = (Ethernet)pkt;
105 Ethernet newEth = (Ethernet)newPkt;
106 newEth.setDestinationMACAddress(new byte[] { 1,2,3,4,5,6});
107 assertEquals(false, newEth.getDestinationMAC()
108 .equals(eth.getDestinationMAC()));
109 assertEquals(false, newPkt.equals(pkt));
110 }
111 if (pkt instanceof ARP) {
112 ARP arp = (ARP)pkt;
113 ARP newArp = (ARP)newPkt;
114 newArp.setSenderProtocolAddress(new byte[] {1,2,3,4});
115 assertEquals(false, newArp.getSenderProtocolAddress()
116 .equals(arp.getSenderProtocolAddress()));
117 assertEquals(false, newPkt.equals(pkt));
118 }
119
120 byte[] dummyData = dummyPkt.serialize().clone();
121 newPkt = (IPacket)pkt.clone();
122 newPkt.deserialize(dummyData, 0, dummyData.length);
123 assertEquals(false, newPkt.equals(pkt));
124 }
125
126 @Test
127 public void testClone() {
128 for (IPacket pkt: packets) {
129 doTestClone(pkt);
130 }
131 }
132
133}