/**
* Copyright (c) Codice Foundation
* <p/>
* This is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser
* General Public License as published by the Free Software Foundation, either version 3 of the
* License, or any later version.
* <p/>
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
* even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details. A copy of the GNU Lesser General Public License
* is distributed along with this program and can be found at
* <http://www.gnu.org/licenses/lgpl.html>.
*/
package ddf.catalog.data.impl;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.activation.MimeType;
import javax.activation.MimeTypeParseException;
import javax.activation.MimetypesFileTypeMap;
import org.apache.commons.io.IOUtils;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.notification.Failure;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class BinaryContentImplTest {
private static final String IO_FAILURE = "IO Failure";
private static final Logger LOGGER = LoggerFactory.getLogger(BinaryContentImplTest.class);
private File content;
private MimeType mimeType;
@Before
public void setUp() {
content = new File("src/test/resources/data/i4ce.png");
MimetypesFileTypeMap mimeMapper = new MimetypesFileTypeMap();
try {
mimeType = new MimeType(mimeMapper.getContentType(content));
} catch (MimeTypeParseException e) {
LOGGER.error("Mime parser Failure", e);
new Failure(null, e);
}
}
@Test
public void testBinaryContentImpl() {
InputStream is;
try {
is = new FileInputStream(content);
BinaryContentImpl bci = new BinaryContentImpl(is, mimeType);
bci.setSize(content.length());
assertEquals(is, bci.getInputStream());
assertEquals(mimeType, bci.getMimeType());
assertEquals(content.length(), bci.getSize());
assertNotNull(bci.toString());
} catch (IOException e) {
LOGGER.error(IO_FAILURE, e);
new Failure(null, e);
}
}
@Test
public void testBinaryContentImplNullInputStream() {
InputStream is = null;
BinaryContentImpl bci = new BinaryContentImpl(is, mimeType);
bci.setSize(content.length());
assertEquals(is, bci.getInputStream());
assertEquals(mimeType, bci.getMimeType());
assertEquals(content.length(), bci.getSize());
}
@Test
public void testBinaryContentImplNullMimeType() {
InputStream is;
try {
is = new FileInputStream(content);
BinaryContentImpl bci = new BinaryContentImpl(is, null);
assertEquals(null, bci.getMimeType());
} catch (IOException e) {
LOGGER.error(IO_FAILURE, e);
new Failure(null, e);
}
}
@Test
public void testBinaryContentImplSizeNotSet() {
InputStream is;
try {
is = new FileInputStream(content);
BinaryContentImpl bci = new BinaryContentImpl(is, mimeType);
assertEquals(BinaryContentImpl.UNKNOWN_SIZE, bci.getSize());
} catch (IOException e) {
LOGGER.error(IO_FAILURE, e);
new Failure(null, e);
}
}
@Test
public void testBinaryContentImplNegativeSize() {
InputStream is;
try {
is = new FileInputStream(content);
BinaryContentImpl bci = new BinaryContentImpl(is, mimeType);
bci.setSize(-20L);
assertEquals(BinaryContentImpl.UNKNOWN_SIZE, bci.getSize());
} catch (IOException e) {
LOGGER.error(IO_FAILURE, e);
new Failure(null, e);
}
}
@Test
public void testBinaryContentImplByteArrayValidity() {
InputStream is;
try {
is = new FileInputStream(content);
BinaryContentImpl bci = new BinaryContentImpl(is, mimeType);
byte[] contents = bci.getByteArray();
assertArrayEquals(contents, bci.getByteArray());
} catch (IOException e) {
LOGGER.error(IO_FAILURE, e);
new Failure(null, e);
}
}
@Test
public void testBinaryContentImplByteArrayNotNull() {
InputStream is;
try {
is = new FileInputStream(content);
BinaryContentImpl bci = new BinaryContentImpl(is, mimeType);
byte[] contents = bci.getByteArray();
assertNotNull(contents);
} catch (IOException e) {
LOGGER.error(IO_FAILURE, e);
new Failure(null, e);
}
}
@Test
public void testBinaryContentImplByteArrayX2NotNull() {
InputStream is;
try {
is = new FileInputStream(content);
BinaryContentImpl bci = new BinaryContentImpl(is, mimeType);
assertNotNull(bci.getByteArray());
assertNotNull(bci.getByteArray());
} catch (IOException e) {
LOGGER.error(IO_FAILURE, e);
new Failure(null, e);
}
}
@Test
public void testBinaryContentImplByteArrayAndInputStreamNotNull() {
InputStream is;
try {
is = new FileInputStream(content);
BinaryContentImpl bci = new BinaryContentImpl(is, mimeType);
byte[] contents = bci.getByteArray();
assertNotNull(contents);
InputStream newIs = bci.getInputStream();
assertNotNull(newIs);
} catch (IOException e) {
LOGGER.error(IO_FAILURE, e);
new Failure(null, e);
}
}
@Test
public void testByteArraysEqual() {
byte[] bytes = "Hello World".getBytes();
InputStream is;
try {
is = new ByteArrayInputStream(bytes);
BinaryContentImpl bci = new BinaryContentImpl(is, mimeType);
byte[] contents = bci.getByteArray();
assertArrayEquals(bytes, contents);
InputStream newIs = bci.getInputStream();
byte[] inputStreamByteArray = IOUtils.toByteArray(newIs);
assertArrayEquals(bytes, inputStreamByteArray);
} catch (IOException e) {
LOGGER.error(IO_FAILURE, e);
new Failure(null, e);
}
}
}