1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.commons.compress.archivers.zip;
20
21 import static org.apache.commons.compress.archivers.zip.ZipArchiveEntryRequest.createZipArchiveEntryRequest;
22 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
23 import static org.junit.jupiter.api.Assertions.assertEquals;
24
25 import java.io.ByteArrayInputStream;
26 import java.io.File;
27 import java.io.InputStream;
28 import java.util.zip.ZipEntry;
29
30 import org.apache.commons.compress.AbstractTempDirTest;
31 import org.apache.commons.compress.parallel.InputStreamSupplier;
32 import org.apache.commons.io.IOUtils;
33 import org.junit.jupiter.api.Test;
34
35 class ScatterZipOutputStreamTest extends AbstractTempDirTest {
36
37 private InputStreamSupplier createPayloadSupplier(final ByteArrayInputStream payload) {
38 return () -> payload;
39 }
40
41 @Test
42 void testPutArchiveEntry() throws Exception {
43 final File scatterFile = createTempFile("scattertest", ".notzip");
44 final File target = createTempFile("scattertest", ".zip");
45 final byte[] B_PAYLOAD = "RBBBBBBS".getBytes();
46 final byte[] A_PAYLOAD = "XAAY".getBytes();
47 try (ScatterZipOutputStream scatterZipOutputStream = ScatterZipOutputStream.fileBased(scatterFile)) {
48
49 final ZipArchiveEntry zab = new ZipArchiveEntry("b.txt");
50 zab.setMethod(ZipEntry.DEFLATED);
51 final ByteArrayInputStream payload = new ByteArrayInputStream(B_PAYLOAD);
52 scatterZipOutputStream.addArchiveEntry(createZipArchiveEntryRequest(zab, createPayloadSupplier(payload)));
53
54 final ZipArchiveEntry zae = new ZipArchiveEntry("a.txt");
55 zae.setMethod(ZipEntry.DEFLATED);
56 final ByteArrayInputStream payload1 = new ByteArrayInputStream(A_PAYLOAD);
57 scatterZipOutputStream.addArchiveEntry(createZipArchiveEntryRequest(zae, createPayloadSupplier(payload1)));
58
59 try (ZipArchiveOutputStream outputStream = new ZipArchiveOutputStream(target)) {
60 scatterZipOutputStream.writeTo(outputStream);
61 }
62 }
63
64 try (ZipFile zf = ZipFile.builder().setFile(target).get()) {
65 final ZipArchiveEntry bEntry = zf.getEntries("b.txt").iterator().next();
66 assertEquals(8, bEntry.getSize());
67 try (InputStream inputStream = zf.getInputStream(bEntry)) {
68 assertArrayEquals(B_PAYLOAD, IOUtils.toByteArray(inputStream));
69 }
70
71 final ZipArchiveEntry aEntry = zf.getEntries("a.txt").iterator().next();
72 assertEquals(4, aEntry.getSize());
73 try (InputStream inputStream = zf.getInputStream(aEntry)) {
74 assertArrayEquals(A_PAYLOAD, IOUtils.toByteArray(inputStream));
75 }
76 }
77 }
78 }