SLING-5306 : removing observation listener in stopVoting too, not only stopping it. plus more logging in stopVoting and resetRepo

git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1714778 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/test/java/org/apache/sling/discovery/impl/setup/FullJR2VirtualInstanceBuilder.java b/src/test/java/org/apache/sling/discovery/impl/setup/FullJR2VirtualInstanceBuilder.java
index 4390d1b..7f09a9e 100644
--- a/src/test/java/org/apache/sling/discovery/impl/setup/FullJR2VirtualInstanceBuilder.java
+++ b/src/test/java/org/apache/sling/discovery/impl/setup/FullJR2VirtualInstanceBuilder.java
@@ -21,6 +21,7 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
 
+import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.observation.Event;
 import javax.jcr.observation.ObservationManager;
@@ -41,9 +42,13 @@
 import org.apache.sling.discovery.impl.cluster.voting.VotingHandler;
 import org.apache.sling.discovery.impl.common.heartbeat.HeartbeatHandler;
 import org.apache.sling.discovery.impl.common.resource.EstablishedInstanceDescription;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class FullJR2VirtualInstanceBuilder extends VirtualInstanceBuilder {
 
+    protected final Logger logger = LoggerFactory.getLogger(getClass());
+
     private String path;
 
     private TestConfig config;
@@ -184,8 +189,21 @@
     
     void stopVoting() {
         if (observationListener!=null) {
+            logger.info("stopVoting: stopping voting of slingId="+getSlingId());
+            if (observationManager != null) {
+                logger.info("stop: removing listener for slingId="+getSlingId()+": "+observationListener);
+                try {
+                    observationManager.removeEventListener(observationListener);
+                } catch (RepositoryException e) {
+                    logger.error("stopVoting: could not remove listener for slingId="+getSlingId()+": "+observationListener+", "+e, e);
+                }
+            }
+            logger.info("stopVoting: stopping observation listener of slingId="+getSlingId());
             observationListener.stop();
             observationListener = null;
+            logger.info("stopVoting: stopped observation listener of slingId="+getSlingId());
+        } else {
+            logger.info("stopVoting: observation listener was null for slingId="+getSlingId());
         }
     }
 
@@ -245,15 +263,23 @@
     
     @Override
     protected void resetRepo() throws Exception {
+        logger.info("resetRepo: start, logging in");
         Session l = RepositoryProvider.instance().getRepository()
                 .loginAdministrative(null);
         try {
+            logger.info("resetRepo: removing '/var' ...");
             l.removeItem("/var");
+            logger.info("resetRepo: saving...");
             l.save();
+            logger.info("resetRepo: logging out...");
             l.logout();
+            logger.info("resetRepo: done.");
         } catch (Exception e) {
+            logger.error("resetRepo: Exception while trying to remove /var: "+e, e);
             l.refresh(false);
+            logger.info("resetRepo: logging out after exception");
             l.logout();
+            logger.info("resetRepo: done after exception");
         }
     }