joerghoh commented on code in PR #210:
URL:
https://github.com/apache/sling-org-apache-sling-resourceresolver/pull/210#discussion_r3368138241
##########
src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java:
##########
@@ -223,6 +226,57 @@ public void
testLoadAliases_ValidAbsolutePath_DefaultPaths() {
mapEntries.ah.initializeAliases();
}
+ // tests SLING-13236: a resource change delivered while the MapEntries
constructor is still
+ // running (the listener may be called as soon as it is registered) must
not cause an NPE on
+ // the not-yet-assigned VanityPathHandler
+ @Test
+ public void testChangeDeliveredDuringListenerRegistration() throws
Exception {
+ final AtomicBoolean changeDelivered = new AtomicBoolean(false);
+ when(bundleContext.registerService(eq(ResourceChangeListener.class),
any(ResourceChangeListener.class), any()))
+
.thenAnswer((Answer<ServiceRegistration<ResourceChangeListener>>) invocation ->
{
+ final ResourceChangeListener listener =
invocation.getArgument(1);
+ listener.onChange(List.of(new
ResourceChange(ResourceChange.ChangeType.ADDED, "/node", false)));
+ changeDelivered.set(true);
+ return null;
+ });
+
+ final MapEntries entries = new MapEntries(
+ resourceResolverFactory, bundleContext, eventAdmin,
stringInterpolationProvider, Optional.empty());
+ try {
+ assertTrue("change should have been delivered during listener
registration", changeDelivered.get());
+ } finally {
+ entries.dispose();
+ }
+ }
+
+ // tests SLING-13236: a resource change delivered while dispose() is
unregistering the
+ // listener must not cause an NPE on an already torn down AliasHandler
+ @Test
+ @SuppressWarnings("unchecked")
+ public void testChangeDeliveredDuringDispose() throws Exception {
+ final AtomicBoolean changeDelivered = new AtomicBoolean(false);
+ when(bundleContext.registerService(eq(ResourceChangeListener.class),
any(ResourceChangeListener.class), any()))
+
.thenAnswer((Answer<ServiceRegistration<ResourceChangeListener>>) invocation ->
{
+ final ResourceChangeListener listener =
invocation.getArgument(1);
+ final ServiceRegistration<ResourceChangeListener>
registration =
+ Mockito.mock(ServiceRegistration.class);
+ Mockito.doAnswer(unregisterInvocation -> {
+ listener.onChange(
+ List.of(new
ResourceChange(ResourceChange.ChangeType.ADDED, "/node", false)));
Review Comment:
just nitpicking:
```suggestion
List.of(new
ResourceChange(ResourceChange.ChangeType.ADDED, "/resource", false)));
```
##########
src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java:
##########
@@ -223,6 +226,57 @@ public void
testLoadAliases_ValidAbsolutePath_DefaultPaths() {
mapEntries.ah.initializeAliases();
}
+ // tests SLING-13236: a resource change delivered while the MapEntries
constructor is still
+ // running (the listener may be called as soon as it is registered) must
not cause an NPE on
+ // the not-yet-assigned VanityPathHandler
+ @Test
+ public void testChangeDeliveredDuringListenerRegistration() throws
Exception {
+ final AtomicBoolean changeDelivered = new AtomicBoolean(false);
+ when(bundleContext.registerService(eq(ResourceChangeListener.class),
any(ResourceChangeListener.class), any()))
+
.thenAnswer((Answer<ServiceRegistration<ResourceChangeListener>>) invocation ->
{
+ final ResourceChangeListener listener =
invocation.getArgument(1);
+ listener.onChange(List.of(new
ResourceChange(ResourceChange.ChangeType.ADDED, "/node", false)));
Review Comment:
just nitpicking:
```suggestion
listener.onChange(List.of(new
ResourceChange(ResourceChange.ChangeType.ADDED, "/resource", false)));
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]