You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2015/05/17 12:25:11 UTC

svn commit: r1679835 - in /felix/trunk/http/base/src: main/java/org/apache/felix/http/base/internal/registry/ServletRegistry.java test/java/org/apache/felix/http/base/internal/registry/ServletRegistryTest.java

Author: cziegeler
Date: Sun May 17 10:25:10 2015
New Revision: 1679835

URL: http://svn.apache.org/r1679835
Log:
FELIX-4888 : ServletHandler's are not sorted by longest matching path. Implement new servlet registry, start filter holder implementation

Modified:
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/registry/ServletRegistry.java
    felix/trunk/http/base/src/test/java/org/apache/felix/http/base/internal/registry/ServletRegistryTest.java

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/registry/ServletRegistry.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/registry/ServletRegistry.java?rev=1679835&r1=1679834&r2=1679835&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/registry/ServletRegistry.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/registry/ServletRegistry.java Sun May 17 10:25:10 2015
@@ -185,7 +185,7 @@ public final class ServletRegistry
         List<ServletHolder> inactiveList = this.inactivateServletMapping.get(pattern);
         if ( inactiveList == null )
         {
-            inactiveList = new ArrayList<ServletHolder>(inactiveList);
+            inactiveList = new ArrayList<ServletHolder>();
             this.inactivateServletMapping.put(pattern, inactiveList);
         }
         inactiveList.add(holder);

Modified: felix/trunk/http/base/src/test/java/org/apache/felix/http/base/internal/registry/ServletRegistryTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/test/java/org/apache/felix/http/base/internal/registry/ServletRegistryTest.java?rev=1679835&r1=1679834&r2=1679835&view=diff
==============================================================================
--- felix/trunk/http/base/src/test/java/org/apache/felix/http/base/internal/registry/ServletRegistryTest.java (original)
+++ felix/trunk/http/base/src/test/java/org/apache/felix/http/base/internal/registry/ServletRegistryTest.java Sun May 17 10:25:10 2015
@@ -36,6 +36,7 @@ import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceReference;
+import org.osgi.service.http.runtime.dto.DTOConstants;
 import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
 
 public class ServletRegistryTest {
@@ -64,6 +65,50 @@ public class ServletRegistryTest {
 
         // empty again
         assertEquals(0, status.size());
+    }
+
+    @Test public void testSimpleHiding() throws InvalidSyntaxException
+    {
+        final Map<ServletInfo, ServletRegistry.ServletRegistrationStatus> status = reg.getServletStatusMapping();
+        // empty reg
+        assertEquals(0, status.size());
+
+        // register servlets
+        final ServletHolder h1 = createServletHolder(1L, 10, "/foo");
+        reg.addServlet(h1);
+
+        final ServletHolder h2 = createServletHolder(2L, 0, "/foo");
+        reg.addServlet(h2);
+
+        // two entries in reg
+        assertEquals(2, status.size());
+        assertNotNull(status.get(h1.getServletInfo()));
+        assertNotNull(status.get(h2.getServletInfo()));
+
+        // h1 is active
+        assertNotNull(status.get(h1.getServletInfo()).pathToStatus.get("/foo"));
+        final int code1 = status.get(h1.getServletInfo()).pathToStatus.get("/foo");
+        assertEquals(-1, code1);
+
+        // h2 is hidden
+        assertNotNull(status.get(h2.getServletInfo()).pathToStatus.get("/foo"));
+        final int code2 = status.get(h2.getServletInfo()).pathToStatus.get("/foo");
+        assertEquals(DTOConstants.FAILURE_REASON_SHADOWED_BY_OTHER_SERVICE, code2);
+
+        // remove servlet 1
+        reg.removeServlet(h1.getServletInfo());
+
+        // h2 is active
+        assertEquals(1, status.size());
+        assertNotNull(status.get(h2.getServletInfo()).pathToStatus.get("/foo"));
+        final int code3 = status.get(h2.getServletInfo()).pathToStatus.get("/foo");
+        assertEquals(-1, code3);
+
+        // remove servlet 2
+        reg.removeServlet(h2.getServletInfo());
+
+        // empty again
+        assertEquals(0, status.size());
     }
 
     private static ServletInfo createServletInfo(final long id, final int ranking, final String... paths) throws InvalidSyntaxException