1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.io;
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.assertFalse;
23 import static org.junit.jupiter.api.Assertions.assertThrows;
24 import static org.junit.jupiter.api.Assertions.assertTrue;
25
26 import java.io.IOException;
27 import java.io.RandomAccessFile;
28 import java.nio.file.Files;
29 import java.nio.file.Path;
30 import java.util.Arrays;
31
32 import org.junit.jupiter.api.Test;
33
34
35
36
37 public class RandomAccessFilesTest {
38
39 private static final String FILE_NAME_RO_20 = "src/test/resources/org/apache/commons/io/test-file-20byteslength.bin";
40 private static final String FILE_NAME_RO_0 = "src/test/resources/org/apache/commons/io/test-file-empty.bin";
41 private static final String FILE_NAME_RO_0_BIS = "src/test/resources/org/apache/commons/io/test-file-empty2.bin";
42
43 @Test
44 public void testContentEquals() throws IOException {
45 try (RandomAccessFile raf1 = RandomAccessFileMode.READ_ONLY.create(FILE_NAME_RO_20)) {
46 assertEquals(raf1, raf1);
47 assertTrue(RandomAccessFiles.contentEquals(raf1, raf1));
48 }
49
50 try (RandomAccessFile raf1 = RandomAccessFileMode.READ_ONLY.create(FILE_NAME_RO_20)) {
51 assertEquals(raf1, raf1);
52 assertTrue(RandomAccessFiles.contentEquals(raf1, raf1));
53 }
54
55 try (RandomAccessFile raf1 = RandomAccessFileMode.READ_ONLY.create(FILE_NAME_RO_20);
56 RandomAccessFile raf2 = RandomAccessFileMode.READ_ONLY.create(FILE_NAME_RO_20)) {
57 assertTrue(RandomAccessFiles.contentEquals(raf1, raf2));
58 }
59
60 try (RandomAccessFile raf1 = RandomAccessFileMode.READ_ONLY.create(FILE_NAME_RO_0);
61 RandomAccessFile raf2 = RandomAccessFileMode.READ_ONLY.create(FILE_NAME_RO_0)) {
62 assertTrue(RandomAccessFiles.contentEquals(raf1, raf2));
63 assertTrue(RandomAccessFiles.contentEquals(RandomAccessFiles.reset(raf2), RandomAccessFiles.reset(raf1)));
64 }
65
66 try (RandomAccessFile raf1 = RandomAccessFileMode.READ_ONLY.create(FILE_NAME_RO_0);
67 RandomAccessFile raf2 = RandomAccessFileMode.READ_ONLY.create(FILE_NAME_RO_0_BIS)) {
68 assertTrue(RandomAccessFiles.contentEquals(raf1, raf2));
69 assertTrue(RandomAccessFiles.contentEquals(RandomAccessFiles.reset(raf2), RandomAccessFiles.reset(raf1)));
70 }
71 try (RandomAccessFile raf1 = RandomAccessFileMode.READ_ONLY.create(FILE_NAME_RO_0);
72 RandomAccessFile raf2 = RandomAccessFileMode.READ_ONLY.create(FILE_NAME_RO_20)) {
73 assertFalse(RandomAccessFiles.contentEquals(raf1, raf2));
74 assertFalse(RandomAccessFiles.contentEquals(RandomAccessFiles.reset(raf2), RandomAccessFiles.reset(raf1)));
75 }
76
77 final Path bigFile1 = Files.createTempFile(getClass().getSimpleName(), "-1.bin");
78 final Path bigFile2 = Files.createTempFile(getClass().getSimpleName(), "-2.bin");
79 final Path bigFile3 = Files.createTempFile(getClass().getSimpleName(), "-3.bin");
80 try {
81 final int newLength = 1_000_000;
82 final byte[] bytes1 = new byte[newLength];
83 final byte[] bytes2 = new byte[newLength];
84 Arrays.fill(bytes1, (byte) 1);
85 Arrays.fill(bytes2, (byte) 2);
86 Files.write(bigFile1, bytes1);
87 Files.write(bigFile2, bytes2);
88 try (RandomAccessFile raf1 = RandomAccessFileMode.READ_ONLY.create(bigFile1);
89 RandomAccessFile raf2 = RandomAccessFileMode.READ_ONLY.create(bigFile2)) {
90 assertFalse(RandomAccessFiles.contentEquals(raf1, raf2));
91 assertFalse(RandomAccessFiles.contentEquals(RandomAccessFiles.reset(raf2), RandomAccessFiles.reset(raf1)));
92 assertTrue(RandomAccessFiles.contentEquals(RandomAccessFiles.reset(raf1), RandomAccessFiles.reset(raf1)));
93 }
94
95 final byte[] bytes3 = bytes1.clone();
96 bytes3[bytes3.length - 1] = 9;
97 Files.write(bigFile3, bytes3);
98 try (RandomAccessFile raf1 = RandomAccessFileMode.READ_ONLY.create(bigFile1);
99 RandomAccessFile raf3 = RandomAccessFileMode.READ_ONLY.create(bigFile3)) {
100 assertFalse(RandomAccessFiles.contentEquals(raf1, raf3));
101 assertFalse(RandomAccessFiles.contentEquals(RandomAccessFiles.reset(raf3), RandomAccessFiles.reset(raf1)));
102 }
103 } finally {
104
105 Files.deleteIfExists(bigFile1);
106 Files.deleteIfExists(bigFile2);
107 Files.deleteIfExists(bigFile3);
108 }
109 }
110
111 @Test
112 public void testRead() throws IOException {
113 try (final RandomAccessFile raf = RandomAccessFileMode.READ_ONLY.create(FILE_NAME_RO_20)) {
114 final byte[] buffer = RandomAccessFiles.read(raf, 0, 0);
115 assertArrayEquals(new byte[] {}, buffer);
116 }
117 try (final RandomAccessFile raf = RandomAccessFileMode.READ_ONLY.create(FILE_NAME_RO_20)) {
118 final byte[] buffer = RandomAccessFiles.read(raf, 1, 0);
119 assertArrayEquals(new byte[] {}, buffer);
120 }
121 try (final RandomAccessFile raf = RandomAccessFileMode.READ_ONLY.create(FILE_NAME_RO_20)) {
122 final byte[] buffer = RandomAccessFiles.read(raf, 0, 1);
123 assertArrayEquals(new byte[] { '1' }, buffer);
124 }
125 try (final RandomAccessFile raf = RandomAccessFileMode.READ_ONLY.create(FILE_NAME_RO_20)) {
126 final byte[] buffer = RandomAccessFiles.read(raf, 1, 1);
127 assertArrayEquals(new byte[] { '2' }, buffer);
128 }
129 try (final RandomAccessFile raf = RandomAccessFileMode.READ_ONLY.create(FILE_NAME_RO_20)) {
130 final byte[] buffer = RandomAccessFiles.read(raf, 0, 20);
131 assertEquals(20, buffer.length);
132 }
133 try (final RandomAccessFile raf = RandomAccessFileMode.READ_ONLY.create(FILE_NAME_RO_20)) {
134 assertThrows(IOException.class, () -> RandomAccessFiles.read(raf, 0, 21));
135 }
136 }
137 }