1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.net.tftp;
19
20 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
21 import static org.junit.jupiter.api.Assertions.assertEquals;
22 import static org.junit.jupiter.api.Assertions.assertNotNull;
23
24 import java.io.ByteArrayOutputStream;
25 import java.io.IOException;
26 import java.net.DatagramPacket;
27 import java.net.InetAddress;
28 import java.net.UnknownHostException;
29 import java.nio.charset.StandardCharsets;
30 import java.util.Map;
31
32 import org.junit.jupiter.api.Test;
33
34
35
36
37 class TFTPRequestPacketTest {
38
39 private static DatagramPacket getDatagramPacket() throws UnknownHostException {
40 final ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
41 byteStream.write(0);
42 byteStream.write(1);
43
44 try {
45 byteStream.write("fileName".getBytes(StandardCharsets.US_ASCII));
46 byteStream.write(0);
47 byteStream.write("octet".getBytes(StandardCharsets.US_ASCII));
48 byteStream.write(0);
49
50 byteStream.write("blksize".getBytes(StandardCharsets.US_ASCII));
51 byteStream.write(0);
52 byteStream.write("1024".getBytes(StandardCharsets.US_ASCII));
53 byteStream.write(0);
54 } catch (final IOException e) {
55 throw new RuntimeException("Error creating TFTP request packet", e);
56 }
57
58 final byte[] data = byteStream.toByteArray();
59 return new DatagramPacket(data, data.length, InetAddress.getLocalHost(), 0);
60 }
61
62 @Test
63 void testGetOptions() throws UnknownHostException, TFTPPacketException {
64 final DatagramPacket datagramPacket = getDatagramPacket();
65 final TFTPReadRequestPacket requestPacket = new TFTPReadRequestPacket(datagramPacket);
66 assertNotNull(requestPacket.toString());
67 final Map<String, String> options = requestPacket.getOptions();
68 assertEquals(1, options.size());
69 assertEquals("1024", options.get("blksize"));
70 }
71
72 @Test
73 void testNewDatagram() throws TFTPPacketException, UnknownHostException {
74 final DatagramPacket datagramPacket = getDatagramPacket();
75
76 final TFTPReadRequestPacket requestPacket = new TFTPReadRequestPacket(datagramPacket);
77 final DatagramPacket newDatagram = requestPacket.newDatagram();
78
79 assertNotNull(newDatagram);
80 assertEquals(datagramPacket.getAddress(), newDatagram.getAddress());
81 assertEquals(datagramPacket.getPort(), newDatagram.getPort());
82 assertEquals(datagramPacket.getLength(), newDatagram.getLength());
83 assertArrayEquals(datagramPacket.getData(), newDatagram.getData());
84
85 final byte[] data = new byte[datagramPacket.getLength()];
86 final DatagramPacket newDatagram2 = new DatagramPacket(data, data.length, InetAddress.getLocalHost(), 0);
87 requestPacket.newDatagram(newDatagram2, data);
88
89 assertEquals(datagramPacket.getAddress(), newDatagram2.getAddress());
90 assertEquals(datagramPacket.getPort(), newDatagram2.getPort());
91 assertArrayEquals(datagramPacket.getData(), data);
92 }
93 }