You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by st...@apache.org on 2013/04/24 09:52:10 UTC

svn commit: r1471279 - in /sling/trunk/contrib/extensions/discovery/impl/src: main/java/org/apache/sling/discovery/impl/topology/ main/java/org/apache/sling/discovery/impl/topology/announcement/ test/java/org/apache/sling/discovery/impl/setup/ test/jav...

Author: stefanegli
Date: Wed Apr 24 07:52:10 2013
New Revision: 1471279

URL: http://svn.apache.org/r1471279
Log:
SLING-2827 : announcement registry tests added

Modified:
    sling/trunk/contrib/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/topology/TopologyChangeHandler.java
    sling/trunk/contrib/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/topology/announcement/Announcement.java
    sling/trunk/contrib/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/topology/announcement/AnnouncementRegistryImpl.java
    sling/trunk/contrib/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/setup/MockedResourceResolver.java
    sling/trunk/contrib/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/topology/announcement/TopologyAnnouncementRegistryTest.java

Modified: sling/trunk/contrib/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/topology/TopologyChangeHandler.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/topology/TopologyChangeHandler.java?rev=1471279&r1=1471278&r2=1471279&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/topology/TopologyChangeHandler.java (original)
+++ sling/trunk/contrib/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/topology/TopologyChangeHandler.java Wed Apr 24 07:52:10 2013
@@ -86,6 +86,9 @@ public class TopologyChangeHandler imple
      */
     public void handleEvent(final Event event) {
         final String resourcePath = (String) event.getProperty("path");
+        if (config==null) {
+            return;
+        }
         final String establishedViewPath = config.getEstablishedViewPath();
         final String clusterInstancesPath = config.getClusterInstancesPath();
         if (resourcePath == null) {

Modified: sling/trunk/contrib/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/topology/announcement/Announcement.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/topology/announcement/Announcement.java?rev=1471279&r1=1471278&r2=1471279&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/topology/announcement/Announcement.java (original)
+++ sling/trunk/contrib/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/topology/announcement/Announcement.java Wed Apr 24 07:52:10 2013
@@ -100,6 +100,25 @@ public class Announcement {
                 ", originInfo="+getOriginInfo()+
                 ", incomings="+incomingList+"]";
     }
+    
+    /** check whether this is a valid announcement, containing the minimal information **/
+    public boolean isValid() {
+        if (ownerId==null || ownerId.length()==0) {
+            return false;
+        }
+        if (localCluster==null) {
+            return false;
+        }
+        try{
+            List<InstanceDescription> instances = localCluster.getInstances();
+            if (instances==null || instances.size()==0) {
+                return false;
+            }
+        } catch(Exception ise) {
+            return false;
+        }
+        return true;
+    }
 
     /** set the inherited flag - if true this means this announcement is the response of a topology connect **/
     public void setInherited(final boolean inherited) {

Modified: sling/trunk/contrib/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/topology/announcement/AnnouncementRegistryImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/topology/announcement/AnnouncementRegistryImpl.java?rev=1471279&r1=1471278&r2=1471279&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/topology/announcement/AnnouncementRegistryImpl.java (original)
+++ sling/trunk/contrib/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/topology/announcement/AnnouncementRegistryImpl.java Wed Apr 24 07:52:10 2013
@@ -186,6 +186,13 @@ public class AnnouncementRegistryImpl im
     }
 
     public boolean registerAnnouncement(final Announcement topologyAnnouncement) {
+        if (topologyAnnouncement==null) {
+            throw new IllegalArgumentException("topologyAnnouncement must not be null");
+        }
+        if (!topologyAnnouncement.isValid()) {
+            logger.warn("topologyAnnouncement is not valid");
+            return false;
+        }
         if (resourceResolverFactory == null) {
             logger.error("registerAnnouncement: resourceResolverFactory is null");
             return false;

Modified: sling/trunk/contrib/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/setup/MockedResourceResolver.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/setup/MockedResourceResolver.java?rev=1471279&r1=1471278&r2=1471279&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/setup/MockedResourceResolver.java (original)
+++ sling/trunk/contrib/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/setup/MockedResourceResolver.java Wed Apr 24 07:52:10 2013
@@ -23,12 +23,16 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 
+import javax.jcr.AccessDeniedException;
 import javax.jcr.Node;
 import javax.jcr.NodeIterator;
 import javax.jcr.PathNotFoundException;
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
+import javax.jcr.lock.LockException;
+import javax.jcr.nodetype.ConstraintViolationException;
+import javax.jcr.version.VersionException;
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.sling.api.resource.LoginException;
@@ -201,7 +205,17 @@ public class MockedResourceResolver impl
     }
 
     public void delete(Resource resource) throws PersistenceException {
-        throw new UnsupportedOperationException("Not implemented");
+        if (resources.contains(resource)) {
+            resources.remove(resource);
+            Node node = resource.adaptTo(Node.class);
+            try {
+                node.remove();
+            } catch (RepositoryException e) {
+                throw new PersistenceException("RepositoryException: "+e, e);
+            }
+        } else {
+            throw new UnsupportedOperationException("Not implemented");
+        }
     }
 
     public Resource create(Resource parent, String name,

Modified: sling/trunk/contrib/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/topology/announcement/TopologyAnnouncementRegistryTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/topology/announcement/TopologyAnnouncementRegistryTest.java?rev=1471279&r1=1471278&r2=1471279&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/topology/announcement/TopologyAnnouncementRegistryTest.java (original)
+++ sling/trunk/contrib/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/topology/announcement/TopologyAnnouncementRegistryTest.java Wed Apr 24 07:52:10 2013
@@ -18,7 +18,23 @@
  */
 package org.apache.sling.discovery.impl.topology.announcement;
 
-import org.apache.sling.discovery.impl.topology.announcement.AnnouncementRegistryImpl;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.util.UUID;
+
+import javax.jcr.Session;
+
+import org.apache.sling.api.resource.ResourceResolverFactory;
+import org.apache.sling.commons.testing.jcr.RepositoryProvider;
+import org.apache.sling.discovery.impl.Config;
+import org.apache.sling.discovery.impl.common.DefaultClusterViewImpl;
+import org.apache.sling.discovery.impl.common.DefaultInstanceDescriptionImpl;
+import org.apache.sling.discovery.impl.setup.MockFactory;
+import org.apache.sling.discovery.impl.setup.OSGiFactory;
+import org.apache.sling.discovery.impl.topology.TopologyTestHelper;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -28,11 +44,79 @@ public class TopologyAnnouncementRegistr
 
     @Before
     public void setup() throws Exception {
-        registry = new AnnouncementRegistryImpl();
+        final ResourceResolverFactory resourceResolverFactory = MockFactory
+                .mockResourceResolverFactory();
+        final Config config = new Config() {
+            public long getHeartbeatTimeout() {
+                // 1s for fast tests
+                return 1;
+            };
+        };
+        final String slingId = UUID.randomUUID().toString();
+        Session l = RepositoryProvider.instance().getRepository()
+                .loginAdministrative(null);
+        try {
+            l.removeItem("/var");
+            l.save();
+            l.logout();
+        } catch (Exception e) {
+            l.refresh(false);
+            l.logout();
+        }
+        registry = (AnnouncementRegistryImpl) OSGiFactory.createITopologyAnnouncementRegistry(
+                resourceResolverFactory, config, slingId);
     }
 
     @Test
-    public void test() throws Exception {
-
+    public void testRegisterUnregister() throws Exception {
+        try{
+            registry.registerAnnouncement(null);
+            fail("should complain");
+        } catch(IllegalArgumentException iae) {
+            // ok
+        }
+        
+        try{
+            new Announcement(null);
+            fail("should complain");
+        } catch(IllegalArgumentException iae) {
+            // ok
+        }
+        try{
+            new Announcement("");
+            fail("should complain"); 
+        } catch(IllegalArgumentException iae) {
+            // ok
+        }
+        
+        Announcement ann = new Announcement("foo");
+        assertFalse(ann.isValid());
+        assertFalse(registry.registerAnnouncement(ann));
+        
+        DefaultClusterViewImpl localCluster = new DefaultClusterViewImpl(UUID.randomUUID().toString());
+        ann.setLocalCluster(localCluster);
+        assertFalse(ann.isValid());
+        assertFalse(registry.registerAnnouncement(ann));
+
+        assertEquals(0, registry.listInstances().size());
+        
+        DefaultInstanceDescriptionImpl instance = TopologyTestHelper.createInstanceDescription(localCluster);
+        assertTrue(ann.isValid());
+        assertTrue(registry.registerAnnouncement(ann));
+        
+        assertEquals(1, registry.listInstances().size());
+        
+        registry.checkExpiredAnnouncements();
+        assertEquals(1, registry.listInstances().size());
+        
+        registry.unregisterAnnouncement(ann.getOwnerId());
+        assertEquals(0, registry.listInstances().size());
+        assertTrue(ann.isValid());
+        assertTrue(registry.registerAnnouncement(ann));
+        assertEquals(1, registry.listInstances().size());
+
+        Thread.sleep(1500);
+        assertEquals(0, registry.listInstances().size());
+    
     }
 }