17
17
*/
18
18
package com .adobe .acs .commons .remoteassets .impl ;
19
19
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
+
25
46
import org .apache .jackrabbit .api .security .user .User ;
26
47
import org .apache .jackrabbit .api .security .user .UserManager ;
27
48
import org .apache .sling .api .resource .ModifiableValueMap ;
28
49
import org .apache .sling .api .resource .Resource ;
29
50
import org .apache .sling .api .resource .ResourceResolver ;
30
51
import org .apache .sling .api .resource .ResourceResolverFactory ;
52
+ import org .apache .sling .resourceresolver .impl .CommonResourceResolverFactoryImpl ;
53
+ import org .apache .sling .resourceresolver .impl .ResourceResolverFactoryImpl ;
31
54
import org .apache .sling .testing .mock .sling .ResourceResolverType ;
55
+ import org .junit .After ;
32
56
import org .junit .Before ;
33
57
import org .junit .Rule ;
34
58
import org .junit .Test ;
35
59
import org .mockito .invocation .InvocationOnMock ;
36
60
import org .mockito .stubbing .Answer ;
37
61
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 ;
45
66
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 ;
51
68
52
69
public class RemoteAssetDecoratorTest {
53
70
private static String TEST_MOCK_SYNC = "mocksync" ;
@@ -58,6 +75,7 @@ public class RemoteAssetDecoratorTest {
58
75
59
76
@ Rule
60
77
public final AemContext context = new AemContext (ResourceResolverType .JCR_MOCK );
78
+ private ResourceResolver userResourceResolver = null ;
61
79
62
80
@ Before
63
81
public void setup () throws Exception {
@@ -77,6 +95,22 @@ public void setup() throws Exception {
77
95
78
96
remoteAssetDecorator = spy (new RemoteAssetDecorator ());
79
97
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
+ }
80
114
}
81
115
82
116
private void setupCreateRemoteAsset (Node nodeDam , String damFolder , boolean isRemoteAsset ) throws RepositoryException {
@@ -108,12 +142,14 @@ public Boolean answer(InvocationOnMock invocationOnMock) throws Throwable {
108
142
context .registerInjectActivateService (new RemoteAssetsConfigImpl (), getRemoteAssetsConfigs ());
109
143
context .registerInjectActivateService (remoteAssetsBinarySync );
110
144
context .registerInjectActivateService (remoteAssetDecorator );
111
-
112
145
LogTester .reset ();
113
146
}
114
147
115
148
private ResourceResolver getUserResourceResolver () {
116
- return getUserResourceResolver ("testuser" , false );
149
+ if (userResourceResolver == null ) {
150
+ userResourceResolver = getUserResourceResolver ("testuser" , false );
151
+ }
152
+ return userResourceResolver ;
117
153
}
118
154
119
155
private ResourceResolver getUserResourceResolver (String username , boolean isServiceUser ) {
@@ -160,8 +196,9 @@ public void testGetResourceSyncsRemoteAsset() {
160
196
@ Test
161
197
public void testGetResourceSyncsAssetIfUserIsWhitelistedServiceUser () {
162
198
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
+ }
165
202
}
166
203
167
204
@ Test
@@ -208,9 +245,10 @@ public void testGetResourceDoesNotSyncAssetIfUserIsAdminUser() {
208
245
@ Test
209
246
public void testGetResourceDoesNotSyncAssetIfUserIsServiceUser () {
210
247
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
+ }
214
252
}
215
253
216
254
@ Test
0 commit comments