Author: tallison
Date: Tue Apr 21 14:03:47 2015
New Revision: 1675121
URL: http://svn.apache.org/r1675121
Log:
TIKA-1501: Fix disabled OSGi related unit tests. Fixes from Bob Paulin.
Modified:
tika/trunk/tika-bundle/src/test/java/org/apache/tika/bundle/BundleIT.java
Modified:
tika/trunk/tika-bundle/src/test/java/org/apache/tika/bundle/BundleIT.java
URL:
http://svn.apache.org/viewvc/tika/trunk/tika-bundle/src/test/java/org/apache/tika/bundle/BundleIT.java?rev=1675121&r1=1675120&r2=1675121&view=diff
==============================================================================
--- tika/trunk/tika-bundle/src/test/java/org/apache/tika/bundle/BundleIT.java
(original)
+++ tika/trunk/tika-bundle/src/test/java/org/apache/tika/bundle/BundleIT.java
Tue Apr 21 14:03:47 2015
@@ -17,11 +17,12 @@
package org.apache.tika.bundle;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.ops4j.pax.exam.CoreOptions.*;
+import static org.ops4j.pax.exam.CoreOptions.bundle;
+import static org.ops4j.pax.exam.CoreOptions.junitBundles;
+import static org.ops4j.pax.exam.CoreOptions.options;
+import javax.inject.Inject;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
@@ -31,13 +32,9 @@ import java.io.StringWriter;
import java.io.Writer;
import java.net.URISyntaxException;
import java.util.HashSet;
-import java.util.List;
import java.util.Set;
-import javax.inject.Inject;
-
import org.apache.tika.Tika;
-import org.apache.tika.config.ServiceLoader;
import org.apache.tika.config.TikaConfig;
import org.apache.tika.detect.DefaultDetector;
import org.apache.tika.detect.Detector;
@@ -48,7 +45,6 @@ import org.apache.tika.parser.ParseConte
import org.apache.tika.parser.Parser;
import org.apache.tika.parser.internal.Activator;
import org.apache.tika.sax.BodyContentHandler;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.ops4j.pax.exam.Configuration;
@@ -58,6 +54,7 @@ import org.ops4j.pax.exam.spi.reactors.E
import org.ops4j.pax.exam.spi.reactors.PerMethod;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
import org.xml.sax.ContentHandler;
@RunWith(PaxExam.class)
@@ -131,7 +128,6 @@ public class BundleIT {
}
- @Ignore // TODO Fix this test
@Test
public void testBundleSimpleText() throws Exception {
Tika tika = new Tika();
@@ -142,33 +138,40 @@ public class BundleIT {
}
- @Ignore // TODO Fix this test
@Test
public void testBundleDetectors() throws Exception {
- // Get the raw detectors list
- // TODO Why is this not finding the detector service resource files?
- TestingServiceLoader loader = new TestingServiceLoader();
- List<String> rawDetectors =
loader.identifyStaticServiceProviders(Detector.class);
-
- // Check we did get a few, just in case...
- assertNotNull(rawDetectors);
- assertTrue("Should have several Detector names, found " +
rawDetectors.size(),
- rawDetectors.size() > 3);
+ //For some reason, the detector created by OSGi has a flat
+ //list of detectors, whereas the detector created by the traditional
+ //service loading method has children: DefaultDetector, MimeTypes.
+ //We have to flatten the service loaded DefaultDetector to get
equivalence.
+ //Detection behavior should all be the same.
// Get the classes found within OSGi
- DefaultDetector detector = new DefaultDetector();
+ ServiceReference<Detector> detectorRef =
bc.getServiceReference(Detector.class);
+ DefaultDetector detectorService =
(DefaultDetector)bc.getService(detectorRef);
+
Set<String> osgiDetectors = new HashSet<String>();
- for (Detector d : detector.getDetectors()) {
+ for (Detector d : detectorService.getDetectors()) {
osgiDetectors.add(d.getClass().getName());
}
- // Check that OSGi didn't miss any
- for (String detectorName : rawDetectors) {
- if (!osgiDetectors.contains(detectorName)) {
- fail("Detector " + detectorName
- + " not found within OSGi Detector list: " +
osgiDetectors);
+ // Check we did get a few, just in case...
+ assertTrue("Should have several Detector names, found " +
osgiDetectors.size(),
+ osgiDetectors.size() > 3);
+
+ // Get the raw detectors list from the traditional service loading
mechanism
+ DefaultDetector detector = new DefaultDetector();
+ Set<String> rawDetectors = new HashSet<String>();
+ for (Detector d : detector.getDetectors()) {
+ if (d instanceof DefaultDetector) {
+ for (Detector dChild : ((DefaultDetector)d).getDetectors()) {
+ rawDetectors.add(dChild.getClass().getName());
+ }
+ } else {
+ rawDetectors.add(d.getClass().getName());
}
}
+ assertEquals(osgiDetectors, rawDetectors);
}
@@ -180,7 +183,6 @@ public class BundleIT {
}
- @Ignore // TODO Fix this test
@Test
public void testTikaBundle() throws Exception {
Tika tika = new Tika();
@@ -220,19 +222,4 @@ public class BundleIT {
assertTrue(content.contains("testXML.xml"));
assertTrue(content.contains("Rida Benjelloun"));
}
-
- /**
- * Alternate ServiceLoader which works outside of OSGi, so we can compare
between the two environments
- */
- private static class TestingServiceLoader extends ServiceLoader {
-
- private TestingServiceLoader() {
- super();
- }
-
-
- public <T> List<String> identifyStaticServiceProviders(Class<T> iface)
{
- return super.identifyStaticServiceProviders(iface);
- }
- }
}