1 /*******************************************************************************
2 * Copyright (c) 2014 Ericsson
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
10 * Vincent Perot - Initial API and implementation
11 *******************************************************************************/
13 package org
.eclipse
.linuxtools
.pcap
.core
.tests
.protocol
.tcp
;
15 import static org
.junit
.Assert
.assertEquals
;
16 import static org
.junit
.Assert
.assertFalse
;
17 import static org
.junit
.Assert
.assertTrue
;
18 import static org
.junit
.Assert
.fail
;
19 import static org
.junit
.Assume
.assumeTrue
;
21 import java
.io
.IOException
;
22 import java
.nio
.ByteBuffer
;
23 import java
.nio
.ByteOrder
;
24 import java
.util
.Arrays
;
25 import java
.util
.LinkedHashMap
;
28 import org
.eclipse
.linuxtools
.internal
.pcap
.core
.packet
.BadPacketException
;
29 import org
.eclipse
.linuxtools
.internal
.pcap
.core
.protocol
.PcapProtocol
;
30 import org
.eclipse
.linuxtools
.internal
.pcap
.core
.protocol
.tcp
.TCPEndpoint
;
31 import org
.eclipse
.linuxtools
.internal
.pcap
.core
.protocol
.tcp
.TCPPacket
;
32 import org
.eclipse
.linuxtools
.internal
.pcap
.core
.trace
.BadPcapFileException
;
33 import org
.eclipse
.linuxtools
.internal
.pcap
.core
.trace
.PcapFile
;
34 import org
.eclipse
.linuxtools
.pcap
.core
.tests
.shared
.PcapTestTrace
;
35 import org
.junit
.Before
;
36 import org
.junit
.Test
;
39 * JUnit Class that tests the TCPPacket class and its method.
41 * @author Vincent Perot
43 public class TCPPacketTest
{
45 private static final Map
<String
, String
> EXPECTED_FIELDS
;
47 EXPECTED_FIELDS
= new LinkedHashMap
<>();
48 EXPECTED_FIELDS
.put("Source Port", "18057");
49 EXPECTED_FIELDS
.put("Destination Port", "39611");
50 EXPECTED_FIELDS
.put("Sequence Number", "2575857510");
51 EXPECTED_FIELDS
.put("Acknowledgement Number", "1430532898");
52 EXPECTED_FIELDS
.put("Length", "24 bytes");
53 EXPECTED_FIELDS
.put("ECN-Nonce Flag", "true");
54 EXPECTED_FIELDS
.put("Congestion Window Reduced Flag", "false");
55 EXPECTED_FIELDS
.put("ECN-Echo Flag", "true");
56 EXPECTED_FIELDS
.put("Urgent Flag", "false");
57 EXPECTED_FIELDS
.put("ACK Flag", "true");
58 EXPECTED_FIELDS
.put("PSH Flag", "false");
59 EXPECTED_FIELDS
.put("RST Flag", "true");
60 EXPECTED_FIELDS
.put("SYN Flag", "false");
61 EXPECTED_FIELDS
.put("FIN Flag", "true");
62 EXPECTED_FIELDS
.put("Window Size Value", "4352");
63 EXPECTED_FIELDS
.put("Checksum", "0xffee");
64 EXPECTED_FIELDS
.put("Urgent Pointer", "0xddcc");
65 EXPECTED_FIELDS
.put("Options", "ad da bc cb");
68 private static final String EXPECTED_TOSTRING
;
70 StringBuilder sb
= new StringBuilder();
71 sb
.append("Transmission Control Protocol, Source Port: 18057, Destination Port: 39611\n");
72 sb
.append("Sequence Number: 2575857510, Acknowledgment Number: 1430532898\n");
73 sb
.append("Header length: 24 bytes, Data length: 4\n");
74 sb
.append("Window size value: 4352, Urgent Pointer: 0xddcc\n");
75 sb
.append("Checksum: 0xffee\n");
76 sb
.append("Payload: 99 88 77 66");
78 EXPECTED_TOSTRING
= sb
.toString();
81 private ByteBuffer fPacket
;
84 * Initialize the packet.
87 public void initialize() {
88 fPacket
= ByteBuffer
.allocate(28);
89 fPacket
.order(ByteOrder
.BIG_ENDIAN
);
92 fPacket
.put((byte) 0x46);
93 fPacket
.put((byte) 0x89);
96 fPacket
.put((byte) 0x9A);
97 fPacket
.put((byte) 0xBB);
100 fPacket
.put((byte) 0x99);
101 fPacket
.put((byte) 0x88);
102 fPacket
.put((byte) 0x77);
103 fPacket
.put((byte) 0x66);
105 // Acknowledgment Number
106 fPacket
.put((byte) 0x55);
107 fPacket
.put((byte) 0x44);
108 fPacket
.put((byte) 0x33);
109 fPacket
.put((byte) 0x22);
111 // Data Offset + Reserved + NS
112 fPacket
.put((byte) 0x61);
115 fPacket
.put((byte) 0b01010101
);
118 fPacket
.put((byte) 0x11);
119 fPacket
.put((byte) 0x00);
122 fPacket
.put((byte) 0xFF);
123 fPacket
.put((byte) 0xEE);
126 fPacket
.put((byte) 0xDD);
127 fPacket
.put((byte) 0xCC);
130 fPacket
.put((byte) 0xAD);
131 fPacket
.put((byte) 0xDA);
132 fPacket
.put((byte) 0xBC);
133 fPacket
.put((byte) 0xCB);
136 fPacket
.put((byte) 0x99);
137 fPacket
.put((byte) 0x88);
138 fPacket
.put((byte) 0x77);
139 fPacket
.put((byte) 0x66);
145 * Test that verify the correctness of the TCPPacket's methods.
146 * @throws BadPcapFileException
147 * Thrown when the file is erroneous. Fails the test.
148 * @throws IOException
149 * Thrown when an IO error occurs. Fails the test.
150 * @throws BadPacketException
151 * Thrown when a packet is erroneous. Fails the test.
154 public void CompleteTCPPacketTest() throws BadPacketException
, IOException
, BadPcapFileException
{
155 PcapTestTrace trace
= PcapTestTrace
.MOSTLY_TCP
;
156 assumeTrue(trace
.exists());
157 try (PcapFile dummy
= new PcapFile(trace
.getPath())) {
158 ByteBuffer byteBuffer
= fPacket
;
159 if (byteBuffer
== null) {
160 fail("CompleteTCPPacketTest has failed!");
163 TCPPacket packet
= new TCPPacket(dummy
, null, byteBuffer
);
166 assertEquals(PcapProtocol
.TCP
, packet
.getProtocol());
167 assertTrue(packet
.hasProtocol(PcapProtocol
.TCP
));
168 assertTrue(packet
.hasProtocol(PcapProtocol
.UNKNOWN
));
169 assertFalse(packet
.hasProtocol(PcapProtocol
.IPV4
));
171 // Abstract methods Testing
172 assertTrue(packet
.validate());
173 assertEquals(-677046102, packet
.hashCode());
174 assertFalse(packet
.equals(null));
175 assertEquals(new TCPPacket(dummy
, null, byteBuffer
), packet
);
177 assertEquals(EXPECTED_FIELDS
, packet
.getFields());
178 assertEquals(EXPECTED_TOSTRING
, packet
.toString());
179 assertEquals("Src Port: 18057, Dst Port: 39611, Seq: 2575857510, Ack: 1430532898, Len: 24", packet
.getLocalSummaryString());
180 assertEquals("18057 > 39611 [ACK, FIN, RST, NS, ECE] Seq=2575857510 Ack=1430532898 Len=24", packet
.getGlobalSummaryString());
182 assertEquals(new TCPEndpoint(packet
, true), packet
.getSourceEndpoint());
183 assertEquals(new TCPEndpoint(packet
, false), packet
.getDestinationEndpoint());
185 fPacket
.position(24);
186 byte[] payload
= new byte[4];
187 fPacket
.get(payload
);
188 assertEquals(ByteBuffer
.wrap(payload
), packet
.getPayload());
190 // Packet-specific methods Testing
191 assertEquals(0x4689, packet
.getSourcePort());
192 assertEquals(0x9ABB, packet
.getDestinationPort());
193 assertEquals(2575857510L, packet
.getSequenceNumber());
194 assertEquals(1430532898L, packet
.getAcknowledgmentNumber());
195 assertEquals(6, packet
.getDataOffset());
196 assertEquals(0, packet
.getReservedField());
197 assertEquals(true, packet
.isNSFlagSet());
198 assertEquals(false, packet
.isCongestionWindowReducedFlagSet());
199 assertEquals(true, packet
.isECNEchoFlagSet());
200 assertEquals(false, packet
.isUrgentFlagSet());
201 assertEquals(true, packet
.isAcknowledgeFlagSet());
202 assertEquals(false, packet
.isPushFlagSet());
203 assertEquals(true, packet
.isResetFlagSet());
204 assertEquals(false, packet
.isSynchronizationFlagSet());
205 assertEquals(true, packet
.isFinalFlagSet());
206 assertEquals(4352, packet
.getWindowSize());
207 assertEquals(65518, packet
.getChecksum());
208 assertEquals(56780, packet
.getUrgentPointer());
209 assertTrue(Arrays
.equals(packet
.getOptions(), Arrays
.copyOfRange(fPacket
.array(), 20, 24)));
This page took 0.036547 seconds and 5 git commands to generate.