mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-17 11:19:15 +00:00
bug5541: added failing test case
This commit is contained in:
-1
@@ -42,7 +42,6 @@ public abstract class AbstractJsonExportTest {
|
||||
public void setUp() {
|
||||
service = MongoDBConfiguration.getDefaultTestConfiguration().getService();
|
||||
service.getDB().drop();
|
||||
|
||||
racingEventService = new RacingEventServiceImpl();
|
||||
}
|
||||
|
||||
|
||||
+79
@@ -0,0 +1,79 @@
|
||||
package com.sap.sailing.server.test;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.apache.shiro.SecurityUtils;
|
||||
import org.apache.shiro.authc.UsernamePasswordToken;
|
||||
import org.apache.shiro.subject.Subject;
|
||||
import org.apache.shiro.subject.support.SubjectThreadState;
|
||||
import org.apache.shiro.util.ThreadContext;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
import com.sap.sailing.domain.base.Event;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
|
||||
import com.sap.sailing.domain.leaderboard.impl.LeaderboardGroupImpl;
|
||||
import com.sap.sailing.domain.leaderboard.impl.LowPoint;
|
||||
import com.sap.sailing.domain.leaderboard.impl.ThresholdBasedResultDiscardingRuleImpl;
|
||||
import com.sap.sailing.domain.leaderboard.meta.LeaderboardGroupMetaLeaderboard;
|
||||
import com.sap.sailing.server.hierarchy.SailingHierarchyOwnershipUpdater;
|
||||
import com.sap.sailing.server.impl.RacingEventServiceImpl;
|
||||
import com.sap.sailing.server.interfaces.RacingEventService;
|
||||
import com.sap.sailing.server.testsupport.SecurityBundleTestWrapper;
|
||||
import com.sap.sse.common.Duration;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.mongodb.MongoDBConfiguration;
|
||||
import com.sap.sse.security.SecurityService;
|
||||
import com.sap.sse.security.shared.UserManagementException;
|
||||
|
||||
public class LeagueEventHierarchyOwnershipChangeTest {
|
||||
private Event event;
|
||||
private LeaderboardGroup leaderboardGroup;
|
||||
private Leaderboard overallLeaderboard;
|
||||
private RacingEventService service;
|
||||
private Subject subject;
|
||||
private SubjectThreadState threadState;
|
||||
private SecurityService securityService;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
MongoDBConfiguration.getDefaultTestConfiguration().getService().getDB().drop();
|
||||
service = Mockito.spy(new RacingEventServiceImpl());
|
||||
securityService = new SecurityBundleTestWrapper().initializeSecurityServiceForTesting();
|
||||
Mockito.doReturn(securityService).when(service).getSecurityService();
|
||||
event = service.addEvent("Test", "Test Event", TimePoint.now(), TimePoint.now().plus(Duration.ONE_WEEK), "Here",
|
||||
/* isPublic */ true, UUID.randomUUID());
|
||||
leaderboardGroup = new LeaderboardGroupImpl("LG", "LGDesc", "The LC", /* displayGroupsInReverseOrder */ false,
|
||||
Collections.emptyList());
|
||||
overallLeaderboard = new LeaderboardGroupMetaLeaderboard(leaderboardGroup, new LowPoint(),
|
||||
new ThresholdBasedResultDiscardingRuleImpl(new int[0]));
|
||||
leaderboardGroup.setOverallLeaderboard(overallLeaderboard);
|
||||
event.addLeaderboardGroup(leaderboardGroup);
|
||||
ThreadContext.unbindSubject(); // ensure that a new subject is created that knows the current security manager
|
||||
subject = SecurityUtils.getSubject(); // this also binds the Subject to the ThreadContext
|
||||
subject.login(new UsernamePasswordToken("admin", "admin"));
|
||||
threadState = new SubjectThreadState(subject);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLeagueEventHierarchyOwnershipChange() {
|
||||
SailingHierarchyOwnershipUpdater.createOwnershipUpdater(/* createNewGroup */ true , /* existingGroupIdOrNull */ null,
|
||||
/* newGroupName */ "The new owning group",
|
||||
/* migrateCompetitors */ true, /* migrateBoats */ true, /* copyMembersAndRoles */ true,
|
||||
service)
|
||||
.updateGroupOwnershipForEventHierarchy(event);
|
||||
// if this works without an exception, we're happy; see bug 5541
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws UserManagementException {
|
||||
threadState.restore();
|
||||
subject.logout();
|
||||
securityService.deleteUser("admin");
|
||||
}
|
||||
}
|
||||
+3
-4
@@ -16,6 +16,7 @@ import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
import com.sap.sailing.server.interfaces.RacingEventService;
|
||||
import com.sap.sse.security.SecurityService;
|
||||
import com.sap.sse.security.SecurityService.RoleCopyListener;
|
||||
import com.sap.sse.security.ShiroWildcardPermissionFromParts;
|
||||
import com.sap.sse.security.shared.HasPermissions.DefaultActions;
|
||||
import com.sap.sse.security.shared.OwnershipAnnotation;
|
||||
import com.sap.sse.security.shared.QualifiedObjectIdentifier;
|
||||
@@ -155,10 +156,8 @@ public class SailingHierarchyOwnershipUpdater {
|
||||
private void updateGroupOwner(QualifiedObjectIdentifier id) {
|
||||
final OwnershipAnnotation ownership = securityService.getOwnership(id);
|
||||
if (updateStrategy.needsUpdate(id, ownership)) {
|
||||
String permissionToCheck = id.getTypeIdentifier() + WildcardPermission.PART_DIVIDER_TOKEN
|
||||
+ DefaultActions.CHANGE_OWNERSHIP.name() + WildcardPermission.PART_DIVIDER_TOKEN
|
||||
+ id.getTypeRelativeObjectIdentifier();
|
||||
SecurityUtils.getSubject().checkPermission(permissionToCheck);
|
||||
final WildcardPermission permission = id.getPermission(DefaultActions.CHANGE_OWNERSHIP);
|
||||
SecurityUtils.getSubject().checkPermission(new ShiroWildcardPermissionFromParts(permission));
|
||||
objectsToUpdateOwnershipsFor.add(id);
|
||||
}
|
||||
}
|
||||
|
||||
-2
@@ -59,7 +59,6 @@ public final class SailingHierarchyWalker {
|
||||
final LeaderboardGroupHierarchyVisitor visitor) {
|
||||
boolean visitEvents = includeEventsIfLeaderboardGroupHasOverallLeaderboard
|
||||
&& leaderboardGroup.hasOverallLeaderboard();
|
||||
|
||||
if (visitEvents) {
|
||||
for (Event event : service.getAllEvents()) {
|
||||
if (Util.contains(event.getLeaderboardGroups(), leaderboardGroup)) {
|
||||
@@ -67,7 +66,6 @@ public final class SailingHierarchyWalker {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (Leaderboard lb : leaderboardGroup.getLeaderboards()) {
|
||||
visitor.visit(lb);
|
||||
}
|
||||
|
||||
+2
-1
@@ -619,7 +619,8 @@ implements RacingEventService, ClearStateTestSupport, RegattaListener, Leaderboa
|
||||
|
||||
public RacingEventServiceImpl(boolean clearPersistentCompetitorAndBoatStore, final TypeBasedServiceFinderFactory serviceFinderFactory, boolean restoreTrackedRaces) {
|
||||
this(clearPersistentCompetitorAndBoatStore, serviceFinderFactory, null, /* sailingNotificationService */ null,
|
||||
/* trackedRaceStatisticsCache */ null, restoreTrackedRaces, null, /* sharedSailingDataTracker */ null, /* replicationServiceTracker */ null,
|
||||
/* trackedRaceStatisticsCache */ null, restoreTrackedRaces,
|
||||
/* securityServiceTracker */ null, /* sharedSailingDataTracker */ null, /* replicationServiceTracker */ null,
|
||||
/* scoreCorrectionProviderServiceTracker */ null, /* resultUrlRegistryServiceTracker */ null);
|
||||
}
|
||||
|
||||
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
package com.sap.sse.security;
|
||||
|
||||
import com.sap.sse.security.shared.WildcardPermission;
|
||||
|
||||
public class ShiroWildcardPermissionFromParts extends org.apache.shiro.authz.permission.WildcardPermission {
|
||||
private static final long serialVersionUID = -6361446629960026098L;
|
||||
|
||||
public ShiroWildcardPermissionFromParts(WildcardPermission permission) {
|
||||
super();
|
||||
setParts(permission.getParts());
|
||||
}
|
||||
}
|
||||
@@ -97,6 +97,7 @@ import com.sap.sse.security.SecurityInitializationCustomizer;
|
||||
import com.sap.sse.security.SecurityService;
|
||||
import com.sap.sse.security.SessionCacheManager;
|
||||
import com.sap.sse.security.SessionUtils;
|
||||
import com.sap.sse.security.ShiroWildcardPermissionFromParts;
|
||||
import com.sap.sse.security.interfaces.AccessControlStore;
|
||||
import com.sap.sse.security.interfaces.Credential;
|
||||
import com.sap.sse.security.interfaces.OAuthToken;
|
||||
@@ -1916,20 +1917,6 @@ implements ReplicableSecurityService, ClearStateTestSupport {
|
||||
deleteAccessControlList(identifier);
|
||||
}
|
||||
|
||||
private static class ShiroWildcardPermissionFromParts extends org.apache.shiro.authz.permission.WildcardPermission {
|
||||
private static final long serialVersionUID = -6361446629960026098L;
|
||||
|
||||
private ShiroWildcardPermissionFromParts(Set<String> types, Set<String> actions, Set<String> objectIds) {
|
||||
super();
|
||||
setParts(Arrays.asList(types, actions, objectIds));
|
||||
}
|
||||
|
||||
private ShiroWildcardPermissionFromParts(WildcardPermission permission) {
|
||||
super();
|
||||
setParts(permission.getParts());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends WithQualifiedObjectIdentifier> void filterObjectsWithPermissionForCurrentUser(
|
||||
HasPermissions.Action action, Iterable<T> objectsToFilter,
|
||||
|
||||
Reference in New Issue
Block a user