blob: 124cf9ace5e18e7c3c42038c7bca21a8efb99512 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.commons.compress.archivers.zip;
import org.apache.commons.compress.parallel.InputStreamSupplier;
import org.apache.commons.compress.utils.IOUtils;
import org.junit.After;
import org.junit.Test;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import static org.apache.commons.compress.AbstractTestCase.tryHardToDelete;
import static org.apache.commons.compress.archivers.zip.ZipArchiveEntryRequest.createZipArchiveEntryRequest;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
public class ScatterZipOutputStreamTest {
private File scatterFile = null;
private File target = null;
@After
public void cleanup() {
tryHardToDelete(scatterFile);
tryHardToDelete(target);
}
@Test
public void putArchiveEntry() throws Exception {
scatterFile = File.createTempFile("scattertest", ".notzip");
final ScatterZipOutputStream scatterZipOutputStream = ScatterZipOutputStream.fileBased(scatterFile);
final byte[] B_PAYLOAD = "RBBBBBBS".getBytes();
final byte[] A_PAYLOAD = "XAAY".getBytes();
final ZipArchiveEntry zab = new ZipArchiveEntry("b.txt");
zab.setMethod(ZipEntry.DEFLATED);
final ByteArrayInputStream payload = new ByteArrayInputStream(B_PAYLOAD);
scatterZipOutputStream.addArchiveEntry(createZipArchiveEntryRequest(zab, createPayloadSupplier(payload)));
final ZipArchiveEntry zae = new ZipArchiveEntry("a.txt");
zae.setMethod(ZipEntry.DEFLATED);
final ByteArrayInputStream payload1 = new ByteArrayInputStream(A_PAYLOAD);
scatterZipOutputStream.addArchiveEntry(createZipArchiveEntryRequest(zae, createPayloadSupplier(payload1)));
target = File.createTempFile("scattertest", ".zip");
final ZipArchiveOutputStream outputStream = new ZipArchiveOutputStream(target);
scatterZipOutputStream.writeTo( outputStream);
outputStream.close();
scatterZipOutputStream.close();
final ZipFile zf = new ZipFile(target);
final ZipArchiveEntry b_entry = zf.getEntries("b.txt").iterator().next();
assertEquals(8, b_entry.getSize());
assertArrayEquals(B_PAYLOAD, IOUtils.toByteArray(zf.getInputStream(b_entry)));
final ZipArchiveEntry a_entry = zf.getEntries("a.txt").iterator().next();
assertEquals(4, a_entry.getSize());
assertArrayEquals(A_PAYLOAD, IOUtils.toByteArray(zf.getInputStream(a_entry)));
zf.close();
}
private InputStreamSupplier createPayloadSupplier(final ByteArrayInputStream payload) {
return new InputStreamSupplier() {
@Override
public InputStream get() {
return payload;
}
};
}
}