diff --git a/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderCustomMixTest.java b/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderCustomMixTest.java index a7b6edb4bb5..70988c5dc07 100644 --- a/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderCustomMixTest.java +++ b/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderCustomMixTest.java @@ -20,8 +20,9 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.IntStream; -import org.apache.jackrabbit.guava.common.collect.Sets; import org.apache.jackrabbit.api.JackrabbitSession; import org.apache.jackrabbit.oak.AbstractSecurityTest; import org.apache.jackrabbit.oak.api.PropertyState; @@ -63,9 +64,9 @@ public void hasPrivilegesTest() throws Exception { // tests all possible 256 shuffles for (CompositionType type : CompositionType.values()) { - for (Set granted1 : Sets.powerSet(supp1)) { - for (Set granted2 : Sets.powerSet(supp2)) { - for (Set ps : Sets.powerSet(all)) { + for (Set granted1 : powerSet(supp1)) { + for (Set granted2 : powerSet(supp2)) { + for (Set ps : powerSet(all)) { CompositePermissionProvider cpp = buildCpp(supp1, granted1, supp2, granted2, type, null); boolean expected = expected(ps, supp1, granted1, supp2, granted2, type, true); @@ -99,9 +100,9 @@ public void isGrantedTest() throws Exception { Tree tree = mock(Tree.class, withSettings().extraInterfaces(ReadOnly.class)); // tests all possible 256 shuffles for (CompositionType type : CompositionType.values()) { - for (Set granted1 : Sets.powerSet(supp1)) { - for (Set granted2 : Sets.powerSet(supp2)) { - for (Set ps : Sets.powerSet(all)) { + for (Set granted1 : powerSet(supp1)) { + for (Set granted2 : powerSet(supp2)) { + for (Set ps : powerSet(all)) { CompositePermissionProvider cpp = buildCpp(supp1, granted1, supp2, granted2, type, grantMap); boolean expected = expected(ps, supp1, granted1, supp2, granted2, type, false); @@ -140,9 +141,9 @@ public void getRepositoryPermissionTest() throws Exception { // tests all possible 256 shuffles for (CompositionType type : CompositionType.values()) { - for (Set granted1 : Sets.powerSet(supp1)) { - for (Set granted2 : Sets.powerSet(supp2)) { - for (Set ps : Sets.powerSet(all)) { + for (Set granted1 : powerSet(supp1)) { + for (Set granted2 : powerSet(supp2)) { + for (Set ps : powerSet(all)) { CompositePermissionProvider cpp = buildCpp(supp1, granted1, supp2, granted2, type, grantMap); boolean expected = expected(ps, supp1, granted1, supp2, granted2, type, false); @@ -170,9 +171,9 @@ public void getTreePermissionTest() throws Exception { // tests all possible 256 shuffles for (CompositionType type : CompositionType.values()) { - for (Set granted1 : Sets.powerSet(supp1)) { - for (Set granted2 : Sets.powerSet(supp2)) { - for (Set ps : Sets.powerSet(all)) { + for (Set granted1 : powerSet(supp1)) { + for (Set granted2 : powerSet(supp2)) { + for (Set ps : powerSet(all)) { CompositePermissionProvider cpp = buildCpp(supp1, granted1, supp2, granted2, type, grantMap); boolean expected = expected(ps, supp1, granted1, supp2, granted2, type, false); @@ -410,4 +411,13 @@ public boolean isGranted(long permissions, @NotNull PropertyState property) { } } + + private Set> powerSet(final Set s) { + final T[] arr = s.toArray((T[]) new Object[0]); + return IntStream + .range(0, (int) Math.pow(2, arr.length)) + .parallel() //performance improvement + .mapToObj(e -> IntStream.range(0, arr.length).filter(i -> (e & (0b1 << i)) != 0).mapToObj(i -> arr[i]).collect(Collectors.toSet())) + .collect(Collectors.toSet()); + } }