You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 09:27:30 UTC
[sling-org-apache-sling-discovery-commons] 02/04: SLING-5231 :
remove getAdministrativeResourceResolver from discovery components : merged
patches from Carsten
This is an automated email from the ASF dual-hosted git repository.
rombert pushed a commit to annotated tag org.apache.sling.discovery.commons-1.0.18
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-discovery-commons.git
commit cc9361e9d9aaeba819f57b01f88cb0d58d553d68
Author: Stefan Egli <st...@apache.org>
AuthorDate: Tue Nov 15 12:38:35 2016 +0000
SLING-5231 : remove getAdministrativeResourceResolver from discovery components : merged patches from Carsten
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/extensions/discovery/commons@1769802 13f79535-47bb-0310-9956-ffa450edef68
---
.../commons/providers/spi/base/IdMapService.java | 33 +++++----
.../spi/base/OakBacklogClusterSyncService.java | 46 ++++++------
.../providers/spi/base/SyncTokenService.java | 26 +++----
.../commons/providers/base/TestHelper.java | 6 +-
.../providers/base/TestMinEventDelayHandler.java | 32 ++++-----
.../providers/base/TestViewStateManager.java | 83 +++++++++++-----------
.../providers/spi/base/DescriptorHelper.java | 9 ++-
.../providers/spi/base/MockedResourceResolver.java | 38 +++++++++-
.../providers/spi/base/RepositoryTestHelper.java | 14 ++--
9 files changed, 160 insertions(+), 127 deletions(-)
diff --git a/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/IdMapService.java b/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/IdMapService.java
index e171738..4f1dbfb 100644
--- a/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/IdMapService.java
+++ b/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/IdMapService.java
@@ -48,7 +48,6 @@ import org.apache.sling.settings.SlingSettingsService;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
import org.osgi.framework.ServiceRegistration;
-import org.osgi.service.event.Event;
/**
* The IdMapService is responsible for storing a slingId-clusterNodeId
@@ -67,9 +66,9 @@ public class IdMapService extends AbstractServiceWithBackgroundCheck implements
@Reference
private DiscoveryLiteConfig commonsConfig;
-
+
private boolean initialized = false;
-
+
private String slingId;
private long me;
@@ -100,9 +99,9 @@ public class IdMapService extends AbstractServiceWithBackgroundCheck implements
protected void activate(BundleContext bundleContext) {
this.bundleContext = bundleContext;
registerEventHandler();
-
+
startBackgroundCheck("IdMapService-initializer", new BackgroundCheck() {
-
+
@Override
public boolean check() {
try {
@@ -114,7 +113,7 @@ public class IdMapService extends AbstractServiceWithBackgroundCheck implements
}
}, null, -1, 1000 /* = 1sec interval */);
}
-
+
@Deactivate
protected void deactivate() {
if (eventHandlerRegistration != null) {
@@ -124,7 +123,7 @@ public class IdMapService extends AbstractServiceWithBackgroundCheck implements
// SLING-5592: cancel the potentially running background thread
cancelPreviousBackgroundCheck();
}
-
+
private void registerEventHandler() {
if (bundleContext == null) {
logger.info("registerEventHandler: bundleContext is null - cannot register");
@@ -146,16 +145,16 @@ public class IdMapService extends AbstractServiceWithBackgroundCheck implements
/** Get or create a ResourceResolver **/
private ResourceResolver getResourceResolver() throws LoginException {
- return resourceResolverFactory.getAdministrativeResourceResolver(null);
+ return resourceResolverFactory.getServiceResourceResolver(null);
}
-
+
public synchronized long getMyId() {
if (!initialized) {
return -1;
}
return me;
}
-
+
/** for testing only **/
public synchronized boolean waitForInit(long timeout) {
long start = System.currentTimeMillis();
@@ -176,7 +175,7 @@ public class IdMapService extends AbstractServiceWithBackgroundCheck implements
}
return initialized;
}
-
+
public synchronized boolean isInitialized() {
return initialized;
}
@@ -189,7 +188,7 @@ public class IdMapService extends AbstractServiceWithBackgroundCheck implements
ResourceResolver resourceResolver = null;
try{
resourceResolver = getResourceResolver();
- DiscoveryLiteDescriptor descriptor =
+ DiscoveryLiteDescriptor descriptor =
DiscoveryLiteDescriptor.getDescriptorFrom(resourceResolver);
long me = descriptor.getMyId();
final Resource resource = ResourceHelper.getOrCreateResource(resourceResolver, getIdMapPath());
@@ -242,9 +241,9 @@ public class IdMapService extends AbstractServiceWithBackgroundCheck implements
resourceResolver.close();
}
}
-
+
}
-
+
public synchronized void clearCache() {
if (!idMapCache.isEmpty()) {
logger.debug("clearCache: clearing idmap cache");
@@ -265,7 +264,7 @@ public class IdMapService extends AbstractServiceWithBackgroundCheck implements
// force a cache invalidation).
// we can either rely on observation - or combine that with
// an invalidation of once per minute
- // (note that this means we'll be reading
+ // (note that this means we'll be reading
// /var/discovery/oak/idMap once per minute - but that sounds
// perfectly fine)
clearCache();
@@ -294,10 +293,10 @@ public class IdMapService extends AbstractServiceWithBackgroundCheck implements
logger.info("toSlingId: mapping for "+oldEntry.getKey()+" to "+oldEntry.getValue()+" disappeared.");
}
}
-
+
return idMapCache.get(clusterNodeId);
}
-
+
private Map<Integer, String> readIdMap(ResourceResolver resourceResolver) throws PersistenceException {
Resource resource = ResourceHelper.getOrCreateResource(resourceResolver, getIdMapPath());
ValueMap idmapValueMap = resource.adaptTo(ValueMap.class);
diff --git a/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/OakBacklogClusterSyncService.java b/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/OakBacklogClusterSyncService.java
index 8fbe1cb..be76048 100644
--- a/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/OakBacklogClusterSyncService.java
+++ b/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/OakBacklogClusterSyncService.java
@@ -50,10 +50,10 @@ public class OakBacklogClusterSyncService extends AbstractServiceWithBackgroundC
HAS_BACKLOG /* when oak's discovery lite descriptor indicated that there is still some backlog */,
NO_BACKLOG /* when oak's discovery lite descriptor declared we're backlog-free now */
}
-
+
@Reference
private IdMapService idMapService;
-
+
@Reference
protected DiscoveryLiteConfig commonsConfig;
@@ -64,7 +64,7 @@ public class OakBacklogClusterSyncService extends AbstractServiceWithBackgroundC
protected SlingSettingsService settingsService;
private ClusterSyncHistory consistencyHistory = new ClusterSyncHistory();
-
+
public static OakBacklogClusterSyncService testConstructorAndActivate(
final DiscoveryLiteConfig commonsConfig,
final IdMapService idMapService,
@@ -74,7 +74,7 @@ public class OakBacklogClusterSyncService extends AbstractServiceWithBackgroundC
service.activate();
return service;
}
-
+
/**
* for testing only!
* @param resourceResolverFactory
@@ -82,7 +82,7 @@ public class OakBacklogClusterSyncService extends AbstractServiceWithBackgroundC
* @param syncTokenTimeoutMillis timeout value in millis after which the
* sync-token process is cancelled - or -1 if no timeout should be used there
* @param backlogWaitTimeoutMillis timeout value in millis after which
- * the waiting-while-backlog should be cancelled - or -1 if no timeout should be
+ * the waiting-while-backlog should be cancelled - or -1 if no timeout should be
* used there
* @throws LoginException when the login for initialization failed
* @throws JSONException when the descriptor wasn't proper json at init time
@@ -108,26 +108,26 @@ public class OakBacklogClusterSyncService extends AbstractServiceWithBackgroundC
service.settingsService = settingsService;
return service;
}
-
+
@Activate
protected void activate() {
this.slingId = getSettingsService().getSlingId();
logger.info("activate: activated with slingId="+slingId);
}
-
+
public void setConsistencyHistory(ClusterSyncHistory consistencyHistory) {
this.consistencyHistory = consistencyHistory;
}
-
+
public ClusterSyncHistory getConsistencyHistory() {
return consistencyHistory;
}
-
+
/** Get or create a ResourceResolver **/
protected ResourceResolver getResourceResolver() throws LoginException {
- return resourceResolverFactory.getAdministrativeResourceResolver(null);
+ return resourceResolverFactory.getServiceResourceResolver(null);
}
-
+
@Override
public void cancelSync() {
cancelPreviousBackgroundCheck();
@@ -144,10 +144,10 @@ public class OakBacklogClusterSyncService extends AbstractServiceWithBackgroundC
}
private void waitWhileBacklog(final BaseTopologyView view, final Runnable runnable) {
- // start backgroundChecking until the backlogStatus
+ // start backgroundChecking until the backlogStatus
// is NO_BACKLOG
startBackgroundCheck("OakBacklogClusterSyncService-backlog-waiting", new BackgroundCheck() {
-
+
@Override
public boolean check() {
try {
@@ -176,37 +176,37 @@ public class OakBacklogClusterSyncService extends AbstractServiceWithBackgroundC
}
}, runnable, getCommonsConfig().getClusterSyncServiceTimeoutMillis(), getCommonsConfig().getClusterSyncServiceIntervalMillis());
}
-
+
private BacklogStatus getBacklogStatus(BaseTopologyView view) {
logger.trace("getBacklogStatus: start");
ResourceResolver resourceResolver = null;
try{
resourceResolver = getResourceResolver();
- DiscoveryLiteDescriptor descriptor =
+ DiscoveryLiteDescriptor descriptor =
DiscoveryLiteDescriptor.getDescriptorFrom(resourceResolver);
// backlog-free means:
- // 1) 'deactivating' must be empty
+ // 1) 'deactivating' must be empty
// (otherwise we indeed have a backlog)
// 2) all active ids of the descriptor must have a mapping to slingIds
// (otherwise the init failed or is pending for some instance(s))
- // 3) all 'active' instances must be in the view
- // (otherwise discovery lite might not yet consider
+ // 3) all 'active' instances must be in the view
+ // (otherwise discovery lite might not yet consider
// an instance dead but discovery-service does)
// instead what is fine from a backlog point of view
// * instances in the view but listed as 'inactive'
// (this might be the case for just-started instances)
// * instances in the view but not contained in the descriptor at all
// (this might be the case for just-started instances)
-
+
int[] activeIds = descriptor.getActiveIds();
int[] deactivatingIds = descriptor.getDeactivatingIds();
// we're not worried about 'inactive' ones - as that could
// be a larger list filled with legacy entries too
- // plus once the instance is inactive there's no need to
+ // plus once the instance is inactive there's no need to
// check anything further - that one is then backlog-free
-
- // 1) 'deactivating' must be empty
+
+ // 1) 'deactivating' must be empty
if (deactivatingIds.length!=0) {
logger.info("getBacklogStatus: there are deactivating instances: "+Arrays.toString(deactivatingIds));
return BacklogStatus.HAS_BACKLOG;
@@ -217,7 +217,7 @@ public class OakBacklogClusterSyncService extends AbstractServiceWithBackgroundC
for (InstanceDescription instance : cluster.getInstances()) {
slingIds.add(instance.getSlingId());
}
-
+
for(int i=0; i<activeIds.length; i++) {
int activeId = activeIds[i];
String slingId = idMapService.toSlingId(activeId, resourceResolver);
diff --git a/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/SyncTokenService.java b/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/SyncTokenService.java
index 23ac970..dd57256 100644
--- a/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/SyncTokenService.java
+++ b/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/SyncTokenService.java
@@ -68,7 +68,7 @@ public class SyncTokenService extends AbstractServiceWithBackgroundCheck impleme
service.activate();
return service;
}
-
+
public static SyncTokenService testConstructor(
DiscoveryLiteConfig commonsConfig,
ResourceResolverFactory resourceResolverFactory,
@@ -94,20 +94,20 @@ public class SyncTokenService extends AbstractServiceWithBackgroundCheck impleme
this.slingId = settingsService.getSlingId();
logger.info("activate: activated with slingId="+slingId);
}
-
+
public void setConsistencyHistory(ClusterSyncHistory consistencyHistory) {
this.clusterSyncHistory = consistencyHistory;
}
-
+
public ClusterSyncHistory getClusterSyncHistory() {
return clusterSyncHistory;
}
-
+
/** Get or create a ResourceResolver **/
protected ResourceResolver getResourceResolver() throws LoginException {
- return resourceResolverFactory.getAdministrativeResourceResolver(null);
+ return resourceResolverFactory.getServiceResourceResolver(null);
}
-
+
@Override
public void cancelSync() {
cancelPreviousBackgroundCheck();
@@ -124,9 +124,9 @@ public class SyncTokenService extends AbstractServiceWithBackgroundCheck impleme
}
protected void syncToken(final BaseTopologyView view, final Runnable callback) {
-
+
startBackgroundCheck("SyncTokenService", new BackgroundCheck() {
-
+
@Override
public boolean check() {
// 1) first storing my syncToken
@@ -134,12 +134,12 @@ public class SyncTokenService extends AbstractServiceWithBackgroundCheck impleme
if (!storeMySyncToken(localClusterSyncTokenId)) {
// if anything goes wrong above, then this will mean for the others
// that they will have to wait until the timeout hits
-
+
// so to try to avoid this, retry storing my sync token later:
clusterSyncHistory.addHistoryEntry(view, "storing my syncToken ("+localClusterSyncTokenId+")");
return false;
}
-
+
// 2) then check if all others have done the same already
return seenAllSyncTokens(view);
}
@@ -200,7 +200,7 @@ public class SyncTokenService extends AbstractServiceWithBackgroundCheck impleme
Resource resource = ResourceHelper.getOrCreateResource(resourceResolver, getSyncTokenPath());
ValueMap syncTokens = resource.adaptTo(ValueMap.class);
String syncToken = view.getLocalClusterSyncTokenId();
-
+
boolean success = true;
StringBuffer historyEntry = new StringBuffer();
for (InstanceDescription instance : view.getLocalInstance().getClusterView().getInstances()) {
@@ -232,7 +232,7 @@ public class SyncTokenService extends AbstractServiceWithBackgroundCheck impleme
} else {
clusterSyncHistory.addHistoryEntry(view, "seen all syncTokens");
}
-
+
resourceResolver.commit();
logger.info("seenAllSyncTokens: seen all syncTokens!");
return true;
@@ -249,5 +249,5 @@ public class SyncTokenService extends AbstractServiceWithBackgroundCheck impleme
}
}
}
-
+
}
diff --git a/src/test/java/org/apache/sling/discovery/commons/providers/base/TestHelper.java b/src/test/java/org/apache/sling/discovery/commons/providers/base/TestHelper.java
index 72ab0d2..a1f13b2 100644
--- a/src/test/java/org/apache/sling/discovery/commons/providers/base/TestHelper.java
+++ b/src/test/java/org/apache/sling/discovery/commons/providers/base/TestHelper.java
@@ -19,7 +19,6 @@
package org.apache.sling.discovery.commons.providers.base;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
@@ -33,7 +32,6 @@ import org.apache.sling.discovery.commons.providers.DefaultClusterView;
import org.apache.sling.discovery.commons.providers.DefaultInstanceDescription;
import org.apache.sling.discovery.commons.providers.DummyTopologyView;
import org.apache.sling.discovery.commons.providers.EventHelper;
-import org.apache.sling.discovery.commons.providers.base.ViewStateManagerImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -78,7 +76,7 @@ public class TestHelper {
if (!mgr.getAsyncEventSender().hasInFlightEvent()) {
return;
}
-
+
// sleep outside of synchronized to keep test-influence
// to a minimum
try {
@@ -96,7 +94,7 @@ public class TestHelper {
}
/** does couple loops randomly calling handleChanging() (or not) and then handleNewView().
- * Note: random is passed to allow customizing and not hardcoding this method to a particular random
+ * Note: random is passed to allow customizing and not hardcoding this method to a particular random
* @throws InterruptedException **/
public static void randomEventLoop(ViewStateManagerImpl mgr, DummyDiscoveryService sds, int loopSize, int delayInMillis, final Random random, DummyListener... listeners) throws InterruptedException {
for(int i=0; i<loopSize; i++) {
diff --git a/src/test/java/org/apache/sling/discovery/commons/providers/base/TestMinEventDelayHandler.java b/src/test/java/org/apache/sling/discovery/commons/providers/base/TestMinEventDelayHandler.java
index eabc85f..e09aaf6 100644
--- a/src/test/java/org/apache/sling/discovery/commons/providers/base/TestMinEventDelayHandler.java
+++ b/src/test/java/org/apache/sling/discovery/commons/providers/base/TestMinEventDelayHandler.java
@@ -28,7 +28,7 @@ import java.util.UUID;
import java.util.concurrent.locks.ReentrantLock;
import org.apache.log4j.Level;
-import org.apache.log4j.LogManager;
+import org.apache.log4j.spi.RootLogger;
import org.apache.sling.commons.testing.junit.categories.Slow;
import org.apache.sling.discovery.commons.providers.BaseTopologyView;
import org.apache.sling.discovery.commons.providers.DefaultClusterView;
@@ -38,7 +38,6 @@ import org.apache.sling.discovery.commons.providers.base.ViewStateManagerImpl;
import org.apache.sling.discovery.commons.providers.spi.ClusterSyncService;
import org.junit.After;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.slf4j.Logger;
@@ -49,9 +48,9 @@ public class TestMinEventDelayHandler {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private ViewStateManagerImpl mgr;
-
+
private Random defaultRandom;
-
+
private DummyDiscoveryService sds;
private Level logLevel;
@@ -61,11 +60,12 @@ public class TestMinEventDelayHandler {
@Before
public void setup() throws Exception {
mgr = new ViewStateManagerImpl(new ReentrantLock(), new ClusterSyncService() {
-
+
+ @Override
public void sync(BaseTopologyView view, Runnable callback) {
callback.run();
}
-
+
@Override
public void cancelSync() {
// nothing to cancel, we're auto-run
@@ -77,7 +77,7 @@ public class TestMinEventDelayHandler {
sds = new DummyDiscoveryService();
mgr.installMinEventDelayHandler(sds, scheduler, 1);
- final org.apache.log4j.Logger discoveryLogger = LogManager.getRootLogger().getLogger("org.apache.sling.discovery");
+ final org.apache.log4j.Logger discoveryLogger = RootLogger.getLogger("org.apache.sling.discovery");
logLevel = discoveryLogger.getLevel();
discoveryLogger.setLevel(Level.INFO); // changed from Level.DEBUG
}
@@ -86,7 +86,7 @@ public class TestMinEventDelayHandler {
public void teardown() throws Exception {
mgr = null;
defaultRandom= null;
- final org.apache.log4j.Logger discoveryLogger = LogManager.getRootLogger().getLogger("org.apache.sling.discovery");
+ final org.apache.log4j.Logger discoveryLogger = RootLogger.getLogger("org.apache.sling.discovery");
discoveryLogger.setLevel(logLevel);
}
@@ -103,9 +103,9 @@ public class TestMinEventDelayHandler {
mgr.handleActivated();
TestHelper.assertNoEvents(listener);
final DummyTopologyView view1 = new DummyTopologyView().addInstance();
- final DummyTopologyView view2 = DummyTopologyView.clone(view1).addInstance(UUID.randomUUID().toString(),
+ final DummyTopologyView view2 = DummyTopologyView.clone(view1).addInstance(UUID.randomUUID().toString(),
(DefaultClusterView) view1.getLocalInstance().getClusterView(), false, false);
- final DummyTopologyView view3 = DummyTopologyView.clone(view1).addInstance(UUID.randomUUID().toString(),
+ final DummyTopologyView view3 = DummyTopologyView.clone(view1).addInstance(UUID.randomUUID().toString(),
(DefaultClusterView) view1.getLocalInstance().getClusterView(), false, false);
logger.info("testReactivate: calling handleNewView...");
mgr.handleNewView(view1);
@@ -125,7 +125,7 @@ public class TestMinEventDelayHandler {
assertEquals(0, mgr.waitForAsyncEvents(2000));
logger.info("testReactivate: asserting CHANGED event");
TestHelper.assertEvents(mgr, listener, EventHelper.newChangedEvent(view1, view2));
-
+
// now do the above again, but this time do a handleDeactivated before receiving another changed event
logger.info("testReactivate: calling handleChanging...");
mgr.handleChanging();
@@ -135,21 +135,21 @@ public class TestMinEventDelayHandler {
TestHelper.assertNoEvents(listener);
// make sure the MinEventDelayHandler finds a topology when coming back from the delaying, so:
sds.setTopoology(view3);
-
+
logger.info("testReactivate: doing handleDeactivated");
final AsyncEventSender asyncEventSender = mgr.getAsyncEventSender();
Field field = mgr.getClass().getDeclaredField("minEventDelayHandler");
field.setAccessible(true);
MinEventDelayHandler minEventDelayHandler = (MinEventDelayHandler) field.get(mgr);
assertNotNull(minEventDelayHandler);
-
+
// marking view3 as not current
view3.setNotCurrent();
sds.setTopoology(view3);
-
+
mgr.handleDeactivated();
TestHelper.assertNoEvents(listener);
-
+
logger.info("testReactivate: now waiting 5 sec to make sure the MinEventDelayHandler would be finished");
TestHelper.assertNoEvents(listener);
Thread.sleep(5000);
@@ -214,7 +214,7 @@ public class TestMinEventDelayHandler {
Thread.sleep(1000);
}
}
-
+
@Test
public void testLongMinDelay() throws Exception {
mgr.installMinEventDelayHandler(sds, scheduler, 5);
diff --git a/src/test/java/org/apache/sling/discovery/commons/providers/base/TestViewStateManager.java b/src/test/java/org/apache/sling/discovery/commons/providers/base/TestViewStateManager.java
index 34cfa93..3b29202 100644
--- a/src/test/java/org/apache/sling/discovery/commons/providers/base/TestViewStateManager.java
+++ b/src/test/java/org/apache/sling/discovery/commons/providers/base/TestViewStateManager.java
@@ -31,8 +31,7 @@ import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import org.apache.log4j.Level;
-import org.apache.log4j.LogManager;
-import org.apache.sling.commons.testing.junit.categories.Slow;
+import org.apache.log4j.spi.RootLogger;
import org.apache.sling.discovery.ClusterView;
import org.apache.sling.discovery.DiscoveryService;
import org.apache.sling.discovery.InstanceDescription;
@@ -47,7 +46,6 @@ import org.apache.sling.discovery.commons.providers.spi.ClusterSyncService;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
-import org.junit.experimental.categories.Category;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -64,7 +62,8 @@ public class TestViewStateManager {
this.lock = lock;
this.semaphore = semaphore;
}
-
+
+ @Override
public void sync(BaseTopologyView view, Runnable callback) {
try {
lock.unlock();
@@ -97,22 +96,23 @@ public class TestViewStateManager {
@Before
public void setup() throws Exception {
mgr = new ViewStateManagerImpl(new ReentrantLock(), new ClusterSyncService() {
-
+
+ @Override
public void sync(BaseTopologyView view, Runnable callback) {
callback.run();
}
-
+
@Override
public void cancelSync() {
// nothing to cancel, we're auto-run
}
});
defaultRandom = new Random(1234123412); // I want randomness yes, but deterministic, for some methods at least
- final org.apache.log4j.Logger discoveryLogger = LogManager.getRootLogger().getLogger("org.apache.sling.discovery");
+ final org.apache.log4j.Logger discoveryLogger = RootLogger.getLogger("org.apache.sling.discovery");
logLevel = discoveryLogger.getLevel();
discoveryLogger.setLevel(Level.INFO);
}
-
+
@After
public void teardown() throws Exception {
if (mgr != null) {
@@ -121,7 +121,7 @@ public class TestViewStateManager {
}
mgr = null;
defaultRandom= null;
- final org.apache.log4j.Logger discoveryLogger = LogManager.getRootLogger().getLogger("org.apache.sling.discovery");
+ final org.apache.log4j.Logger discoveryLogger = RootLogger.getLogger("org.apache.sling.discovery");
discoveryLogger.setLevel(logLevel);
}
@@ -172,7 +172,7 @@ public class TestViewStateManager {
mgr.bind(listener); // we should be generous and allow duplicate registration
assertTrue(mgr.unbind(listener));
assertFalse(mgr.unbind(listener));
-
+
mgr.handleActivated();
assertFalse(mgr.unbind(listener));
mgr.bind(listener);
@@ -180,7 +180,7 @@ public class TestViewStateManager {
assertTrue(mgr.unbind(listener));
assertFalse(mgr.unbind(listener));
}
-
+
@Test
public void testBindActivateChangingChanged() throws Exception {
final DummyListener listener = new DummyListener();
@@ -195,7 +195,7 @@ public class TestViewStateManager {
assertEvents(listener, EventHelper.newInitEvent(view));
randomEventLoop(defaultRandom, listener);
}
-
+
@Test
public void testBindChangingActivateChanged() throws Exception {
final DummyListener listener = new DummyListener();
@@ -210,7 +210,7 @@ public class TestViewStateManager {
assertEvents(listener, EventHelper.newInitEvent(view));
randomEventLoop(defaultRandom, listener);
}
-
+
@Test
public void testBindChangingChangedActivate() throws Exception {
final DummyListener listener = new DummyListener();
@@ -225,7 +225,7 @@ public class TestViewStateManager {
assertEvents(listener, EventHelper.newInitEvent(view));
randomEventLoop(defaultRandom, listener);
}
-
+
@Test
public void testBindChangingChangedChangingActivate() throws Exception {
final DummyListener listener = new DummyListener();
@@ -245,7 +245,7 @@ public class TestViewStateManager {
assertEvents(listener, EventHelper.newInitEvent(view2));
randomEventLoop(defaultRandom, listener);
}
-
+
@Test
public void testBindChangedChangingActivate() throws Exception {
final DummyListener listener = new DummyListener();
@@ -263,18 +263,19 @@ public class TestViewStateManager {
assertEvents(listener, EventHelper.newInitEvent(view2));
randomEventLoop(defaultRandom, listener);
}
-
+
@Test
public void testCancelSync() throws Exception {
final List<Runnable> syncCallbacks = new LinkedList<Runnable>();
mgr = new ViewStateManagerImpl(new ReentrantLock(), new ClusterSyncService() {
-
+
+ @Override
public void sync(BaseTopologyView view, Runnable callback) {
synchronized(syncCallbacks) {
syncCallbacks.add(callback);
}
}
-
+
@Override
public void cancelSync() {
synchronized(syncCallbacks) {
@@ -295,7 +296,7 @@ public class TestViewStateManager {
}
String id1 = UUID.randomUUID().toString();
String id2 = UUID.randomUUID().toString();
- final BaseTopologyView view2 = TestHelper.newView(true, id1, id1, id1, id2);
+ final BaseTopologyView view2 = TestHelper.newView(true, id1, id1, id1, id2);
mgr.handleNewView(view2);
assertEquals(0, mgr.waitForAsyncEvents(1000));
TestHelper.assertNoEvents(listener);
@@ -307,7 +308,7 @@ public class TestViewStateManager {
assertEquals(0, mgr.waitForAsyncEvents(1000));
assertEvents(listener, EventHelper.newInitEvent(view2));
}
-
+
@Test
public void testActivateBindChangingChanged() throws Exception {
final DummyListener listener = new DummyListener();
@@ -332,7 +333,7 @@ public class TestViewStateManager {
mgr.bind(listener);
mgr.handleChanging();
DummyTopologyView oldView = new DummyTopologyView().addInstance();
- DefaultInstanceDescription localInstance =
+ DefaultInstanceDescription localInstance =
(DefaultInstanceDescription) oldView.getLocalInstance();
localInstance.setProperty("foo", "bar1");
mgr.handleNewView(oldView);
@@ -381,12 +382,12 @@ public class TestViewStateManager {
assertEvents(listener, EventHelper.newInitEvent(view));
randomEventLoop(defaultRandom, listener);
}
-
+
@Test
public void testBindActivateBindChangingChanged() throws Exception {
final DummyListener listener1 = new DummyListener();
final DummyListener listener2 = new DummyListener();
-
+
mgr.bind(listener1);
TestHelper.assertNoEvents(listener1);
mgr.handleActivated();
@@ -401,7 +402,7 @@ public class TestViewStateManager {
mgr.handleNewView(view);
assertEvents(listener1, EventHelper.newInitEvent(view));
assertEvents(listener2, EventHelper.newInitEvent(view));
-
+
randomEventLoop(defaultRandom, listener1, listener2);
}
@@ -409,7 +410,7 @@ public class TestViewStateManager {
public void testBindActivateChangingBindChanged() throws Exception {
final DummyListener listener1 = new DummyListener();
final DummyListener listener2 = new DummyListener();
-
+
mgr.bind(listener1);
TestHelper.assertNoEvents(listener1);
mgr.handleActivated();
@@ -426,7 +427,7 @@ public class TestViewStateManager {
randomEventLoop(defaultRandom, listener1, listener2);
}
-
+
@Test
public void testActivateBindChangingDuplicateHandleNewView() throws Exception {
final DummyListener listener = new DummyListener();
@@ -440,7 +441,7 @@ public class TestViewStateManager {
TestHelper.assertNoEvents(listener);
randomEventLoop(defaultRandom, listener);
}
-
+
@Test
public void testActivateBindChangingChangedBindDuplicateHandleNewView() throws Exception {
final DummyListener listener1 = new DummyListener();
@@ -450,7 +451,7 @@ public class TestViewStateManager {
final DummyTopologyView view = new DummyTopologyView().addInstance();
mgr.handleNewView(view);
assertEvents(listener1, EventHelper.newInitEvent(view));
-
+
final DummyListener listener2 = new DummyListener();
mgr.bind(listener2);
mgr.handleNewView(DummyTopologyView.clone(view));
@@ -458,7 +459,7 @@ public class TestViewStateManager {
assertEvents(listener2, EventHelper.newInitEvent(view));
randomEventLoop(defaultRandom, listener1, listener2);
}
-
+
@Test
public void testActivateChangedBindDuplicateHandleNewView() throws Exception {
final DummyListener listener = new DummyListener();
@@ -473,7 +474,7 @@ public class TestViewStateManager {
TestHelper.assertNoEvents(listener);
randomEventLoop(defaultRandom, listener);
}
-
+
@Test
public void testBindActivateChangedChanged() throws Exception {
final DummyListener listener = new DummyListener();
@@ -491,7 +492,7 @@ public class TestViewStateManager {
assertEvents(listener, EventHelper.newChangingEvent(view1), EventHelper.newChangedEvent(view1, view2));
randomEventLoop(defaultRandom, listener);
}
-
+
@Test
public void testBindActivateChangedDeactivateChangingActivateChanged() throws Exception {
final DummyListener listener = new DummyListener();
@@ -560,11 +561,11 @@ public class TestViewStateManager {
mgr.handleNewView(view2);
assertEvents(listener, EventHelper.newInitEvent(view2));
}
-
+
@Test
public void testClusterSyncService_noConcurrency() throws Exception {
- final org.apache.log4j.Logger commonsLogger = LogManager.getRootLogger().getLogger("org.apache.sling.discovery.commons.providers");
- final org.apache.log4j.Level logLevel = commonsLogger.getLevel();
+ final org.apache.log4j.Logger commonsLogger = RootLogger.getLogger("org.apache.sling.discovery.commons.providers");
+// final org.apache.log4j.Level logLevel = commonsLogger.getLevel();
commonsLogger.setLevel(Level.INFO); // change here to DEBUG in case of issues with this test
final Semaphore serviceSemaphore = new Semaphore(0);
final ReentrantLock lock = new ReentrantLock();
@@ -584,10 +585,11 @@ public class TestViewStateManager {
.addInstance(slingId2, cluster, false, false);
async(new Runnable() {
+ @Override
public void run() {
mgr.handleNewView(view1);
}
-
+
});
Thread.sleep(1000);
TestHelper.assertNoEvents(listener);
@@ -600,10 +602,11 @@ public class TestViewStateManager {
view2.removeInstance(slingId2);
async(new Runnable() {
+ @Override
public void run() {
mgr.handleNewView(view2);
}
-
+
});
logger.debug("run: waiting for 1sec");
Thread.sleep(1000);
@@ -624,7 +627,7 @@ public class TestViewStateManager {
@Test
public void testOnlyDiffersInProperties() throws Exception {
- final org.apache.log4j.Logger discoveryLogger = LogManager.getRootLogger().getLogger("org.apache.sling.discovery");
+ final org.apache.log4j.Logger discoveryLogger = RootLogger.getLogger("org.apache.sling.discovery");
discoveryLogger.setLevel(Level.INFO); // changed from Level.DEBUG
logger.info("testOnlyDiffersInProperties: start");
final String slingId1 = UUID.randomUUID().toString();
@@ -639,7 +642,7 @@ public class TestViewStateManager {
final DummyTopologyView view2 = DummyTopologyView.clone(view1).removeInstance(slingId2);
final DummyTopologyView view3 = DummyTopologyView.clone(view1).removeInstance(slingId2).removeInstance(slingId3);
DummyTopologyView view1Cloned = DummyTopologyView.clone(view1);
-
+
logger.info("testOnlyDiffersInProperties: handleNewView(view1)");
mgr.handleNewView(view1);
logger.info("testOnlyDiffersInProperties: handleActivated()");
@@ -671,7 +674,7 @@ public class TestViewStateManager {
i4_1.setProperty("a", "b");
logger.info("testOnlyDiffersInProperties: onlyDiffersInProperties(view4)");
assertTrue(mgr.onlyDiffersInProperties(view4));
-
+
DefaultInstanceDescription i5_1 = (DefaultInstanceDescription) view5.getInstance(slingId1);
i5_1.setProperty("a", "b");
logger.info("testOnlyDiffersInProperties: onlyDiffersInProperties(view5)");
@@ -701,7 +704,7 @@ public class TestViewStateManager {
view6.setId(originalId);
logger.info("testOnlyDiffersInProperties: onlyDiffersInProperties(view6) [5]");
assertTrue(mgr.onlyDiffersInProperties(view6));
-
+
// hack: we're modifying the view *in the ViewStateManagerImpl* here!!:
view4.setId(null);
diff --git a/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/DescriptorHelper.java b/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/DescriptorHelper.java
index 5fc6cae..3de193f 100644
--- a/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/DescriptorHelper.java
+++ b/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/DescriptorHelper.java
@@ -30,24 +30,23 @@ import org.apache.jackrabbit.commons.SimpleValueFactory;
import org.apache.jackrabbit.oak.util.GenericDescriptors;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
-import org.apache.sling.discovery.commons.providers.spi.base.DiscoveryLiteDescriptor;
public class DescriptorHelper {
public static void setDiscoveryLiteDescriptor(ResourceResolverFactory factory, DiscoveryLiteDescriptorBuilder builder) throws Exception {
setDescriptor(factory, DiscoveryLiteDescriptor.OAK_DISCOVERYLITE_CLUSTERVIEW, builder.asJson());
}
-
+
public static void setDescriptor(ResourceResolverFactory factory, String key,
String value) throws Exception {
- ResourceResolver resourceResolver = factory.getAdministrativeResourceResolver(null);
+ ResourceResolver resourceResolver = factory.getServiceResourceResolver(null);
try{
Session session = resourceResolver.adaptTo(Session.class);
if (session == null) {
return;
}
Repository repo = session.getRepository();
-
+
//<hack>
// Method setDescriptorMethod = repo.getClass().
// getDeclaredMethod("setDescriptor", String.class, String.class);
@@ -67,7 +66,7 @@ public class DescriptorHelper {
descriptors.put(key, valueFactory.createValue(value), true, true);
}
//</hack>
-
+
//<verify-hack>
assertEquals(value, repo.getDescriptor(key));
//</verify-hack>
diff --git a/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/MockedResourceResolver.java b/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/MockedResourceResolver.java
index 16a9c38..2a556d2 100644
--- a/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/MockedResourceResolver.java
+++ b/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/MockedResourceResolver.java
@@ -96,6 +96,7 @@ public class MockedResourceResolver implements ResourceResolver {
}
+ @Override
@SuppressWarnings("unchecked")
public <AdapterType> AdapterType adaptTo(Class<AdapterType> type) {
if (type.equals(Session.class)) {
@@ -110,27 +111,33 @@ public class MockedResourceResolver implements ResourceResolver {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
public Resource resolve(HttpServletRequest request, String absPath) {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
public Resource resolve(String absPath) {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
@Deprecated
public Resource resolve(HttpServletRequest request) {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
public String map(String resourcePath) {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
public String map(HttpServletRequest request, String resourcePath) {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
public Resource getResource(String path) {
Session session;
try {
@@ -144,6 +151,7 @@ public class MockedResourceResolver implements ResourceResolver {
return new MockedResource(this, path, "nt:unstructured");
}
+ @Override
public Resource getResource(Resource base, String path) {
if (base.getPath().equals("/")) {
return getResource("/" + path);
@@ -152,20 +160,24 @@ public class MockedResourceResolver implements ResourceResolver {
}
}
+ @Override
public String[] getSearchPath() {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
public Iterator<Resource> listChildren(Resource parent) {
try {
Node node = parent.adaptTo(Node.class);
final NodeIterator nodes = node.getNodes();
return new Iterator<Resource>() {
+ @Override
public void remove() {
throw new UnsupportedOperationException();
}
+ @Override
public Resource next() {
Node next = nodes.nextNode();
try {
@@ -177,6 +189,7 @@ public class MockedResourceResolver implements ResourceResolver {
}
}
+ @Override
public boolean hasNext() {
return nodes.hasNext();
}
@@ -186,28 +199,34 @@ public class MockedResourceResolver implements ResourceResolver {
}
}
+ @Override
public Iterable<Resource> getChildren(Resource parent) {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
public Iterator<Resource> findResources(String query, String language) {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
public Iterator<Map<String, Object>> queryResources(String query,
String language) {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
public ResourceResolver clone(Map<String, Object> authenticationInfo)
throws LoginException {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
public boolean isLive() {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
public void close() {
Iterator<MockedResource> it = resources.iterator();
while (it.hasNext()) {
@@ -226,18 +245,22 @@ public class MockedResourceResolver implements ResourceResolver {
resources.add(mockedResource);
}
+ @Override
public String getUserID() {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
public Iterator<String> getAttributeNames() {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
public Object getAttribute(String name) {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
public void delete(Resource resource) throws PersistenceException {
if (resources.contains(resource)) {
resources.remove(resource);
@@ -252,6 +275,7 @@ public class MockedResourceResolver implements ResourceResolver {
}
}
+ @Override
public Resource create(Resource parent, String name,
Map<String, Object> properties) throws PersistenceException {
final Node parentNode = parent.adaptTo(Node.class);
@@ -286,6 +310,7 @@ public class MockedResourceResolver implements ResourceResolver {
}
}
+ @Override
public void revert() {
try {
this.session.refresh(false);
@@ -294,6 +319,7 @@ public class MockedResourceResolver implements ResourceResolver {
}
}
+ @Override
public void commit() throws PersistenceException {
try {
this.session.save();
@@ -302,37 +328,43 @@ public class MockedResourceResolver implements ResourceResolver {
}
}
+ @Override
public boolean hasChanges() {
throw new UnsupportedOperationException("Not implemented");
}
+ @Override
public String getParentResourceType(Resource resource) {
// TODO Auto-generated method stub
return null;
}
+ @Override
public String getParentResourceType(String resourceType) {
// TODO Auto-generated method stub
return null;
}
+ @Override
public boolean isResourceType(Resource resource, String resourceType) {
// TODO Auto-generated method stub
return false;
}
+ @Override
public void refresh() {
// TODO Auto-generated method stub
}
@Override
- public Resource getParent(Resource child) {
- throw new UnsupportedOperationException("Not implemented");
+ public boolean hasChildren(Resource arg0) {
+ Iterable<Resource> iter = this.getChildren(arg0);
+ return iter.iterator().hasNext();
}
@Override
- public boolean hasChildren(Resource resource) {
+ public Resource getParent(Resource child) {
throw new UnsupportedOperationException("Not implemented");
}
diff --git a/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/RepositoryTestHelper.java b/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/RepositoryTestHelper.java
index 1d2ff35..4421868 100644
--- a/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/RepositoryTestHelper.java
+++ b/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/RepositoryTestHelper.java
@@ -64,10 +64,10 @@ import org.slf4j.LoggerFactory;
public class RepositoryTestHelper {
private final static Logger logger = LoggerFactory.getLogger(RepositoryTestHelper.class);
-
+
public static void dumpRepo(ResourceResolverFactory resourceResolverFactory) throws Exception {
Session session = resourceResolverFactory
- .getAdministrativeResourceResolver(null).adaptTo(Session.class);
+ .getServiceResourceResolver(null).adaptTo(Session.class);
logger.info("dumpRepo: ====== START =====");
logger.info("dumpRepo: repo = " + session.getRepository());
@@ -78,7 +78,7 @@ public class RepositoryTestHelper {
session.logout();
}
-
+
public static void dump(Node node) throws RepositoryException {
if (node.getPath().equals("/jcr:system")
|| node.getPath().equals("/rep:policy")) {
@@ -153,7 +153,7 @@ public class RepositoryTestHelper {
public static Repository createOakRepository() {
return createOakRepository(new MemoryNodeStore());
}
-
+
public static Repository createOakRepository(NodeStore nodeStore) {
DefaultWhiteboard whiteboard = new DefaultWhiteboard();
final Oak oak = new Oak(nodeStore)
@@ -191,7 +191,7 @@ public class RepositoryTestHelper {
// .withAsyncIndexing()
.with(whiteboard)
;
-
+
// if (commitRateLimiter != null) {
// oak.with(commitRateLimiter);
// }
@@ -229,14 +229,16 @@ public class RepositoryTestHelper {
context.checking(new Expectations() {
{
allowing(resourceResolverFactory)
- .getAdministrativeResourceResolver(null);
+ .getServiceResourceResolver(null);
will(new Action() {
+ @Override
public Object invoke(Invocation invocation)
throws Throwable {
return new MockedResourceResolver(repositoryOrNull);
}
+ @Override
public void describeTo(Description arg0) {
arg0.appendText("whateva - im going to create a new mockedresourceresolver");
}
--
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.