blob: d3516e456d8cce93e5213cda58c09e97a1b489cc [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jackrabbit.oak.security.user;
import org.apache.jackrabbit.oak.security.user.monitor.UserMonitor;
import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
import org.apache.jackrabbit.oak.spi.security.user.UserConfiguration;
import org.apache.jackrabbit.oak.stats.Monitor;
import org.apache.jackrabbit.oak.stats.StatisticsProvider;
import org.jetbrains.annotations.NotNull;
import org.junit.After;
import java.lang.reflect.Field;
import static org.junit.Assert.assertSame;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.atMost;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
public class UserImporterMembershipMonitoringTest extends UserImporterMembershipBesteffortTest {
private UserMonitor userMonitor;
@After
@Override
public void after() throws Exception {
try {
if (groupTree.hasProperty(REP_MEMBERS)) {
verify(userMonitor, atLeastOnce()).doneUpdateMembers(anyLong(), anyLong(), anyLong(), anyBoolean());
verify(userMonitor, atMost(2)).doneUpdateMembers(anyLong(), anyLong(), anyLong(), anyBoolean());
}
} finally {
super.after();
}
}
@Override
protected SecurityProvider initSecurityProvider() {
SecurityProvider sp = super.initSecurityProvider();
StatisticsProvider statisticsProvider = StatisticsProvider.NOOP;
UserConfigurationImpl uc = (UserConfigurationImpl) sp.getConfiguration(UserConfiguration.class);
for (Monitor monitor : uc.getMonitors(statisticsProvider)) {
if (monitor instanceof UserMonitor) {
userMonitor = spy((UserMonitor) monitor);
// register the monitor with the whiteboard to have it accessible in the UserImporterr
whiteboard.register(monitor.getMonitorClass(), userMonitor, monitor.getMonitorProperties());
// replace the monitor in the UserConfiguration with the spy
replaceUserMonitor(uc, userMonitor);
}
}
return sp;
}
private static void replaceUserMonitor(@NotNull UserConfigurationImpl uc, @NotNull UserMonitor monitor) {
try {
Field f = UserConfigurationImpl.class.getDeclaredField("monitor");
f.setAccessible(true);
f.set(uc, monitor);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Override
boolean init(boolean createAction, Class<?>... extraInterfaces) throws Exception {
boolean b = super.init(createAction, extraInterfaces);
// verify that the usermonitor has been properly initialized and replace it with the spied instance
Field f = UserImporter.class.getDeclaredField("userMonitor");
f.setAccessible(true);
assertSame(userMonitor, f.get(importer));
return b;
}
}