Skip to content
Snippets Groups Projects
Commit 5a5baf44 authored by srosse's avatar srosse
Browse files

OO-1391: fix query for count, add some count query in unit tests

parent a3321ab7
No related branches found
No related tags found
No related merge requests found
......@@ -1370,7 +1370,7 @@ public class BaseSecurityManager extends BasicManager implements BaseSecurity {
boolean hasAuthProviders = (params.getAuthProviders() != null && params.getAuthProviders().length > 0);
// select identity and inner join with user to optimize query
StringBuilder sb = new StringBuilder();
StringBuilder sb = new StringBuilder(5000);
if (hasAuthProviders) {
// I know, it looks wrong but I need to do the join reversed since it is not possible to
// do this query with a left join that starts with the identity using hibernate HQL. A left
......@@ -1378,26 +1378,30 @@ public class BaseSecurityManager extends BasicManager implements BaseSecurity {
// providers (e.g. when searching for users that do not have any authentication providers at all!).
// It took my quite a while to make this work, so think twice before you change anything here!
if(count) {
sb = new StringBuilder("select count(distinct ident.key) from org.olat.basesecurity.AuthenticationImpl as auth right join auth.identity as ident ");
sb.append("select count(distinct ident.key) from org.olat.basesecurity.AuthenticationImpl as auth ")
.append(" right join auth.identity as ident")
.append(" inner join ident.user as user ");
} else {
sb = new StringBuilder("select distinct ident from org.olat.basesecurity.AuthenticationImpl as auth right join auth.identity as ident ");
sb.append("select distinct ident from org.olat.basesecurity.AuthenticationImpl as auth ")
.append(" right join auth.identity as ident")
.append(" inner join fetch ident.user as user ");
}
} else {
if(count) {
sb = new StringBuilder("select count(distinct ident.key) from org.olat.core.id.Identity as ident ");
sb.append("select count(distinct ident.key) from org.olat.core.id.Identity as ident ")
.append(" inner join ident.user as user ");
} else {
sb = new StringBuilder("select distinct ident from org.olat.core.id.Identity as ident ");
sb.append("select distinct ident from org.olat.core.id.Identity as ident ")
.append(" inner join fetch ident.user as user ");
}
}
// In any case join with the user. Don't join-fetch user, this breaks the query
// because of the user fields (don't know exactly why this behaves like
// this)
sb.append(" inner join fetch ident.user as user ");
if (hasGroups) {
// join over security group memberships
sb.append(" ,org.olat.basesecurity.SecurityGroupMembershipImpl as sgmsi ");
sb.append(" ,org.olat.basesecurity.SecurityGroupMembershipImpl as sgmsi ");
}
if (hasPermissionOnResources) {
// join over policies
......
......@@ -40,7 +40,6 @@ import junit.framework.Assert;
import org.junit.Test;
import org.olat.core.commons.persistence.DB;
import org.olat.core.commons.persistence.DBFactory;
import org.olat.core.id.Identity;
import org.olat.core.id.Roles;
import org.olat.core.id.User;
......@@ -94,7 +93,7 @@ public class GetIdentitiesByPowerSearchTest extends OlatTestCase {
assertEquals("Number of all users != activeUsers + deletedUsers" , numberOfAllUsers, numberOfActiveUsers + numberOfDeletedUsers);
// user attributes search test
DBFactory.getInstance().closeSession();
dbInstance.commitAndCloseSession();
results = baseSecurityManager.getIdentitiesByPowerSearch(ident.getName(), null, true, null, null, null, null, null, null, null, null);
assertTrue(results.size() == 1);
assertEquals("Wrong search result (search with username)" + ident.getName() + "' ",ident.getName() , results.get(0).getName());
......@@ -290,14 +289,14 @@ public class GetIdentitiesByPowerSearchTest extends OlatTestCase {
baseSecurityManager.addIdentityToSecurityGroup(ident, authors);
// policy search test
DBFactory.getInstance().closeSession();
dbInstance.commitAndCloseSession();
List<Policy> policies = baseSecurityManager.getPoliciesOfSecurityGroup(admins);
PermissionOnResourceable[] adminPermissions = convertPoliciesListToPermissionOnResourceArray(policies);
policies = baseSecurityManager.getPoliciesOfSecurityGroup(anonymous);
PermissionOnResourceable[] anonymousPermissions = convertPoliciesListToPermissionOnResourceArray(policies);
// security group search test
DBFactory.getInstance().closeSession();
dbInstance.commitAndCloseSession();
SecurityGroup[] groups2 = {admins, authors};
SecurityGroup[] groups3 = {authors};
......@@ -363,7 +362,7 @@ public class GetIdentitiesByPowerSearchTest extends OlatTestCase {
SecurityGroup[] groups2 = { admins, authors };
// policy search test
DBFactory.getInstance().closeSession();
dbInstance.commitAndCloseSession();
List<Policy> policies = baseSecurityManager.getPoliciesOfSecurityGroup(admins);
PermissionOnResourceable[] adminPermissions = convertPoliciesListToPermissionOnResourceArray(policies);
......@@ -400,7 +399,7 @@ public class GetIdentitiesByPowerSearchTest extends OlatTestCase {
Authentication auth = baseSecurityManager.findAuthentication(ident, BaseSecurityModule.getDefaultAuthProviderIdentifier());
baseSecurityManager.deleteAuthentication(auth);
DBFactory.getInstance().closeSession();
dbInstance.commitAndCloseSession();
// ultimate tests
//Identity ident = getOrCreateIdentity("anIdentity");
......@@ -410,7 +409,7 @@ public class GetIdentitiesByPowerSearchTest extends OlatTestCase {
cal.add(Calendar.DAY_OF_MONTH, -5);
Date before = cal.getTime();
DBFactory.getInstance().closeSession();
dbInstance.commitAndCloseSession();
results = baseSecurityManager.getIdentitiesByPowerSearch("groovy", null, true, groups1, adminPermissions, null, before, null, null, null, null);
Assert.assertTrue(results.isEmpty());
results = baseSecurityManager.getVisibleIdentitiesByPowerSearch("groovy", null, true, groups1, adminPermissions, null, before, null);
......@@ -471,11 +470,15 @@ public class GetIdentitiesByPowerSearchTest extends OlatTestCase {
//check count before adding
List<Identity> results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, authProviderNone, null, null, null, null, null);
int prevProviderNoneCount = results.size();
long countResults = baseSecurityManager.countIdentitiesByPowerSearch(null, null, true, null, null, authProviderNone, null, null, null, null, null);
Assert.assertEquals(results.size(), countResults);
//add two new users with authProviderNone
String rnd = UUID.randomUUID().toString();
Identity authNoneOne = getOrCreateTestIdentityWithAuth("authNoneOne-" + rnd, null);
Identity authNoneTwo = getOrCreateTestIdentityWithAuth("authNoneTwo-" + rnd, null);
DBFactory.getInstance().closeSession();
dbInstance.commitAndCloseSession();
// special case: no auth provider
// test if 2 new users are found.
......@@ -490,7 +493,7 @@ public class GetIdentitiesByPowerSearchTest extends OlatTestCase {
Identity authNoneThree = getOrCreateTestIdentityWithAuth("authNoneThree-" + rnd, null);
Identity authNoneFour = getOrCreateTestIdentityWithAuth("authNoneFour-" + rnd, null);
DBFactory.getInstance().closeSession();
dbInstance.commitAndCloseSession();
results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, null, authProviderNone, null, null);
Assert.assertTrue(results.contains(authNoneThree));
......@@ -503,7 +506,7 @@ public class GetIdentitiesByPowerSearchTest extends OlatTestCase {
getOrCreateTestIdentityWithAuth("authNoneFive-" + rnd, null);
getOrCreateTestIdentityWithAuth("authNoneSix-" + rnd, null);
DBFactory.getInstance().closeSession();
dbInstance.commitAndCloseSession();
results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, authProviderNone, null, null, null, null, null);
Assert.assertEquals("Wrong number of identities, search with (authProviderNone)", prevProviderNoneCount + 2, results.size());
......@@ -511,7 +514,7 @@ public class GetIdentitiesByPowerSearchTest extends OlatTestCase {
prevProviderNoneCount = results.size();
getOrCreateTestIdentityWithAuth("authNoneSeven-" + rnd, null);
getOrCreateTestIdentityWithAuth("authNoneEight-" + rnd, null);
DBFactory.getInstance().closeSession();
dbInstance.commitAndCloseSession();
results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, null, authProviderNone, null, null);
Assert.assertEquals("Wrong number of visible identities, search with (authProviderNone)", prevProviderNoneCount + 2, results.size());
......@@ -522,7 +525,7 @@ public class GetIdentitiesByPowerSearchTest extends OlatTestCase {
getOrCreateTestIdentityWithAuth("authTwelve-" + rnd, "Shib");
getOrCreateTestIdentityWithAuth("authThirteen-" + rnd, BaseSecurityModule.getDefaultAuthProviderIdentifier());
getOrCreateTestIdentityWithAuth("authForteen-" + rnd, null);
DBFactory.getInstance().closeSession();
dbInstance.commitAndCloseSession();
results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, authProvidersAll, null, null, null, null, null);
Assert.assertTrue(results.size() - prevProviderNoneCount == 3);
......@@ -532,7 +535,7 @@ public class GetIdentitiesByPowerSearchTest extends OlatTestCase {
getOrCreateTestIdentityWithAuth("authSixteen-" + rnd, "Shib");
getOrCreateTestIdentityWithAuth("authSeventeen-" + rnd, BaseSecurityModule.getDefaultAuthProviderIdentifier());
getOrCreateTestIdentityWithAuth("authEighteen-" + rnd, null);
DBFactory.getInstance().closeSession();
dbInstance.commitAndCloseSession();
results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, null, authProvidersAll, null, null);
Assert.assertTrue(results.size() - prevProviderNoneCount == 3);
}
......@@ -560,7 +563,7 @@ public class GetIdentitiesByPowerSearchTest extends OlatTestCase {
twoPropUser.setProperty(UserConstants.LASTNAME, "prop");
Identity twoPropIdentity = baseSecurityManager.createAndPersistIdentityAndUser(twoUsername, null, twoPropUser, BaseSecurityModule.getDefaultAuthProviderIdentifier(), twoUsername, "ppp");
Assert.assertNotNull(twoPropIdentity);
DBFactory.getInstance().closeSession();
dbInstance.commitAndCloseSession();
HashMap<String, String> userProperties = new HashMap<String, String>();
userProperties.put(UserConstants.FIRSTNAME, "one");
......@@ -642,13 +645,16 @@ public class GetIdentitiesByPowerSearchTest extends OlatTestCase {
Assert.assertNotNull(identity);
// commit
DBFactory.getInstance().closeSession();
dbInstance.commitAndCloseSession();
HashMap<String, String> userProperties = new HashMap<String, String>();
userProperties.put(UserConstants.FIRSTNAME, "multi");
List<Identity> results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null);
sysoutResults(results);
Assert.assertTrue(results.contains(identity));
long countResults = baseSecurityManager.countIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null);
Assert.assertEquals(results.size(), countResults);
userProperties = new HashMap<String, String>();
userProperties.put(UserConstants.FIRSTNAME, "multi");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment