1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.compress.archivers.ar;
19
20 import static org.junit.jupiter.api.Assertions.assertThrows;
21 import static org.junit.jupiter.api.Assertions.assertTrue;
22
23 import java.io.ByteArrayOutputStream;
24 import java.io.File;
25 import java.io.IOException;
26 import java.io.OutputStream;
27 import java.nio.file.Files;
28 import java.util.ArrayList;
29 import java.util.List;
30
31 import org.apache.commons.compress.AbstractTest;
32 import org.junit.jupiter.api.Test;
33
34 public class ArArchiveOutputStreamTest extends AbstractTest {
35
36 @Test
37 public void testLongFileNamesCauseExceptionByDefault() throws IOException {
38 try (ArArchiveOutputStream os = new ArArchiveOutputStream(new ByteArrayOutputStream())) {
39 final ArArchiveEntry ae = new ArArchiveEntry("this_is_a_long_name.txt", 0);
40 final IOException ex = assertThrows(IOException.class, () -> os.putArchiveEntry(ae), "Expected an exception");
41 assertTrue(ex.getMessage().startsWith("File name too long"));
42 }
43 }
44
45 @Test
46 public void testLongFileNamesWorkUsingBSDDialect() throws Exception {
47 final File file = createTempFile();
48 try (OutputStream fos = Files.newOutputStream(file.toPath());
49 ArArchiveOutputStream os = new ArArchiveOutputStream(fos)) {
50 os.setLongFileMode(ArArchiveOutputStream.LONGFILE_BSD);
51 final ArArchiveEntry ae = new ArArchiveEntry("this_is_a_long_name.txt", 14);
52 os.putArchiveEntry(ae);
53 os.write(new byte[] { 'H', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!', '\n' });
54 os.closeArchiveEntry();
55
56 final List<String> expected = new ArrayList<>();
57 expected.add("this_is_a_long_name.txt");
58 checkArchiveContent(file, expected);
59 }
60 }
61 }