Skip to content

Commit 0d87654

Browse files
committed
Fix registration of ResourceDecorator
Workaround for https://issues.apache.org/jira/browse/SLING-11885
1 parent 5f1251e commit 0d87654

File tree

1 file changed

+62
-24
lines changed

1 file changed

+62
-24
lines changed

bundle/src/test/java/com/adobe/acs/commons/remoteassets/impl/RemoteAssetDecoratorTest.java

Lines changed: 62 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -17,37 +17,54 @@
1717
*/
1818
package com.adobe.acs.commons.remoteassets.impl;
1919

20-
import com.adobe.acs.commons.testutil.LogTester;
21-
import com.adobe.acs.commons.util.RequireAem;
22-
import com.day.cq.commons.jcr.JcrConstants;
23-
import com.day.cq.dam.api.DamConstants;
24-
import io.wcm.testing.mock.aem.junit.AemContext;
20+
import static com.adobe.acs.commons.remoteassets.impl.RemoteAssets.IS_REMOTE_ASSET;
21+
import static com.adobe.acs.commons.remoteassets.impl.RemoteAssetsTestUtil.TEST_RETRY_DELAY;
22+
import static com.adobe.acs.commons.remoteassets.impl.RemoteAssetsTestUtil.TEST_WHITELISTED_SVC_USER_A;
23+
import static com.adobe.acs.commons.remoteassets.impl.RemoteAssetsTestUtil.getRemoteAssetsConfigs;
24+
import static com.adobe.acs.commons.remoteassets.impl.RemoteAssetsTestUtil.setupRemoteAssetsServiceUser;
25+
import static org.junit.Assert.assertEquals;
26+
import static org.junit.Assert.assertFalse;
27+
import static org.junit.Assert.assertTrue;
28+
import static org.mockito.ArgumentMatchers.any;
29+
import static org.mockito.Mockito.doReturn;
30+
import static org.mockito.Mockito.doThrow;
31+
import static org.mockito.Mockito.mock;
32+
import static org.mockito.Mockito.spy;
33+
import static org.mockito.Mockito.when;
34+
35+
import java.lang.reflect.Field;
36+
import java.util.Calendar;
37+
import java.util.Collections;
38+
import java.util.HashMap;
39+
import java.util.Map;
40+
41+
import javax.jcr.Node;
42+
import javax.jcr.RepositoryException;
43+
import javax.jcr.Session;
44+
import javax.jcr.ValueFactory;
45+
2546
import org.apache.jackrabbit.api.security.user.User;
2647
import org.apache.jackrabbit.api.security.user.UserManager;
2748
import org.apache.sling.api.resource.ModifiableValueMap;
2849
import org.apache.sling.api.resource.Resource;
2950
import org.apache.sling.api.resource.ResourceResolver;
3051
import org.apache.sling.api.resource.ResourceResolverFactory;
52+
import org.apache.sling.resourceresolver.impl.CommonResourceResolverFactoryImpl;
53+
import org.apache.sling.resourceresolver.impl.ResourceResolverFactoryImpl;
3154
import org.apache.sling.testing.mock.sling.ResourceResolverType;
55+
import org.junit.After;
3256
import org.junit.Before;
3357
import org.junit.Rule;
3458
import org.junit.Test;
3559
import org.mockito.invocation.InvocationOnMock;
3660
import org.mockito.stubbing.Answer;
3761

38-
import javax.jcr.Node;
39-
import javax.jcr.RepositoryException;
40-
import javax.jcr.Session;
41-
import javax.jcr.ValueFactory;
42-
import java.util.Calendar;
43-
import java.util.HashMap;
44-
import java.util.Map;
62+
import com.adobe.acs.commons.testutil.LogTester;
63+
import com.adobe.acs.commons.util.RequireAem;
64+
import com.day.cq.commons.jcr.JcrConstants;
65+
import com.day.cq.dam.api.DamConstants;
4566

46-
import static com.adobe.acs.commons.remoteassets.impl.RemoteAssets.IS_REMOTE_ASSET;
47-
import static com.adobe.acs.commons.remoteassets.impl.RemoteAssetsTestUtil.*;
48-
import static org.junit.Assert.*;
49-
import static org.mockito.ArgumentMatchers.any;
50-
import static org.mockito.Mockito.*;
67+
import io.wcm.testing.mock.aem.junit.AemContext;
5168

