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());
+
}
}