1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.commons.compress.archivers.sevenz;
21
22 import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
23 import static org.junit.jupiter.api.Assertions.assertTrue;
24
25 import java.io.InputStream;
26 import java.nio.file.Files;
27 import java.nio.file.Path;
28 import java.nio.file.Paths;
29 import java.util.List;
30 import java.util.concurrent.Callable;
31 import java.util.concurrent.ExecutorService;
32 import java.util.concurrent.Executors;
33 import java.util.concurrent.Future;
34 import java.util.stream.Collectors;
35 import java.util.stream.IntStream;
36
37 import org.junit.jupiter.api.Test;
38
39 class Compress679Test {
40
41 @Test
42 void testCompress679() {
43 final Path origin = Paths.get("src/test/resources/org/apache/commons/compress/COMPRESS-679/file.7z");
44 assertTrue(Files.exists(origin));
45 final Callable<Boolean> runnable = () -> {
46 try (SevenZFile sevenZFile = SevenZFile.builder().setPath(origin).get()) {
47 SevenZArchiveEntry sevenZArchiveEntry;
48 while ((sevenZArchiveEntry = sevenZFile.getNextEntry()) != null) {
49 if ("file4.txt".equals(sevenZArchiveEntry.getName())) {
50 final InputStream inputStream = sevenZFile.getInputStream(sevenZArchiveEntry);
51
52 break;
53 }
54 }
55 }
56 return Boolean.TRUE;
57 };
58 final ExecutorService threadPool = Executors.newFixedThreadPool(10);
59 try {
60 final List<Future<Boolean>> futures = IntStream.range(0, 30).mapToObj(i -> threadPool.submit(runnable)).collect(Collectors.toList());
61 futures.forEach(f -> assertDoesNotThrow(() -> f.get()));
62 } finally {
63 threadPool.shutdownNow();
64 }
65 }
66 }