/*
* 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.sling.commons.contentdetection.internal.it;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.inject.Inject;
import org.apache.commons.io.IOUtils;
import org.apache.sling.commons.contentdetection.ContentAwareMimeTypeService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.ops4j.pax.exam.junit.PaxExam;
import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
import org.ops4j.pax.exam.spi.reactors.PerClass;
@RunWith(PaxExam.class)
@ExamReactorStrategy(PerClass.class)
public class ContentAwareMimeTypeServiceImplIT extends ContentdetectionTestSupport {
@Inject
private ContentAwareMimeTypeService contentAwareMimeTypeService;
class NonMarkableStream extends BufferedInputStream {
NonMarkableStream(InputStream is) {
super(is);
}
@Override
public synchronized void mark(int readlimit) {
}
@Override
public synchronized void reset() throws IOException {
}
@Override
public boolean markSupported() {
return false;
}
};
@Test
public void detectFromExtension() throws IOException {
String mimeTypeName = "test.mp3";
String mimeType = "audio/mpeg";
assertEquals("Expecting mp3 type without InputStream parameter",
mimeType, contentAwareMimeTypeService.getMimeType(mimeTypeName));
assertEquals("Expecting mp3 type with null InputStream parameter",
mimeType, contentAwareMimeTypeService.getMimeType(mimeTypeName, null));
}
@Test
public void detectFromContent() throws IOException{
final String filename = "this-is-actually-a-wav-file.mp3";
final String path = "/" + filename;
final InputStream s = new BufferedInputStream(getClass().getResourceAsStream(path));
assertNotNull("Expecting stream to be found:" + filename, s);
InputStream originalStream = null;
try {
assertEquals("audio/x-wav", contentAwareMimeTypeService.getMimeType(filename, s));
originalStream = getClass().getResourceAsStream(path);
assertNotNull("Expecting stream to be found:" + filename, originalStream);
assertTrue("Expecting content to be unchanged", IOUtils.contentEquals(s, originalStream));
} finally {
IOUtils.closeQuietly(s);
IOUtils.closeQuietly(originalStream);
}
}
@Test(expected=IllegalArgumentException.class)
public void nonMarkableStreamDetectionShouldFail() throws IOException{
final InputStream nms = new NonMarkableStream(new ByteArrayInputStream("1234567890".getBytes()));
try {
contentAwareMimeTypeService.getMimeType("foo.txt", nms);
} finally {
IOUtils.closeQuietly(nms);
}
}
}