You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2013/09/19 16:39:56 UTC
svn commit: r1524756 - in
/sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it:
JackrabbitRepositoryIT.java ResourceEventListener.java
SlingRepositoryITBase.java
Author: bdelacretaz
Date: Thu Sep 19 14:39:56 2013
New Revision: 1524756
URL: http://svn.apache.org/r1524756
Log:
SLING-2788 - testOsgiResourceEvents added
Added:
sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it/ResourceEventListener.java
Modified:
sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it/JackrabbitRepositoryIT.java
sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it/SlingRepositoryITBase.java
Modified: sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it/JackrabbitRepositoryIT.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it/JackrabbitRepositoryIT.java?rev=1524756&r1=1524755&r2=1524756&view=diff
==============================================================================
--- sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it/JackrabbitRepositoryIT.java (original)
+++ sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it/JackrabbitRepositoryIT.java Thu Sep 19 14:39:56 2013
@@ -90,6 +90,7 @@ public class JackrabbitRepositoryIT exte
mavenBundle("org.apache.sling", "org.apache.sling.jcr.classloader", "3.1.12"),
mavenBundle("org.apache.sling", "org.apache.sling.jcr.contentloader", "2.1.2"),
mavenBundle("org.apache.sling", "org.apache.sling.engine", "2.2.6"),
+ mavenBundle("org.apache.sling", "org.apache.sling.event", "3.2.0"),
mavenBundle("org.apache.sling", "org.apache.sling.jcr.jcr-wrapper", "2.0.0"),
mavenBundle("org.apache.sling", "org.apache.sling.jcr.api", "2.1.0"),
Added: sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it/ResourceEventListener.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it/ResourceEventListener.java?rev=1524756&view=auto
==============================================================================
--- sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it/ResourceEventListener.java (added)
+++ sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it/ResourceEventListener.java Thu Sep 19 14:39:56 2013
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The SF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package org.apache.sling.jcr.repository.it;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Set;
+
+import org.apache.sling.api.SlingConstants;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.event.Event;
+import org.osgi.service.event.EventConstants;
+import org.osgi.service.event.EventHandler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ResourceEventListener implements EventHandler {
+
+ private final Logger log = LoggerFactory.getLogger(getClass());
+ private final Set<String> paths = new HashSet<String>();
+
+ ServiceRegistration register(BundleContext ctx) {
+ final Hashtable<String, Object> props = new Hashtable<String, Object>();
+ props.put(EventConstants.EVENT_TOPIC, SlingConstants.TOPIC_RESOURCE_ADDED);
+ return ctx.registerService(EventHandler.class.getName(), this, props);
+ }
+
+ @Override
+ public void handleEvent(Event event) {
+ final String path = (String) event.getProperty("path");
+ if(path != null) {
+ if(paths.isEmpty()) {
+ log.info("Got first event, path={}", path);
+ }
+ synchronized (paths) {
+ paths.add(path);
+ }
+ }
+ }
+
+ void clear() {
+ synchronized (paths) {
+ paths.clear();
+ }
+ }
+
+ Set<String> getPaths() {
+ synchronized (paths) {
+ return Collections.unmodifiableSet(paths);
+ }
+ }
+}
\ No newline at end of file
Modified: sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it/SlingRepositoryITBase.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it/SlingRepositoryITBase.java?rev=1524756&r1=1524755&r2=1524756&view=diff
==============================================================================
--- sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it/SlingRepositoryITBase.java (original)
+++ sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it/SlingRepositoryITBase.java Thu Sep 19 14:39:56 2013
@@ -22,8 +22,10 @@ import static org.junit.Assert.assertNot
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
+import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
import javax.inject.Inject;
@@ -41,6 +43,10 @@ import org.apache.sling.jcr.api.SlingRep
import org.junit.After;
import org.junit.Ignore;
import org.junit.Test;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/** Base class for SlingRepository tests, contains tests
* that apply to all implementations.
@@ -51,11 +57,15 @@ import org.junit.Test;
*/
public abstract class SlingRepositoryITBase {
+ private final Logger log = LoggerFactory.getLogger(getClass());
private final AtomicInteger counter = new AtomicInteger();
@Inject
protected SlingRepository repository;
+ @Inject
+ protected BundleContext bundleContext;
+
/** Check some repository descriptors to make sure we're
* testing the expected implementation. */
protected abstract void doCheckRepositoryDescriptors();
@@ -256,7 +266,7 @@ public abstract class SlingRepositoryITB
@Test
public void testMultiValueInputStream() throws RepositoryException {
- Session s = repository.loginAdministrative(null);
+ final Session s = repository.loginAdministrative(null);
try {
final String path = getClass().getSimpleName() + System.currentTimeMillis();
final Node child = deleteAfterTests(s.getRootNode().addNode(path));
@@ -270,6 +280,49 @@ public abstract class SlingRepositoryITB
} finally {
s.logout();
}
-
+ }
+
+ @Test
+ public void testOsgiResourceEvents() throws RepositoryException {
+ final ResourceEventListener listener = new ResourceEventListener();
+ final ServiceRegistration reg = listener.register(bundleContext);
+ final Session s = repository.loginAdministrative(null);
+ final int nPaths = 500;
+ final int timeoutMsec = 5000;
+ final String prefix = "testOsgiResourceEvents_" + counter.incrementAndGet() + "_";
+
+ try {
+ for(int i=0; i < nPaths; i++) {
+ s.getRootNode().addNode(prefix + i);
+ }
+ s.save();
+
+ log.info("Added {} nodes, checking what ResourceEventListener got...", nPaths);
+ final long timeout = System.currentTimeMillis() + timeoutMsec;
+ final Set<String> missing = new HashSet<String>();
+ while(System.currentTimeMillis() < timeout) {
+ missing.clear();
+ final Set<String> paths = listener.getPaths();
+ for(int i=0; i < nPaths; i++) {
+ final String path = "/" + prefix + i;
+ if(!paths.contains(path)) {
+ missing.add(path);
+ }
+ }
+
+ if(missing.isEmpty()) {
+ break;
+ }
+ }
+
+ if(!missing.isEmpty()) {
+ fail("OSGi add resource events are missing for "
+ + missing.size() + "/" + nPaths + " paths after "
+ + timeoutMsec + " msec: " + missing);
+ }
+ } finally {
+ reg.unregister();
+ s.logout();
+ }
}
}
\ No newline at end of file