This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.commons.contentdetection-1.0.2 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-contentdetection.git
commit 8ca7a8ba0697b95b01767f57f22514e971729fb8 Author: Bertrand Delacretaz <[email protected]> AuthorDate: Thu Jun 18 10:46:57 2015 +0000 SLING-4757 - fix pax exam memory setup and add test for non-markable stream git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/commons/contentdetection@1686179 13f79535-47bb-0310-9956-ffa450edef68 --- pom.xml | 7 +- .../ContentAwareMimeTypeService.java | 5 +- .../it/ContentAwareMimeTypeServiceImplIT.java | 86 +++++++++++++++------- .../commons/contentdetection/internal/it/U.java | 7 +- 4 files changed, 67 insertions(+), 38 deletions(-) diff --git a/pom.xml b/pom.xml index 851c3a8..28a64f2 100644 --- a/pom.xml +++ b/pom.xml @@ -37,12 +37,11 @@ <properties> <exam.version>3.5.0</exam.version> <url.version>1.5.2</url.version> - <org.ops4j.pax.logging.DefaultServiceLog.level>INFO</org.ops4j.pax.logging.DefaultServiceLog.level> <bundle.file.name>${basedir}/target/${project.build.finalName}.jar</bundle.file.name> <sling.java.version>6</sling.java.version> <sling.launchpad.version>7</sling.launchpad.version> <powermock.version>1.6.2</powermock.version> - <pax.vm.options>-Xmx256M</pax.vm.options> + <pax.vm.options>-Xmx256M -XX:MaxPermSize=256m</pax.vm.options> </properties> <dependencies> @@ -168,13 +167,11 @@ </execution> </executions> <configuration> + <argLine>${pax.vm.options}</argLine> <systemPropertyVariables> - <org.ops4j.pax.logging.DefaultServiceLog.level>${org.ops4j.pax.logging.DefaultServiceLog.level}</org.ops4j.pax.logging.DefaultServiceLog.level> - <pax.exam.log.level>${pax.exam.log.level}</pax.exam.log.level> <java.protocol.handler.pkgs>org.ops4j.pax.url</java.protocol.handler.pkgs> <bundle.file.name>${bundle.file.name}</bundle.file.name> <sling.launchpad.version>${sling.launchpad.version}</sling.launchpad.version> - <pax.vm.options>${pax.vm.options}</pax.vm.options> </systemPropertyVariables> <classpathDependencyExcludes> <!-- The osgi.org dependencies cause trouble with pax exam --> diff --git a/src/main/java/org/apache/sling/commons/contentdetection/ContentAwareMimeTypeService.java b/src/main/java/org/apache/sling/commons/contentdetection/ContentAwareMimeTypeService.java index 37be925..5999dc1 100644 --- a/src/main/java/org/apache/sling/commons/contentdetection/ContentAwareMimeTypeService.java +++ b/src/main/java/org/apache/sling/commons/contentdetection/ContentAwareMimeTypeService.java @@ -33,9 +33,10 @@ import java.io.InputStream; public interface ContentAwareMimeTypeService extends MimeTypeService { /** - * @param filename used if <code>content</code> is <code>null</code> or if + * @param filename Used if <code>content</code> is <code>null</code> or if * this service does not support content-based detection - * @param content optional stream that points to the content to analyze + * @param content Optional stream that points to the content to analyze, + * must support mark/reset. * @return the mime type */ String getMimeType(String filename, InputStream content) throws IOException; diff --git a/src/test/java/org/apache/sling/commons/contentdetection/internal/it/ContentAwareMimeTypeServiceImplIT.java b/src/test/java/org/apache/sling/commons/contentdetection/internal/it/ContentAwareMimeTypeServiceImplIT.java index 62d8450..f488e9d 100644 --- a/src/test/java/org/apache/sling/commons/contentdetection/internal/it/ContentAwareMimeTypeServiceImplIT.java +++ b/src/test/java/org/apache/sling/commons/contentdetection/internal/it/ContentAwareMimeTypeServiceImplIT.java @@ -20,6 +20,7 @@ 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 static org.junit.Assert.assertFalse; import java.io.BufferedInputStream; import java.io.IOException; @@ -29,7 +30,6 @@ import javax.inject.Inject; import org.apache.commons.io.IOUtils; import org.apache.sling.commons.contentdetection.ContentAwareMimeTypeService; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.ops4j.pax.exam.Option; @@ -40,6 +40,50 @@ public class ContentAwareMimeTypeServiceImplIT { @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; + } + }; + + abstract class AssertDetect { + void assertDetection(String expectedType, boolean expectSameContent) throws IOException { + final String filename = "this-is-actually-a-wav-file.mp3"; + final String path = "/" + filename; + final InputStream s = wrapStream(getClass().getResourceAsStream(path)); + assertNotNull("Expecting stream to be found:" + filename, s); + InputStream originalStream = null; + try { + assertEquals(expectedType, contentAwaremimeTypeService.getMimeType(filename, s)); + originalStream = getClass().getResourceAsStream(path); + assertNotNull("Expecting stream to be found:" + filename, originalStream); + if(expectSameContent) { + assertTrue("Expecting content to be unchanged", IOUtils.contentEquals(s, originalStream)); + } else { + assertFalse("Expecting content to have changed", IOUtils.contentEquals(s, originalStream)); + } + } finally { + IOUtils.closeQuietly(s); + IOUtils.closeQuietly(originalStream); + } + } + + abstract InputStream wrapStream(InputStream toWrap); + } @Test public void detectFromExtension(){ @@ -50,36 +94,26 @@ public class ContentAwareMimeTypeServiceImplIT { @Test public void detectFromContent() throws IOException{ - final String filename = "this-is-actually-a-wav-file.mp3"; - final InputStream s = getClass().getResourceAsStream("/" + filename); - assertNotNull("Expecting stream to be found:" + filename, s); - try { - assertEquals("audio/x-wav", contentAwaremimeTypeService.getMimeType(filename, s)); - } finally { - if(s != null) { - s.close(); + new AssertDetect() { + @Override + InputStream wrapStream(InputStream toWrap) { + return new BufferedInputStream(toWrap); } - } + }.assertDetection("audio/x-wav", true); } - + @Test - @Ignore("OutOfMemoryError: PermGen space??") - public void testNoContentTampering() throws IOException{ - final String filename = "this-is-actually-a-wav-file.mp3"; - final InputStream s = new BufferedInputStream(getClass().getResourceAsStream("/" + filename)); - assertNotNull("Expecting stream to be found:" + filename, s); - try { - contentAwaremimeTypeService.getMimeType(filename, s); - assertTrue(IOUtils.contentEquals(s, - new BufferedInputStream(getClass().getResourceAsStream( - "/" + filename)))); - } finally { - if(s != null) { - s.close(); + public void detectFromContentWithNonMarkableStream() throws IOException{ + // Interestingly, with a non-markable stream the detector falls back to + // filename detection but still touches the content stream + new AssertDetect() { + @Override + InputStream wrapStream(InputStream toWrap) { + return new NonMarkableStream(toWrap); } - } + }.assertDetection("audio/mpeg", false); } - + @org.ops4j.pax.exam.Configuration public Option[] config() { return U.paxConfig(); diff --git a/src/test/java/org/apache/sling/commons/contentdetection/internal/it/U.java b/src/test/java/org/apache/sling/commons/contentdetection/internal/it/U.java index 901a3eb..d92cb46 100644 --- a/src/test/java/org/apache/sling/commons/contentdetection/internal/it/U.java +++ b/src/test/java/org/apache/sling/commons/contentdetection/internal/it/U.java @@ -18,7 +18,6 @@ package org.apache.sling.commons.contentdetection.internal.it; import java.io.File; -import java.util.Arrays; import org.apache.sling.paxexam.util.SlingPaxOptions; import org.ops4j.pax.exam.CoreOptions; @@ -33,12 +32,10 @@ public class U { public static Option[] paxConfig() { final File thisProjectsBundle = new File(System.getProperty( "bundle.file.name", "BUNDLE_FILE_NOT_SET" )); final String launchpadVersion = System.getProperty("sling.launchpad.version", "LAUNCHPAD_VERSION_NOT_SET"); - final String [] paxVmOptions = System.getProperty("pax.vm.options", "PAX_VM_OPTIONS_NOT_SET").split(","); - log.info("Sling launchpad version: {}, VM options: {}", launchpadVersion, Arrays.asList(paxVmOptions)); + log.info("Sling launchpad version: {}", launchpadVersion); return new DefaultCompositeOption( SlingPaxOptions.defaultLaunchpadOptions(launchpadVersion), - CoreOptions.provision(CoreOptions.bundle(thisProjectsBundle.toURI().toString())), - CoreOptions.vmOptions(paxVmOptions) + CoreOptions.provision(CoreOptions.bundle(thisProjectsBundle.toURI().toString())) ).getOptions(); } -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
