blob: 4bc893a4fa255080608484376d111ddd7de6697b [file] [log] [blame]
Jonathan Hartdeda0ba2014-04-03 11:14:12 -07001package net.onrc.onos.core.packet;
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -08002
Yuta HIGUCHIee0c5b62014-07-22 23:22:47 -07003import static org.junit.Assert.*;
4import static org.hamcrest.Matchers.*;
Jonathan Hart96892d12014-03-26 20:21:29 -07005
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -08006import org.junit.Before;
7import org.junit.Test;
8
9public class PacketTest {
10 protected IPacket pkt1, pkt2, pkt3, pkt4;
11 protected IPacket dummyPkt;
12 protected IPacket[] packets;
Ray Milkey269ffb92014-04-03 14:43:30 -070013
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -080014 @Before
15 public void setUp() {
16 this.pkt1 = new Ethernet()
Ray Milkey269ffb92014-04-03 14:43:30 -070017 .setDestinationMACAddress("00:11:22:33:44:55")
18 .setSourceMACAddress("00:44:33:22:11:00")
Ray Milkey5c9f2db2014-04-09 10:31:21 -070019 .setEtherType(Ethernet.TYPE_IPV4)
Ray Milkey269ffb92014-04-03 14:43:30 -070020 .setPayload(
21 new IPv4()
22 .setTtl((byte) 128)
23 .setSourceAddress("192.168.1.1")
24 .setDestinationAddress("192.168.1.2")
25 .setPayload(new UDP()
26 .setSourcePort((short) 5000)
27 .setDestinationPort((short) 5001)
28 .setPayload(new Data(new byte[]{0x01}))));
29
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -080030 this.pkt2 = new Ethernet()
Ray Milkey269ffb92014-04-03 14:43:30 -070031 .setSourceMACAddress("00:44:33:22:11:01")
32 .setDestinationMACAddress("00:11:22:33:44:55")
33 .setEtherType(Ethernet.TYPE_ARP)
34 .setVlanID((short) 5)
35 .setPayload(
36 new ARP()
37 .setHardwareType(ARP.HW_TYPE_ETHERNET)
38 .setProtocolType(ARP.PROTO_TYPE_IP)
39 .setHardwareAddressLength((byte) 6)
40 .setProtocolAddressLength((byte) 4)
41 .setOpCode(ARP.OP_REPLY)
42 .setSenderHardwareAddress(Ethernet.toMACAddress("00:44:33:22:11:01"))
43 .setSenderProtocolAddress(IPv4.toIPv4AddressBytes("192.168.1.1"))
44 .setTargetHardwareAddress(Ethernet.toMACAddress("00:11:22:33:44:55"))
45 .setTargetProtocolAddress(IPv4.toIPv4AddressBytes("192.168.1.2")));
46
47
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -080048 this.pkt3 = new Ethernet()
Ray Milkey269ffb92014-04-03 14:43:30 -070049 .setSourceMACAddress("00:44:33:22:11:01")
50 .setDestinationMACAddress("00:11:22:33:44:55")
51 .setEtherType(Ethernet.TYPE_ARP)
52 .setPayload(
53 new ARP()
54 .setHardwareType(ARP.HW_TYPE_ETHERNET)
55 .setProtocolType(ARP.PROTO_TYPE_IP)
56 .setHardwareAddressLength((byte) 6)
57 .setProtocolAddressLength((byte) 4)
58 .setOpCode(ARP.OP_REPLY)
59 .setSenderHardwareAddress(Ethernet.toMACAddress("00:44:33:22:11:01"))
60 .setSenderProtocolAddress(IPv4.toIPv4AddressBytes("192.168.1.1"))
61 .setTargetHardwareAddress(Ethernet.toMACAddress("00:11:22:33:44:55"))
62 .setTargetProtocolAddress(IPv4.toIPv4AddressBytes("192.168.1.2")));
63
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -080064 this.pkt4 = new Ethernet()
Ray Milkey269ffb92014-04-03 14:43:30 -070065 .setDestinationMACAddress("FF:FF:FF:FF:FF:FF")
66 .setSourceMACAddress("00:11:33:55:77:01")
Ray Milkey5c9f2db2014-04-09 10:31:21 -070067 .setEtherType(Ethernet.TYPE_IPV4)
Ray Milkey269ffb92014-04-03 14:43:30 -070068 .setPayload(
69 new IPv4()
70 .setTtl((byte) 128)
71 .setSourceAddress("192.168.10.1")
72 .setDestinationAddress("192.168.255.255")
73 .setPayload(new UDP()
74 .setSourcePort((short) 5000)
75 .setDestinationPort((short) 5001)
76 .setPayload(new Data(new byte[]{0x01}))));
77
78 this.dummyPkt = new IPv4()
79 .setTtl((byte) 32)
80 .setSourceAddress("1.2.3.4")
81 .setDestinationAddress("5.6.7.8");
82
83 this.packets = new IPacket[]{pkt1, pkt2, pkt3, pkt4};
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -080084 }
Ray Milkey269ffb92014-04-03 14:43:30 -070085
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -080086 protected void doTestClone(IPacket pkt) {
Yuta HIGUCHI44a0b352014-05-14 21:32:48 -070087 if (pkt.getPayload() != null) {
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -080088 doTestClone(pkt.getPayload());
Yuta HIGUCHI44a0b352014-05-14 21:32:48 -070089 }
Ray Milkey269ffb92014-04-03 14:43:30 -070090 IPacket newPkt = (IPacket) pkt.clone();
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -080091 assertSame(pkt.getClass(), newPkt.getClass());
92 assertNotSame(pkt, newPkt);
93 assertSame(pkt.getParent(), newPkt.getParent());
94 assertEquals(pkt, newPkt);
95 assertEquals(pkt.getPayload(), newPkt.getPayload());
Yuta HIGUCHI44a0b352014-05-14 21:32:48 -070096 if (pkt.getPayload() != null) {
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -080097 assertNotSame(pkt.getPayload(), newPkt.getPayload());
Yuta HIGUCHI44a0b352014-05-14 21:32:48 -070098 }
Ray Milkey269ffb92014-04-03 14:43:30 -070099
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -0800100 if (pkt instanceof Ethernet) {
Ray Milkey269ffb92014-04-03 14:43:30 -0700101 Ethernet eth = (Ethernet) pkt;
102 Ethernet newEth = (Ethernet) newPkt;
103 newEth.setDestinationMACAddress(new byte[]{1, 2, 3, 4, 5, 6});
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -0800104 assertEquals(false, newEth.getDestinationMAC()
Ray Milkey269ffb92014-04-03 14:43:30 -0700105 .equals(eth.getDestinationMAC()));
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -0800106 assertEquals(false, newPkt.equals(pkt));
107 }
108 if (pkt instanceof ARP) {
Ray Milkey269ffb92014-04-03 14:43:30 -0700109 ARP arp = (ARP) pkt;
110 ARP newArp = (ARP) newPkt;
111 newArp.setSenderProtocolAddress(new byte[]{1, 2, 3, 4});
Yuta HIGUCHIee0c5b62014-07-22 23:22:47 -0700112 assertThat(newArp.getSenderProtocolAddress(),
113 not(equalTo(arp.getSenderProtocolAddress())));
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -0800114 assertEquals(false, newPkt.equals(pkt));
115 }
Ray Milkey269ffb92014-04-03 14:43:30 -0700116
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -0800117 byte[] dummyData = dummyPkt.serialize().clone();
Ray Milkey269ffb92014-04-03 14:43:30 -0700118 newPkt = (IPacket) pkt.clone();
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -0800119 newPkt.deserialize(dummyData, 0, dummyData.length);
120 assertEquals(false, newPkt.equals(pkt));
121 }
Ray Milkey269ffb92014-04-03 14:43:30 -0700122
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -0800123 @Test
124 public void testClone() {
Ray Milkey269ffb92014-04-03 14:43:30 -0700125 for (IPacket pkt : packets) {
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -0800126 doTestClone(pkt);
127 }
128 }
Ray Milkey269ffb92014-04-03 14:43:30 -0700129
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -0800130}