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]

Reply via email to