5269
public class RemoteAssetDecoratorTest {
5370
private static String TEST_MOCK_SYNC = "mocksync";
@@ -58,6 +75,7 @@ public class RemoteAssetDecoratorTest {
5875

5976
@Rule
6077
public final AemContext context = new AemContext(ResourceResolverType.JCR_MOCK);
78+
private ResourceResolver userResourceResolver = null;
6179

6280
@Before
6381
public void setup() throws Exception {
@@ -77,6 +95,22 @@ public void setup() throws Exception {
7795

7896
remoteAssetDecorator = spy(new RemoteAssetDecorator());
7997
remoteAssetsBinarySync = mock(RemoteAssetsBinarySyncImpl.class);
98+
// workaround for https://issues.apache.org/jira/browse/SLING-11885 to bind the resource decorator
99+
ResourceResolverFactory rrFactory = context.getService(ResourceResolverFactory.class);
100+
if (rrFactory instanceof ResourceResolverFactoryImpl) {
101+
// use reflection to get CommonResourceResolverFactoryImpl
102+
Field crrFactoryField = ResourceResolverFactoryImpl.class.getDeclaredField("commonFactory");
103+
crrFactoryField.setAccessible(true);
104+
CommonResourceResolverFactoryImpl commonFactory = (CommonResourceResolverFactoryImpl) crrFactoryField.get(rrFactory);
105+
commonFactory.getResourceDecoratorTracker().bindResourceDecorator(remoteAssetDecorator, Collections.emptyMap());
106+
}
107+
}
108+
109+
@After
110+
public void tearDown() {
111+
if (userResourceResolver != null) {
112+
userResourceResolver.close();
113+
}
80114
}
81115

82116
private void setupCreateRemoteAsset(Node nodeDam, String damFolder, boolean isRemoteAsset) throws RepositoryException {
@@ -108,12 +142,14 @@ public Boolean answer(InvocationOnMock invocationOnMock) throws Throwable {
108142
context.registerInjectActivateService(new RemoteAssetsConfigImpl(), getRemoteAssetsConfigs());
109143
context.registerInjectActivateService(remoteAssetsBinarySync);
110144
context.registerInjectActivateService(remoteAssetDecorator);
111-
112145
LogTester.reset();
113146
}
114147

115148
private ResourceResolver getUserResourceResolver() {
116-
return getUserResourceResolver("testuser", false);
149+
if (userResourceResolver == null) {
150+
userResourceResolver = getUserResourceResolver("testuser", false);
151+
}
152+
return userResourceResolver;
117153
}
118154

119155
private ResourceResolver getUserResourceResolver(String username, boolean isServiceUser) {
@@ -160,8 +196,9 @@ public void testGetResourceSyncsRemoteAsset() {
160196
@Test
161197
public void testGetResourceSyncsAssetIfUserIsWhitelistedServiceUser() {
162198
setupFinish();
163-
ResourceResolver serviceResourceResolver = getUserResourceResolver(TEST_WHITELISTED_SVC_USER_A, true);
164-
assertResourceSyncs(serviceResourceResolver, TEST_REMOTE_ASSET_CONTENT_PATH);
199+
try (ResourceResolver serviceResourceResolver = getUserResourceResolver(TEST_WHITELISTED_SVC_USER_A, true)) {
200+
assertResourceSyncs(serviceResourceResolver, TEST_REMOTE_ASSET_CONTENT_PATH);
201+
}
165202
}
166203

167204
@Test
@@ -208,9 +245,10 @@ public void testGetResourceDoesNotSyncAssetIfUserIsAdminUser() {
208245
@Test
209246
public void testGetResourceDoesNotSyncAssetIfUserIsServiceUser() {
210247
setupFinish();
211-
ResourceResolver serviceResourceResolver = getUserResourceResolver("serviceuser", true);
212-
assertResourceDoesNotSync(serviceResourceResolver, TEST_REMOTE_ASSET_CONTENT_PATH);
213-
LogTester.assertLogText("Avoiding binary sync b/c this is a non-whitelisted service user: serviceuser");
248+
try (ResourceResolver serviceResourceResolver = getUserResourceResolver("serviceuser", true)) {
249+
assertResourceDoesNotSync(serviceResourceResolver, TEST_REMOTE_ASSET_CONTENT_PATH);
250+
LogTester.assertLogText("Avoiding binary sync b/c this is a non-whitelisted service user: serviceuser");
251+
}
214252
}
215253

216254
@Test

0 commit comments

Comments
 (0)