diff --git a/pom.xml b/pom.xml index 8d19201038bc65512656288d676735e60238c4f2..cf080e859ff5db6b5924b652d80466d8c5be3d86 100644 --- a/pom.xml +++ b/pom.xml @@ -1358,6 +1358,7 @@ <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> + <version>1.3.1</version> <executions> <execution> <id>show-versions</id> @@ -2198,13 +2199,13 @@ <dependency> <groupId>io.undertow</groupId> <artifactId>undertow-core</artifactId> - <version>1.0.9.Final</version> + <version>1.0.16.Final</version> <scope>test</scope> </dependency> <dependency> <groupId>io.undertow</groupId> <artifactId>undertow-servlet</artifactId> - <version>1.0.9.Final</version> + <version>1.0.16.Final</version> <scope>test</scope> </dependency> diff --git a/src/main/java/de/tuchemnitz/wizard/workflows/coursecreation/steps/CcStep00.java b/src/main/java/de/tuchemnitz/wizard/workflows/coursecreation/steps/CcStep00.java index a33ec51274ac4de6f9e6b7e2de419680eee6c632..1d06a8319183ac750e76965f22b986605487edb0 100644 --- a/src/main/java/de/tuchemnitz/wizard/workflows/coursecreation/steps/CcStep00.java +++ b/src/main/java/de/tuchemnitz/wizard/workflows/coursecreation/steps/CcStep00.java @@ -187,7 +187,7 @@ public class CcStep00 extends BasicStep { "o_icon o_co_icon" }; // show checkbox - rightsChooser = FormUIFactory.getInstance().addCheckboxesVertical("rightsChooser", fic, keys, values, iconCSS, 1); + rightsChooser = FormUIFactory.getInstance().addCheckboxesVertical("cce.label", fic, keys, values, iconCSS, 1); rightsChooser.addActionListener(FormEvent.ONCLICK); // Radios/Checkboxes need onclick because of IE bug OLAT-5753 // create edit button for enrollment and hide it editButtonEnrollment = FormUIFactory.getInstance().addFormLink("cce.edit", fic); diff --git a/src/main/java/de/tuchemnitz/wizard/workflows/coursecreation/steps/CcStep02.java b/src/main/java/de/tuchemnitz/wizard/workflows/coursecreation/steps/CcStep02.java index f76258d4758c514e40fb1fdbb38f82d0fbb53ea0..981e72cc4dda6aa888334b8ef9e516afe948e024 100644 --- a/src/main/java/de/tuchemnitz/wizard/workflows/coursecreation/steps/CcStep02.java +++ b/src/main/java/de/tuchemnitz/wizard/workflows/coursecreation/steps/CcStep02.java @@ -155,8 +155,7 @@ public class CcStep02 extends BasicStep { formLayout.add(formItems); // create access limit checkbox - publishCheckbox = FormUIFactory.getInstance().addCheckboxesVertical("publishCheckbox", formItems, new String[] {"ison"}, new String[] {""}, 1); - publishCheckbox.setLabel("car.makepublic", null); + publishCheckbox = FormUIFactory.getInstance().addCheckboxesHorizontal("car.makepublic", formItems, new String[] {"ison"}, new String[] {""}); publishCheckbox.select("ison", true); publishCheckbox.addActionListener(FormEvent.ONCHANGE); @@ -180,9 +179,7 @@ public class CcStep02 extends BasicStep { values[2] = translator.translate("car.university", new String[] { institution }); } - accessChooser = FormUIFactory.getInstance().addDropdownSingleselect("accessChooser", formItems, keys, values, null); - accessChooser.setLabel("car.label", null); - + accessChooser = FormUIFactory.getInstance().addDropdownSingleselect("car.label", formItems, keys, values, null); accessChooser.select(CourseCreationConfiguration.ACL_OLAT, true); accessChooser.addActionListener(FormEvent.ONCHANGE); diff --git a/src/main/java/de/tuchemnitz/wizard/workflows/coursecreation/steps/_content/CcStep00_form.html b/src/main/java/de/tuchemnitz/wizard/workflows/coursecreation/steps/_content/CcStep00_form.html index c5419eacbfee06f66df2d7258632f616b75f7a3a..841146ce2e48cffd78f59a3030b7c4f499048041 100644 --- a/src/main/java/de/tuchemnitz/wizard/workflows/coursecreation/steps/_content/CcStep00_form.html +++ b/src/main/java/de/tuchemnitz/wizard/workflows/coursecreation/steps/_content/CcStep00_form.html @@ -4,7 +4,7 @@ <table> <tr valign="top"> <td >$r.translate("cce.label"): </td> - <td align="left" >$r.render("rightsChooser")</td> + <td align="left" >$r.render("cce.label")</td> <td align="right" style="padding-top:17px;">$r.render("cce.edit")</td> </tr> <tr> diff --git a/src/main/java/org/olat/basesecurity/BaseSecurityManager.java b/src/main/java/org/olat/basesecurity/BaseSecurityManager.java index fcb68564ee1352cd0b859cbd97be7507be9fe655..f4dc7b9a63d89f1fe5c0b954ad1fcf5df69a1b53 100644 --- a/src/main/java/org/olat/basesecurity/BaseSecurityManager.java +++ b/src/main/java/org/olat/basesecurity/BaseSecurityManager.java @@ -136,21 +136,21 @@ public class BaseSecurityManager extends BasicManager implements BaseSecurity { public void init() { // called only once at startup and only from one thread // init the system level groups and its policies initSysGroupAdmin(); - DBFactory.getInstance(false).intermediateCommit(); + dbInstance.commit(); initSysGroupAuthors(); - DBFactory.getInstance(false).intermediateCommit(); + dbInstance.commit(); initSysGroupGroupmanagers(); - DBFactory.getInstance(false).intermediateCommit(); + dbInstance.commit(); initSysGroupPoolsmanagers(); - DBFactory.getInstance(false).intermediateCommit(); + dbInstance.commit(); initSysGroupUsermanagers(); - DBFactory.getInstance(false).intermediateCommit(); + dbInstance.commit(); initSysGroupUsers(); - DBFactory.getInstance(false).intermediateCommit(); + dbInstance.commit(); initSysGroupAnonymous(); - DBFactory.getInstance(false).intermediateCommit(); + dbInstance.commit(); initSysGroupInstitutionalResourceManager(); - DBFactory.getInstance(false).intermediateCommit(); + dbInstance.commitAndCloseSession(); } /** diff --git a/src/main/java/org/olat/core/commons/persistence/DB.java b/src/main/java/org/olat/core/commons/persistence/DB.java index 2050c611b55b70197b137113d7824bac49794711..29ec03b1de89ff67d18f1479d1056435ce35fac5 100644 --- a/src/main/java/org/olat/core/commons/persistence/DB.java +++ b/src/main/java/org/olat/core/commons/persistence/DB.java @@ -40,11 +40,6 @@ public interface DB { * Close the database session. */ public void closeSession(); - - /** - * Close the database session, clean threadlocal but only if necessary - */ - //public void cleanUpSession(); /** * Create a DBQuery @@ -162,11 +157,6 @@ public interface DB { */ public Persistable loadObject(Persistable persistable, boolean forceReloadFromDB); - - /** - * Begin a new transaction (don't forget to commit the last one) - */ - public void begin(); /** * Call this to commit current changes. diff --git a/src/main/java/org/olat/core/commons/persistence/DBImpl.java b/src/main/java/org/olat/core/commons/persistence/DBImpl.java index 5e1a218018ab5ba8463f64e2a67002518507e8b7..8f0c5b674401ebf02d3b7ce1cab109817bd9da67 100644 --- a/src/main/java/org/olat/core/commons/persistence/DBImpl.java +++ b/src/main/java/org/olat/core/commons/persistence/DBImpl.java @@ -660,11 +660,11 @@ public class DBImpl extends LogDelegator implements DB, Destroyable { } } - private void evict(EntityManager em, Object object, ThreadLocalData data) { + private void evict(EntityManager em, Object object, ThreadLocalData localData) { try { getSession(em).evict(object); } catch (Exception e) { - data.setError(e); + localData.setError(e); throw new DBRuntimeException("Error in evict() Object from Database. ", e); } } @@ -695,12 +695,6 @@ public class DBImpl extends LogDelegator implements DB, Destroyable { } } - @Override - public void begin() { - //this will begin a new transaction - getCurrentEntityManager(); - } - /** * Call this to commit a transaction opened by beginTransaction(). */ diff --git a/src/main/java/org/olat/core/util/mail/MailModule.java b/src/main/java/org/olat/core/util/mail/MailModule.java index b105e143465a0128e09906e56cb6608925423a0c..6f63b07cb1e21aef701e6bd5c435aef5e5aadbfc 100644 --- a/src/main/java/org/olat/core/util/mail/MailModule.java +++ b/src/main/java/org/olat/core/util/mail/MailModule.java @@ -21,16 +21,11 @@ package org.olat.core.util.mail; import java.io.File; -import org.olat.core.CoreSpringFactory; import org.olat.core.commons.modules.bc.FolderConfig; import org.olat.core.configuration.AbstractOLATModule; import org.olat.core.configuration.PersistedProperties; -import org.olat.core.extensions.action.GenericActionExtension; -import org.olat.core.gui.control.Event; import org.olat.core.util.StringHelper; import org.olat.core.util.WebappHelper; -import org.olat.core.util.event.FrameworkStartedEvent; -import org.olat.core.util.event.FrameworkStartupEventChannel; import org.olat.core.util.vfs.LocalFolderImpl; import org.olat.core.util.vfs.VFSContainer; @@ -59,7 +54,6 @@ public class MailModule extends AbstractOLATModule { public MailModule() { //make Spring happy - FrameworkStartupEventChannel.registerForStartupEvent(this); } /** @@ -115,30 +109,11 @@ public class MailModule extends AbstractOLATModule { * @param internSystem */ public void setInterSystem(boolean internSystem) { + this.internSystem = internSystem; String internSystemStr = internSystem ? "true" : "false"; - enableExtensions(internSystem); setStringProperty(INTERN_MAIL_SYSTEM, internSystemStr, true); } - private void enableExtensions(boolean enabled){ - try { - ((GenericActionExtension)CoreSpringFactory.getBean("mailAEparent")).setEnabled(enabled); - ((GenericActionExtension)CoreSpringFactory.getBean("mailAEinbox")).setEnabled(enabled); - ((GenericActionExtension)CoreSpringFactory.getBean("mailAEoutbox")).setEnabled(enabled); - } catch (Exception e) { - // do nothing when extension don't exist. - } - } - - @Override - public void event(Event event) { - if(event instanceof FrameworkStartedEvent) { - enableExtensions(isInternSystem()); - } else { - super.event(event); - } - } - /** * Users can receive real e-mail too. This setting is the default for * users. They can change it in Preferences Panel. diff --git a/src/test/java/org/olat/basesecurity/BaseSecurityManagerTest.java b/src/test/java/org/olat/basesecurity/BaseSecurityManagerTest.java index ec33ae018d922ef9c4b6ba8b47fb2fa953118ca1..cd8a6591323c1cbc48beeb20d133951da753a5b7 100644 --- a/src/test/java/org/olat/basesecurity/BaseSecurityManagerTest.java +++ b/src/test/java/org/olat/basesecurity/BaseSecurityManagerTest.java @@ -65,19 +65,19 @@ public class BaseSecurityManagerTest extends OlatTestCase { @Test public void testCreateIdentity() { - String name = "createid-" + UUID.randomUUID().toString(); - User user = userManager.createUser("first" + name, "last" + name, name + "@frentix.com"); - Identity identity = securityManager.createAndPersistIdentityAndUser(name, user, BaseSecurityModule.getDefaultAuthProviderIdentifier(), name, "secret"); + String username = "createid-" + UUID.randomUUID().toString(); + User user = userManager.createUser("first" + username, "last" + username, username + "@frentix.com"); + Identity identity = securityManager.createAndPersistIdentityAndUser(username, user, BaseSecurityModule.getDefaultAuthProviderIdentifier(), username, "secret"); dbInstance.commitAndCloseSession(); Assert.assertNotNull(identity); Assert.assertNotNull(identity.getKey()); - Assert.assertEquals(name, identity.getName()); + Assert.assertEquals(username, identity.getName()); Assert.assertNotNull(identity.getUser()); Assert.assertEquals(user, identity.getUser()); - Assert.assertEquals("first" + name, identity.getUser().getProperty(UserConstants.FIRSTNAME, null)); - Assert.assertEquals("last" + name, identity.getUser().getProperty(UserConstants.LASTNAME, null)); - Assert.assertEquals(name + "@frentix.com", identity.getUser().getProperty(UserConstants.EMAIL, null)); + Assert.assertEquals("first" + username, identity.getUser().getProperty(UserConstants.FIRSTNAME, null)); + Assert.assertEquals("last" + username, identity.getUser().getProperty(UserConstants.LASTNAME, null)); + Assert.assertEquals(username + "@frentix.com", identity.getUser().getProperty(UserConstants.EMAIL, null)); } /** @@ -85,11 +85,11 @@ public class BaseSecurityManagerTest extends OlatTestCase { */ @Test public void testCreateUpdateIdentity() { - String name = "update-id-" + UUID.randomUUID().toString(); - User user = userManager.createUser("first" + name, "last" + name, name + "@frentix.com"); + String username = "update-id-" + UUID.randomUUID().toString(); + User user = userManager.createUser("first" + username, "last" + username, username + "@frentix.com"); user.setProperty(UserConstants.COUNTRY, ""); user.setProperty(UserConstants.CITY, "Basel"); - Identity identity = securityManager.createAndPersistIdentityAndUser(name, user, BaseSecurityModule.getDefaultAuthProviderIdentifier(), name, "secret"); + Identity identity = securityManager.createAndPersistIdentityAndUser(username, user, BaseSecurityModule.getDefaultAuthProviderIdentifier(), username, "secret"); dbInstance.commitAndCloseSession(); //reload and update @@ -103,8 +103,8 @@ public class BaseSecurityManagerTest extends OlatTestCase { //reload and check Identity identitySecond = securityManager.loadIdentityByKey(identity.getKey()); Assert.assertEquals("firstname", identitySecond.getUser().getProperty(UserConstants.FIRSTNAME, null)); - Assert.assertEquals("last" + name, identitySecond.getUser().getProperty(UserConstants.LASTNAME, null)); - Assert.assertEquals(name + "@frentix.com", identitySecond.getUser().getProperty(UserConstants.EMAIL, null)); + Assert.assertEquals("last" + username, identitySecond.getUser().getProperty(UserConstants.LASTNAME, null)); + Assert.assertEquals(username + "@frentix.com", identitySecond.getUser().getProperty(UserConstants.EMAIL, null)); Assert.assertEquals("CH", identitySecond.getUser().getProperty(UserConstants.COUNTRY, null)); Assert.assertEquals("Lausanne", identitySecond.getUser().getProperty(UserConstants.CITY, null)); } @@ -156,16 +156,16 @@ public class BaseSecurityManagerTest extends OlatTestCase { @Test public void testFindIdentityByName() { //create a user it - String name = "find-me-" + UUID.randomUUID().toString(); - Identity id = JunitTestHelper.createAndPersistIdentityAsUser(name); + String username = "find-me-" + UUID.randomUUID().toString(); + Identity id = JunitTestHelper.createAndPersistIdentityAsUser(username); Assert.assertNotNull(id); - Assert.assertEquals(name, id.getName()); + Assert.assertEquals(username, id.getName()); dbInstance.commitAndCloseSession(); //find it - Identity foundId = securityManager.findIdentityByName(name); + Identity foundId = securityManager.findIdentityByName(username); Assert.assertNotNull(foundId); - Assert.assertEquals(name, foundId.getName()); + Assert.assertEquals(username, foundId.getName()); Assert.assertEquals(id, foundId); } @@ -210,11 +210,11 @@ public class BaseSecurityManagerTest extends OlatTestCase { @Test public void testCreateNamedGroup() { - String name = UUID.randomUUID().toString().replace("-", "").substring(0, 16); - SecurityGroup ng = securityManager.createAndPersistNamedSecurityGroup(name); + String username = UUID.randomUUID().toString().replace("-", "").substring(0, 16); + SecurityGroup ng = securityManager.createAndPersistNamedSecurityGroup(username); dbInstance.commitAndCloseSession(); - SecurityGroup sgFound = securityManager.findSecurityGroupByName(name); + SecurityGroup sgFound = securityManager.findSecurityGroupByName(username); Assert.assertNotNull(sgFound); Assert.assertEquals(sgFound.getKey(), ng.getKey()); } diff --git a/src/test/java/org/olat/basesecurity/BaseSecurityTest.java b/src/test/java/org/olat/basesecurity/BaseSecurityTest.java deleted file mode 100644 index 87f253c754277388bec857a630f367c242223f5d..0000000000000000000000000000000000000000 --- a/src/test/java/org/olat/basesecurity/BaseSecurityTest.java +++ /dev/null @@ -1,810 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ - -package org.olat.basesecurity; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import java.util.Calendar; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import junit.framework.Assert; - -import org.junit.Test; -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; -import org.olat.core.id.UserConstants; -import org.olat.core.logging.OLog; -import org.olat.core.logging.Tracing; -import org.olat.test.JunitTestHelper; -import org.olat.test.OlatTestCase; -import org.olat.user.UserManager; -import org.springframework.beans.factory.annotation.Autowired; - -/** - * Description: <br> - * - * @author Felix Jost - */ -public class BaseSecurityTest extends OlatTestCase { - - private static final OLog log = Tracing.createLoggerFor(BaseSecurityTest.class); - - @Autowired - private BaseSecurity baseSecurityManager; - - - - @Test - public void testGetIdentitiesByPowerSearch() { - System.out.println("start testGetIdentitiesByPowerSearch"); - try { - Identity ident = getOrCreateIdentity("anIdentity"); - Identity ident2 = getOrCreateTestIdentity("extremegroovy"); - Assert.assertNotNull(ident2); - Identity deletedIdent = getOrCreateTestIdentity("delete"); - deletedIdent = baseSecurityManager.saveIdentityStatus(deletedIdent, Identity.STATUS_DELETED); - - SecurityGroup admins = baseSecurityManager.findSecurityGroupByName(Constants.GROUP_ADMIN); - baseSecurityManager.addIdentityToSecurityGroup(deletedIdent, admins); - - - // basic query to find all system users without restrictions - List<Identity> results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, null, null, null, null, null, null); - assertTrue(results.size()>0); - int numberOfAllUsers = results.size(); - - results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, null, null, null, null, null,Identity.STATUS_ACTIV); - assertTrue(results.size()>0); - int numberOfActiveUsers = results.size(); - - results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, null, null, null, null, null, Identity.STATUS_DELETED); - assertTrue(results.size() >0); - int numberOfDeletedUsers = results.size(); - assertEquals("Number of all users != activeUsers + deletedUsers" , numberOfAllUsers, numberOfActiveUsers + numberOfDeletedUsers); - - // user attributes search test - DBFactory.getInstance().closeSession(); - 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()); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(ident.getName(), null, true, null, null, null, null, null); - assertTrue(results.size() == 1); - assertEquals("Wrong search result (search with username)" + ident.getName() + "' ",ident.getName() , results.get(0).getName()); - - results = baseSecurityManager.getIdentitiesByPowerSearch("an*tity", null, true, null, null, null, null, null, null, null, null); - assertTrue(results.size() == 1); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch("an*tity", null, true, null, null, null, null, null); - assertTrue(results.size() == 1); - - results = baseSecurityManager.getIdentitiesByPowerSearch("lalal", null, true, null, null, null, null, null, null, null, null); - assertTrue(results.size() == 0); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch("lalal", null, true, null, null, null, null, null); - assertTrue(results.size() == 0); - - Map<String, String> userProperties = new HashMap<String, String>(); - userProperties.put(UserConstants.INSTITUTIONALNAME, "*zh2"); - results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); - sysoutResults(results); - assertEquals("Wrong search result 'UserConstants.INSTITUTIONALNAME='*zh2'", 2, results.size()); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null); - assertTrue(results.size() == 1); - assertEquals("Wrong search result for visible 'UserConstants.INSTITUTIONALNAME='*zh2'", 1, results.size()); - - userProperties = new HashMap<String, String>(); - userProperties.put(UserConstants.INSTITUTIONALNAME, "un"); - userProperties.put(UserConstants.INSTITUTIONALUSERIDENTIFIER, "678"); // per default the % is only attached at the end of the query. - results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); - assertTrue(results.size() == 0); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null); - assertTrue(results.size() == 0); - - userProperties = new HashMap<String, String>(); - userProperties.put(UserConstants.INSTITUTIONALNAME, "un"); - userProperties.put(UserConstants.INSTITUTIONALUSERIDENTIFIER, "%678"); - results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); - assertTrue(results.size() == 2); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null); - assertTrue(results.size() == 1); - - userProperties = new HashMap<String, String>(); - userProperties.put(UserConstants.INSTITUTIONALNAME, "un"); - userProperties.put(UserConstants.INSTITUTIONALUSERIDENTIFIER, "12-345-678"); - results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); - assertTrue(results.size() == 2); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null); - assertTrue(results.size() == 1); - - userProperties = new HashMap<String, String>(); - userProperties.put(UserConstants.INSTITUTIONALNAME, "un"); - userProperties.put(UserConstants.INSTITUTIONALUSERIDENTIFIER, "888"); - results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); - assertTrue(results.size() == 0); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null); - assertTrue(results.size() == 0); - - userProperties = new HashMap<String, String>(); - userProperties.put(UserConstants.INSTITUTIONALNAME, "un"); - results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); - assertTrue(results.size() == 2); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null); - assertTrue(results.size() == 1); - results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, Identity.STATUS_ACTIV); - assertTrue(results.size() == 1); - results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, Identity.STATUS_ACTIV); - assertTrue(results.size() == 1); - } catch (Exception e) { - e.printStackTrace(); - } catch (Error err) { - err.printStackTrace(); - } - System.out.println("stop testGetIdentitiesByPowerSearch"); - - } - - @Test public void testGetIdentitiesByPowerSearchWithGroups() { - System.out.println("start testGetIdentitiesByPowerSearchWithGroups"); - try { - Identity ident = getOrCreateIdentity("anIdentity"); - Identity ident2 = getOrCreateTestIdentity("extremegroovy"); - - // add some stats - ident = baseSecurityManager.saveIdentityStatus(ident, Identity.STATUS_ACTIV); - ident2 = baseSecurityManager.saveIdentityStatus(ident2, Identity.STATUS_ACTIV); - - // check on those four default groups - SecurityGroup admins, authors, anonymous; - admins = baseSecurityManager.findSecurityGroupByName(Constants.GROUP_ADMIN); - anonymous = baseSecurityManager.findSecurityGroupByName(Constants.GROUP_ANONYMOUS); - authors = baseSecurityManager.findSecurityGroupByName(Constants.GROUP_AUTHORS); - // test setup: identity is admin and author - baseSecurityManager.addIdentityToSecurityGroup(ident, admins); - baseSecurityManager.addIdentityToSecurityGroup(ident2, admins); - baseSecurityManager.addIdentityToSecurityGroup(ident, authors); - - // security group search test - DBFactory.getInstance().closeSession(); - SecurityGroup[] groups1 = {admins}; - SecurityGroup[] groups2 = {admins, authors}; - SecurityGroup[] groups3 = {authors}; - SecurityGroup[] groupsInvalid = {anonymous}; - - // basic query to find all system users without restrictions - List<Identity> results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, null, null, null, null, null, null); - assertTrue(results.size()>0); - - results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, null, null, null, null, null, Identity.STATUS_DELETED); - assertTrue(results.size() >0); - - results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, groups1, null, null, null, null, null, null, null); - assertTrue(results.size() >0); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, groups1, null, null, null, null); - assertTrue(results.size() >0); - - results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, groups2, null, null, null, null, null, null, null); - assertTrue(results.size() >0); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, groups2, null, null, null, null); - assertTrue(results.size() >0); - - results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, groups3, null, null, null, null, null, null, null); - assertTrue(results.size() >0); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, groups3, null, null, null, null); - assertTrue(results.size() >0); - - results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, groupsInvalid, null, null, null, null, null, null, null); - assertTrue(results.size() == 0); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, groupsInvalid, null, null, null, null); - assertTrue(results.size() == 0); - - results = baseSecurityManager.getIdentitiesByPowerSearch("an*tity", null, true, groups2, null, null, null, null, null, null, null); - assertTrue(results.size() == 1); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch("an*tity", null, true, groups2, null, null, null, null); - assertTrue(results.size() == 1); - - results = baseSecurityManager.getIdentitiesByPowerSearch("an*tity", null, true, groups1, null, null, null, null, null, null, null); - assertTrue(results.size() == 1); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch("an*tity", null, true, groups1, null, null, null, null); - assertTrue(results.size() == 1); - - // policy search test - DBFactory.getInstance().closeSession(); - List<Policy> policies = baseSecurityManager.getPoliciesOfSecurityGroup(admins); - PermissionOnResourceable[] adminPermissions = convertPoliciesListToPermissionOnResourceArray(policies); - policies = baseSecurityManager.getPoliciesOfSecurityGroup(anonymous); - PermissionOnResourceable[] anonymousPermissions = convertPoliciesListToPermissionOnResourceArray(policies); - - results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, adminPermissions, null, null, null, null, null, null); - assertTrue(results.size() >0); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, adminPermissions, null, null, null); - assertTrue(results.size() >0); - - results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, anonymousPermissions, null, null, null, null, null, null); - assertTrue(results.size() == 0); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, anonymousPermissions, null, null, null); - assertTrue(results.size() == 0); - - results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, groups2, anonymousPermissions, null, null, null, null, null, null); - assertTrue(results.size() == 0); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, groups2, anonymousPermissions, null, null, null); - assertTrue(results.size() == 0); - - results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, groups2, adminPermissions, null, null, null, null, null, null); - assertTrue(results.size() >0); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, groups2, adminPermissions, null, null, null); - assertTrue(results.size() >0); - - results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, groups3, adminPermissions, null, null, null, null, null, null); - assertTrue("Found no identities for group 'authors'",results.size() >0); - boolean isAuthor = true; - checkIdentitiesHasRoles(results, isAuthor); - - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, groups3, adminPermissions, null, null, null); - assertTrue("Found no identities for group 'authors'",results.size() >0); - checkIdentitiesHasRoles(results, isAuthor); - - results = baseSecurityManager.getIdentitiesByPowerSearch("an*tity", null, true, groups2, adminPermissions, null, null, null, null, null, null); - assertTrue(results.size() == 1); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch("an*tity", null, true, groups2, adminPermissions, null, null, null); - assertTrue(results.size() == 1); - - results = baseSecurityManager.getIdentitiesByPowerSearch("dontexist", null, true, groups2, adminPermissions, null, null, null, null, null, null); - assertTrue(results.size() == 0); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch("dontexist", null, true, groups2, adminPermissions, null, null, null); - assertTrue(results.size() == 0); - - // authentication provider search - String[] authProviders = {BaseSecurityModule.getDefaultAuthProviderIdentifier(), "Shib"}; - String[] authProvidersInvalid = {"nonexist"};// max length 8 ! - String[] authProviderNone = { null }; - String[] authProvidersAll = {BaseSecurityModule.getDefaultAuthProviderIdentifier(), "Shib", null }; - - results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, authProviders, null, null, null, null, null); - assertTrue(results.size() >0); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, null, authProviders, null, null); - assertTrue(results.size() >0); - - results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, authProvidersInvalid, null, null, null, null, null); - assertTrue(results.size() == 0); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, null, authProvidersInvalid, null, null); - assertTrue(results.size() == 0); - - results = baseSecurityManager.getIdentitiesByPowerSearch("an*tity", null, true, groups2, adminPermissions, authProviders, null, null, null, null, null); - assertTrue(results.size() == 1); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch("an*tity", null, true, groups2, adminPermissions, authProviders, null, null); - assertTrue(results.size() == 1); - - results = baseSecurityManager.getIdentitiesByPowerSearch("an*tity", null, true, groups2, adminPermissions, authProvidersInvalid, null, null, null, null, null); - assertTrue(results.size() == 0); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch("an*tity", null, true, groups2, adminPermissions, authProvidersInvalid, null, null); - assertTrue(results.size() == 0); - - results = baseSecurityManager.getIdentitiesByPowerSearch("dontexist", null, true, groups2, adminPermissions, authProviders, null, null, null, null, null); - assertTrue(results.size() == 0); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch("dontexist", null, true, groups2, adminPermissions, authProviders, null, null); - assertTrue(results.size() == 0); - - Authentication auth = baseSecurityManager.findAuthentication(ident, BaseSecurityModule.getDefaultAuthProviderIdentifier()); - baseSecurityManager.deleteAuthentication(auth); - DBFactory.getInstance().closeSession(); - - // ultimate tests - //Identity ident = getOrCreateIdentity("anIdentity"); - Date created = ident.getCreationDate(); - Calendar cal = Calendar.getInstance(); - cal.setTime(created); - cal.add(Calendar.DAY_OF_MONTH, -5); - Date before = cal.getTime(); - - DBFactory.getInstance().closeSession(); - results = baseSecurityManager.getIdentitiesByPowerSearch("groovy", null, true, groups1, adminPermissions, null, before, null, null, null, null); - assertTrue(results.size() == 0); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch("groovy", null, true, groups1, adminPermissions, null, before, null); - assertTrue(results.size() == 0); - - results = baseSecurityManager.getIdentitiesByPowerSearch("extremegroovy", null, true, groups1, adminPermissions, null, before, null, null, null, null); - assertTrue(results.size() == 1); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch("extremegroovy", null, true, groups1, adminPermissions, null, before, null); - assertTrue(results.size() == 1); - - results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, groups1, adminPermissions, authProviders, before, null, null, null, null); - assertTrue("Found no results", results.size() > 0); - checkIdentitiesAreInGroups(results, groups1); - checkIdentitiesHasAuthProvider(results,authProviders ); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, groups1, adminPermissions, authProviders, before, null); - assertTrue("Found no results", results.size() > 0); - checkIdentitiesAreInGroups(results, groups1); - checkIdentitiesHasAuthProvider(results,authProviders ); - - results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, groups1, adminPermissions, authProviderNone, before, null, null, null, null); - assertTrue("Found no results", results.size() > 0); - checkIdentitiesAreInGroups(results, groups1); - checkIdentitiesHasPermissions(results, adminPermissions); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, groups1, adminPermissions, authProviderNone, before, null); - assertTrue("Found no results", results.size() > 0); - checkIdentitiesAreInGroups(results, groups1); - checkIdentitiesHasPermissions(results, adminPermissions); - - results = baseSecurityManager.getIdentitiesByPowerSearch("%y", null, true, groups1, adminPermissions, authProvidersAll, before, null, null, null, null); - assertTrue(results.size() == 2); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch("%y", null, true, groups1, adminPermissions, authProvidersAll, before, null); - assertTrue(results.size() == 2); - - results = baseSecurityManager.getIdentitiesByPowerSearch("%y", null, true, groups1, adminPermissions, authProvidersAll, null, before, null, null, null); - assertTrue(results.size() == 0); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch("%y", null, true, groups1, adminPermissions, authProvidersAll, null, before); - assertTrue(results.size() == 0); - - results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, groups1, adminPermissions, null, before, null, null, null, null); - sysoutResults(results); - assertTrue("Found no results", results.size() > 0); - checkIdentitiesAreInGroups(results, groups1); - checkIdentitiesHasPermissions(results, adminPermissions); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, groups1, adminPermissions, null, before, null); - assertTrue("Found no results", results.size() > 0); - checkIdentitiesAreInGroups(results, groups1); - checkIdentitiesHasPermissions(results, adminPermissions); - - System.out.println("Tschagaaa, good job!"); - DBFactory.getInstance().closeSession(); - } catch (Exception e) { - e.printStackTrace(); - } catch (Error err) { - err.printStackTrace(); - } - System.out.println("stop testGetIdentitiesByPowerSearchWithGroups"); - } - - - @Test public void testGetIdentitiesByPowerSearchAuthProvider(){ - - - System.out.println("start testGetIdentitiesByPowerSearchAuthProvider"); - try { - //authentication provider search - String[] authProviderNone = { null }; - String[] authProvidersAll = {BaseSecurityModule.getDefaultAuthProviderIdentifier(), "Shib", null }; - - //check count before adding - List<Identity> results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, authProviderNone, null, null, null, null, null); - int prevProviderNoneCount = results.size(); - //add two new users with authProviderNone - getOrCreateTestIdentityWithAuth("authNoneOne", null); - getOrCreateTestIdentityWithAuth("authNoneTwo", null); - DBFactory.getInstance().closeSession(); - // special case: no auth provider - // test if 2 new users are found. - results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, authProviderNone, null, null, null, null, null); - assertEquals("Wrong number of identities, search with (authProviderNone)", prevProviderNoneCount, results.size() - 2); - - - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, null, authProviderNone, null, null); - prevProviderNoneCount = results.size(); - getOrCreateTestIdentityWithAuth("authNoneThree", null); - getOrCreateTestIdentityWithAuth("authNoneFour", null); - DBFactory.getInstance().closeSession(); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, null, authProviderNone, null, null); - assertEquals("Wrong number of visible identities, search with (authProviderNone)", prevProviderNoneCount, results.size() - 2 ); - - - - results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, authProviderNone, null, null, null, null, null); - prevProviderNoneCount = results.size(); - getOrCreateTestIdentityWithAuth("authNoneFive", null); - getOrCreateTestIdentityWithAuth("authNoneSix", null); - DBFactory.getInstance().closeSession(); - results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, authProviderNone, null, null, null, null, null); - assertEquals("Wrong number of identities, search with (authProviderNone)", prevProviderNoneCount, results.size() - 2 ); - - - - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, null, authProviderNone, null, null); - prevProviderNoneCount = results.size(); - getOrCreateTestIdentityWithAuth("authNoneSeven", null); - getOrCreateTestIdentityWithAuth("authNoneEight", null); - DBFactory.getInstance().closeSession(); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, null, authProviderNone, null, null); - assertEquals("Wrong number of visible identities, search with (authProviderNone)", prevProviderNoneCount, results.size() - 2); - - - - results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, authProvidersAll, null, null, null, null, null); - prevProviderNoneCount = results.size(); - //add a new identity per entry of AuthProvidersAll - getOrCreateTestIdentityWithAuth("authTwelve", "Shib"); - getOrCreateTestIdentityWithAuth("authThirteen", BaseSecurityModule.getDefaultAuthProviderIdentifier()); - getOrCreateTestIdentityWithAuth("authForteen", null); - DBFactory.getInstance().closeSession(); - results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, authProvidersAll, null, null, null, null, null); - assertTrue(results.size() - prevProviderNoneCount == 3); - - - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, null, authProvidersAll, null, null); - prevProviderNoneCount = results.size(); -//add a new identity per entry of AuthProvidersAll - getOrCreateTestIdentityWithAuth("authSixteen", "Shib"); - getOrCreateTestIdentityWithAuth("authSeventeen", BaseSecurityModule.getDefaultAuthProviderIdentifier()); - getOrCreateTestIdentityWithAuth("authEighteen", null); - DBFactory.getInstance().closeSession(); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, null, authProvidersAll, null, null); - assertTrue(results.size() - prevProviderNoneCount == 3); - } catch (Exception e) { - e.printStackTrace(); - } catch (Error err) { - err.printStackTrace(); - } - System.out.println("stop testGetIdentitiesByPowerSearchAuthProvider"); - - - - } - - - - // Hint : Properties for testing with HSQL must be lowercaseHSQL DB does not - // mysql 'like' found results with upper and lowercase - // HSQL 'like' found only results with lowercase - // Our implementation of powersearch convert search-properties to lowercase ! - @Test public void testGetIdentitiesByPowerSearchWithUserPropertiesAndIntersectionOption() { - // create two test users - - System.out.println("start testGetIdentitiesByPowerSearchWithUserPropertiesAndIntersectionOption"); - try { - User onePropUser = UserManager.getInstance().createUser("onepropuser", "onepropuser", "onepropuser@lustig.com"); - onePropUser.setProperty(UserConstants.FIRSTNAME, "one"); - Identity onePropeIdentity = baseSecurityManager.createAndPersistIdentityAndUser("onePropUser", onePropUser, BaseSecurityModule.getDefaultAuthProviderIdentifier(), "onepropuser", "ppp"); - Assert.assertNotNull(onePropeIdentity); - - User twoPropUser = UserManager.getInstance().createUser("twopropuser", "twopropuser", "twopropuser@lustig.com"); - twoPropUser.setProperty(UserConstants.FIRSTNAME, "two"); - twoPropUser.setProperty(UserConstants.LASTNAME, "prop"); - Identity twoPropeIdentity = baseSecurityManager.createAndPersistIdentityAndUser("twopropuser", twoPropUser, BaseSecurityModule.getDefaultAuthProviderIdentifier(), "twopropuser", "ppp"); - Assert.assertNotNull(twoPropeIdentity); - // commit - DBFactory.getInstance().closeSession(); - - HashMap<String, String> userProperties; - - // find first - userProperties = new HashMap<String, String>(); - userProperties.put(UserConstants.FIRSTNAME, "one"); - List<Identity> results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); - assertTrue(results.size() == 1); - - // no intersection - all properties optional - userProperties = new HashMap<String, String>(); - userProperties.put(UserConstants.FIRSTNAME, "one"); - userProperties.put(UserConstants.LASTNAME, "somewrongvalue"); - results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); - assertTrue(results.size() == 0); - - // no intersection - all properties optional - userProperties = new HashMap<String, String>(); - userProperties.put(UserConstants.FIRSTNAME, "one"); - userProperties.put(UserConstants.LASTNAME, "somewrongvalue"); - results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, false, null, null, null, null, null, null, null, null); - assertTrue(results.size() == 1); - - // find second - userProperties = new HashMap<String, String>(); - userProperties.put(UserConstants.FIRSTNAME, "two"); - results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); - assertTrue(results.size() == 1); - - userProperties = new HashMap<String, String>(); - userProperties.put(UserConstants.FIRSTNAME, "two"); - userProperties.put(UserConstants.LASTNAME, "somewrongvalue"); - results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); - assertTrue(results.size() == 0); - - // no intersection - all properties optional - userProperties = new HashMap<String, String>(); - userProperties.put(UserConstants.FIRSTNAME, "two"); - userProperties.put(UserConstants.LASTNAME, "somewrongvalue"); - results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, false, null, null, null, null, null, null, null, null); - assertTrue(results.size() == 1); - - userProperties = new HashMap<String, String>(); - userProperties.put(UserConstants.FIRSTNAME, "two"); - userProperties.put(UserConstants.LASTNAME, "prop"); - results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); - assertTrue(results.size() == 1); - - // find all - // 1. basic query to find all system users without restrictions - results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, null, null, null, null, null, null); - assertTrue(results.size()>0); - int numberOfAllUsers = results.size(); - - userProperties = new HashMap<String, String>(); - results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); - assertEquals("Wrong search result 'empty userProperties'", numberOfAllUsers, results.size()); - - userProperties = new HashMap<String, String>(); - results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, false, null, null, null, null, null, null, null, null); - assertEquals("Wrong search result 'empty userProperties and intersection=false'", numberOfAllUsers, results.size()); - - DBFactory.getInstance().closeSession(); - } catch (Exception e) { - e.printStackTrace(); - } catch (Error err) { - err.printStackTrace(); - } - System.out.println("stop testGetIdentitiesByPowerSearchWithUserPropertiesAndIntersectionOption"); - - } - - @Test public void testMultipleUserPropertiesSearches() { - System.out.println("start testMultipleUserPropertiesSearches"); - // create two test users - try { - User multiPropUser = UserManager.getInstance().createUser("multipropuser", "multipropuser", "multipropuser@lustig.com"); - multiPropUser.setProperty(UserConstants.FIRSTNAME, "multi"); - multiPropUser.setProperty(UserConstants.LASTNAME, "prop"); - multiPropUser.setProperty(UserConstants.INSTITUTIONALNAME, "multiinst"); - multiPropUser.setProperty(UserConstants.INSTITUTIONALEMAIL, "multiinst@lustig.com"); - multiPropUser.setProperty(UserConstants.INSTITUTIONALUSERIDENTIFIER, "multiinst"); - multiPropUser.setProperty(UserConstants.CITY, "züri"); - Identity onePropeIdentity = baseSecurityManager.createAndPersistIdentityAndUser("multiPropUser", multiPropUser, BaseSecurityModule.getDefaultAuthProviderIdentifier(), "multipropuser", "ppp"); - Assert.assertNotNull(onePropeIdentity); - - // commit - DBFactory.getInstance().closeSession(); - - HashMap<String, String> userProperties; - - 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); - assertTrue(results.size() == 1); - - userProperties = new HashMap<String, String>(); - userProperties.put(UserConstants.FIRSTNAME, "multi"); - userProperties.put(UserConstants.LASTNAME, "prop"); - results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); - assertTrue(results.size() == 1); - - userProperties = new HashMap<String, String>(); - userProperties.put(UserConstants.FIRSTNAME, "multi"); - userProperties.put(UserConstants.LASTNAME, "prop"); - results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, false, null, null, null, null, null, null, null, null); - assertTrue(results.size() == 2); // multipropuser and twopropuser - - userProperties = new HashMap<String, String>(); - userProperties.put(UserConstants.FIRSTNAME, "multi"); - userProperties.put(UserConstants.LASTNAME, "prop"); - userProperties.put(UserConstants.INSTITUTIONALNAME, "multiinst"); - results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); - assertTrue(results.size() == 1); - - userProperties = new HashMap<String, String>(); - userProperties.put(UserConstants.FIRSTNAME, "multi"); - userProperties.put(UserConstants.LASTNAME, "prop"); - userProperties.put(UserConstants.INSTITUTIONALNAME, "multiinst"); - userProperties.put(UserConstants.INSTITUTIONALEMAIL, "multiinst@lustig.com"); - results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); - assertTrue(results.size() == 1); - - userProperties = new HashMap<String, String>(); - userProperties.put(UserConstants.FIRSTNAME, "multi"); - userProperties.put(UserConstants.LASTNAME, "prop"); - userProperties.put(UserConstants.INSTITUTIONALNAME, "multiinst"); - userProperties.put(UserConstants.INSTITUTIONALEMAIL, "multiinst@lustig.com"); - userProperties.put(UserConstants.INSTITUTIONALUSERIDENTIFIER, "multiinst"); - userProperties.put(UserConstants.CITY, "züri"); - results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); - assertTrue(results.size() == 1); - - // Test to reproduce for OLAT-2820: - // multipropuser matches firstname, lastname and city - // twopropuser matches lastname and has a firstname but not city - // Since it intersection flag is set to false it must find both users! - userProperties = new HashMap<String, String>(); - userProperties.put(UserConstants.FIRSTNAME, "multi"); - userProperties.put(UserConstants.LASTNAME, "prop"); -// TODO: fg,cg: Did not found results with empty user-properties -// twopro has same lastname but different firstname => will be found with userPropertiesInterseactionSearch = true -// twopro has no other user-properties, with current solution no OR-search runs correct with empty user-properties like twopro user has. - -// userProperties.put(UserConstants.INSTITUTIONALNAME, "MultiInst"); -// userProperties.put(UserConstants.INSTITUTIONALEMAIL, "MultiInst@lustig.com"); -// userProperties.put(UserConstants.INSTITUTIONALUSERIDENTIFIER, "MultiInst"); -// userProperties.put(UserConstants.CITY, "Züri"); - results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, false, null, null, null, null, null, null, null, null); - assertTrue(results.size() == 2); // multipropuser and twopropuser - DBFactory.getInstance().closeSession(); - } catch (Exception e) { - e.printStackTrace(); - } catch (Error err) { - err.printStackTrace(); - } - - System.out.println("stop testMultipleUserPropertiesSearches"); - } - - @Test public void testGetIdentitiesByPowerSearchWithDate() { - System.out.println("start testGetIdentitiesByPowerSearchWithDate"); - try { - Identity ident = getOrCreateIdentity("anIdentity"); - Date created = ident.getCreationDate(); - Calendar cal = Calendar.getInstance(); - cal.setTime(created); - cal.add(Calendar.DAY_OF_MONTH, -5); - Date before = cal.getTime(); - cal.add(Calendar.DAY_OF_MONTH, 10); - Date after = cal.getTime(); - - // basic query to find all system users without restrictions - List<Identity> results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, null, null, null, null, null, null); - assertTrue(results.size()>0); - int numberOfAllUsers = results.size(); - - results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, null, null, null, null, null, Identity.STATUS_DELETED); - assertTrue(results.size() >0); - int numberOfDeletedUsers = results.size(); - - Date createdAfter = before; - Date createdBefore = after; - results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, null, createdAfter, createdBefore, null, null, null); - assertEquals("Search with date (createdAfter,createdBefore) delivers not the same number of users", numberOfAllUsers, results.size()); - - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, null, null, before, after); - assertEquals("Search (visible identities) with date (createdAfter,createdBefore) delivers not the same number of users", (numberOfAllUsers - numberOfDeletedUsers) , results.size()); // One identity is deleted - - results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, null, null, after, null, null, null); - assertEquals("Search with date (only after) delivers not the same number of users", numberOfAllUsers, results.size()); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, null, null, null, after); - assertEquals("Search (visible identities) with date (createdAfter,createdBefore) delivers not the same number of users", (numberOfAllUsers - numberOfDeletedUsers) , results.size()); // One identity is deleted - - results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, null, before, null, null, null, null); - assertEquals("Search with date (only before) delivers not the same number of users", numberOfAllUsers, results.size()); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, null, null, before, null); - assertEquals("Search (visible identities) with date (createdAfter,createdBefore) delivers not the same number of users", (numberOfAllUsers - numberOfDeletedUsers) , results.size()); // One identity is deleted - - results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, null, after, before, null, null, null); - assertTrue(results.size() == 0); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, null, null, after, before); - assertTrue(results.size() == 0); - - results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, null, after, null, null, null, null); - assertTrue(results.size() == 0); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, null, null, after, null); - assertTrue(results.size() == 0); - - results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, null, null, before, null, null, null); - assertTrue(results.size() == 0); - results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, null, null, null, before); - assertTrue(results.size() == 0); - } catch (Exception e) { - e.printStackTrace(); - } catch (Error err) { - err.printStackTrace(); - } - - - System.out.println("end testGetIdentitiesByPowerSearchWithDate"); - } - - //////////////////// - // Helper - /////////////////// - private Identity getOrCreateIdentity(String name) { - Identity ident = baseSecurityManager.findIdentityByName(name); - if (ident != null) { - return ident; - } else { - return JunitTestHelper.createAndPersistIdentityAsUser(name); - } - } - - private Identity getOrCreateTestIdentity(String name) { - return getOrCreateTestIdentityWithAuth(name,BaseSecurityModule.getDefaultAuthProviderIdentifier()); - } - - private Identity getOrCreateTestIdentityWithAuth(String name, String authProvider){ - Identity ident = baseSecurityManager.findIdentityByName(name); - if (ident != null) { - return ident; - } else { - User user = UserManager.getInstance().createUser(name+"_Firstname", name + "_Lastname", name + "@lustig.com"); - user.setProperty(UserConstants.INSTITUTIONALNAME, "unizh2"); - user.setProperty(UserConstants.INSTITUTIONALUSERIDENTIFIER, "12-345-678-908"); - ident = baseSecurityManager.createAndPersistIdentityAndUser(name, user, authProvider, name, "ppp"); - return ident; - } - } - - private PermissionOnResourceable[] convertPoliciesListToPermissionOnResourceArray(List<Policy> policies) { - PermissionOnResourceable[] array = new PermissionOnResourceable[policies.size()]; - for (int i = 0; i < policies.size() ; i++) { - Policy policy = policies.get(i); - PermissionOnResourceable por = new PermissionOnResourceable(policy.getPermission(), policy.getOlatResource()); - array[i] = por; - } - - return array; - } - - /* - * Only for debugging to see identities result list. - */ - private void sysoutResults(List<Identity> results) { - log.info("TEST results.size()=" + results.size()); - for (Identity identity:results) { - log.debug("TEST ident=" + identity); - } - } - - // check Helper Methoden - //////////////////////// - private void checkIdentitiesHasPermissions(List<Identity> results, PermissionOnResourceable[] adminPermissions) { - for (Identity resultIdentity: results) { - for (int i = 0; i < adminPermissions.length; i++) { - assertTrue( baseSecurityManager.isIdentityPermittedOnResourceable(resultIdentity, adminPermissions[i].getPermission(), adminPermissions[i].getOlatResourceable() ) ); - } - } - } - - private void checkIdentitiesHasAuthProvider(List<Identity> results, String[] authProviders) { - for (Identity resultIdentity : results) { - boolean foundIdentityWithAuth = false; - for (int i = 0; i < authProviders.length; i++) { - Authentication authentication = baseSecurityManager.findAuthentication(resultIdentity, authProviders[i]); - if (authentication != null) { - foundIdentityWithAuth = true; - } - } - assertTrue("Coud not found any authentication for identity=" + resultIdentity, foundIdentityWithAuth); - } - } - - private void checkIdentitiesAreInGroups(List<Identity> results, SecurityGroup[] groups1) { - for (Identity resultIdentity:results) { - boolean foundIdentityInSecGroup = false; - for (int i = 0; i < groups1.length; i++) { - if (baseSecurityManager.isIdentityInSecurityGroup(resultIdentity, groups1[i]) ) { - foundIdentityInSecGroup = true; - } - } - assertTrue("Coud not found identity=" + resultIdentity, foundIdentityInSecGroup); - } - } - - private void checkIdentitiesHasRoles(List<Identity> results, boolean checkIsAuthor) { - for (Identity resultIdentity: results) { - Roles roles = baseSecurityManager.getRoles(resultIdentity); - if (checkIsAuthor) { - assertTrue("Identity has not roles author, identity=" + resultIdentity, roles.isAuthor()); - } - } - } -} \ No newline at end of file diff --git a/src/test/java/org/olat/basesecurity/GetIdentitiesByPowerSearchTest.java b/src/test/java/org/olat/basesecurity/GetIdentitiesByPowerSearchTest.java new file mode 100644 index 0000000000000000000000000000000000000000..f3d1792b15e04e728983060817f6c81e6ded7255 --- /dev/null +++ b/src/test/java/org/olat/basesecurity/GetIdentitiesByPowerSearchTest.java @@ -0,0 +1,821 @@ +/** +* OLAT - Online Learning and Training<br> +* http://www.olat.org +* <p> +* Licensed under the Apache License, Version 2.0 (the "License"); <br> +* you may not use this file except in compliance with the License.<br> +* You may obtain a copy of the License at +* <p> +* http://www.apache.org/licenses/LICENSE-2.0 +* <p> +* Unless required by applicable law or agreed to in writing,<br> +* software distributed under the License is distributed on an "AS IS" BASIS, <br> +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> +* See the License for the specific language governing permissions and <br> +* limitations under the License. +* <p> +* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> +* University of Zurich, Switzerland. +* <hr> +* <a href="http://www.openolat.org"> +* OpenOLAT - Online Learning and Training</a><br> +* This file has been modified by the OpenOLAT community. Changes are licensed +* under the Apache 2.0 license as the original file. +* <p> +*/ + +package org.olat.basesecurity; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import junit.framework.Assert; + +import org.junit.Test; +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; +import org.olat.core.id.UserConstants; +import org.olat.core.logging.OLog; +import org.olat.core.logging.Tracing; +import org.olat.test.JunitTestHelper; +import org.olat.test.OlatTestCase; +import org.olat.user.UserManager; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * Description: <br> + * + * @author Felix Jost + */ +public class GetIdentitiesByPowerSearchTest extends OlatTestCase { + + private static final OLog log = Tracing.createLoggerFor(GetIdentitiesByPowerSearchTest.class); + + @Autowired + private BaseSecurity baseSecurityManager; + + @Test + public void testGetIdentitiesByPowerSearch() { + String suffix = UUID.randomUUID().toString(); + Identity ident = JunitTestHelper.createAndPersistIdentityAsUser("anIdentity-" + suffix); + Identity uniIdent = getOrCreateTestIdentity("extremegroovy-" + suffix); + Assert.assertNotNull(uniIdent); + Identity deletedIdent = getOrCreateTestIdentity("delete"); + deletedIdent = baseSecurityManager.saveIdentityStatus(deletedIdent, Identity.STATUS_DELETED); + + SecurityGroup admins = baseSecurityManager.findSecurityGroupByName(Constants.GROUP_ADMIN); + baseSecurityManager.addIdentityToSecurityGroup(deletedIdent, admins); + + + // basic query to find all system users without restrictions + List<Identity> results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, null, null, null, null, null, null); + assertTrue(results.size()>0); + int numberOfAllUsers = results.size(); + + results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, null, null, null, null, null,Identity.STATUS_ACTIV); + assertTrue(results.size()>0); + int numberOfActiveUsers = results.size(); + + results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, null, null, null, null, null, Identity.STATUS_DELETED); + assertTrue(results.size() >0); + int numberOfDeletedUsers = results.size(); + assertEquals("Number of all users != activeUsers + deletedUsers" , numberOfAllUsers, numberOfActiveUsers + numberOfDeletedUsers); + + // user attributes search test + DBFactory.getInstance().closeSession(); + 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()); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(ident.getName(), null, true, null, null, null, null, null); + assertTrue(results.size() == 1); + assertEquals("Wrong search result (search with username)" + ident.getName() + "' ",ident.getName() , results.get(0).getName()); + + results = baseSecurityManager.getIdentitiesByPowerSearch("an*tity-" + suffix, null, true, null, null, null, null, null, null, null, null); + assertTrue(results.size() == 1); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch("an*tity-" + suffix, null, true, null, null, null, null, null); + assertTrue(results.size() == 1); + + results = baseSecurityManager.getIdentitiesByPowerSearch("lalal", null, true, null, null, null, null, null, null, null, null); + Assert.assertTrue(results.isEmpty()); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch("lalal", null, true, null, null, null, null, null); + Assert.assertTrue(results.isEmpty()); + } + + @Test + public void testGetIdentitiesByPowerSearch_institution() { + String suffix = UUID.randomUUID().toString(); + Identity ident = JunitTestHelper.createAndPersistIdentityAsUser("anIdentity-" + suffix); + Identity uniIdent = getOrCreateTestIdentity("extremegroovy-" + suffix); + Assert.assertNotNull(uniIdent); + Identity deletedIdent = getOrCreateTestIdentity("delete"); + deletedIdent = baseSecurityManager.saveIdentityStatus(deletedIdent, Identity.STATUS_DELETED); + + SecurityGroup admins = baseSecurityManager.findSecurityGroupByName(Constants.GROUP_ADMIN); + baseSecurityManager.addIdentityToSecurityGroup(deletedIdent, admins); + + + //search institutional name with *zh2 + Map<String, String> userProperties = new HashMap<String, String>(); + userProperties.put(UserConstants.INSTITUTIONALNAME, "*zh2"); + List<Identity> zh2Results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); + Assert.assertFalse("Wrong search result 'UserConstants.INSTITUTIONALNAME='*zh2'", zh2Results.contains(ident)); + Assert.assertTrue("Wrong search result 'UserConstants.INSTITUTIONALNAME='*zh2'", zh2Results.contains(uniIdent)); + Assert.assertTrue("Wrong search result 'UserConstants.INSTITUTIONALNAME='*zh2'", zh2Results.contains(deletedIdent)); + List<Identity> zh2VisibleResults = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null); + Assert.assertFalse("Wrong search result for visible 'UserConstants.INSTITUTIONALNAME='*zh2'", zh2VisibleResults.contains(ident)); + Assert.assertTrue("Wrong search result for visible 'UserConstants.INSTITUTIONALNAME='*zh2'", zh2VisibleResults.contains(uniIdent)); + Assert.assertFalse("Wrong search result for visible 'UserConstants.INSTITUTIONALNAME='*zh2'", zh2VisibleResults.contains(deletedIdent)); + + //search institutional not found (identifier) + userProperties = new HashMap<String, String>(); + userProperties.put(UserConstants.INSTITUTIONALNAME, "un"); + userProperties.put(UserConstants.INSTITUTIONALUSERIDENTIFIER, "678"); // per default the % is only attached at the end of the query. + List<Identity> results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); + Assert.assertTrue(results.isEmpty()); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null); + Assert.assertTrue(results.isEmpty()); + + //search institutional name and user identifier + userProperties = new HashMap<String, String>(); + userProperties.put(UserConstants.INSTITUTIONALNAME, "un"); + userProperties.put(UserConstants.INSTITUTIONALUSERIDENTIFIER, "%678"); + List<Identity> results_678 = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); + Assert.assertFalse(results_678.contains(ident)); + Assert.assertTrue(results_678.contains(uniIdent)); + Assert.assertTrue(results_678.contains(deletedIdent)); + + //search visible institutional name and user identifier + List<Identity> visible_678_results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null); + Assert.assertFalse(visible_678_results.contains(ident)); + Assert.assertTrue(visible_678_results.contains(uniIdent)); + Assert.assertFalse(visible_678_results.contains(deletedIdent)); + + //search institutional name and user identifier 12-345-678* + userProperties = new HashMap<String, String>(); + userProperties.put(UserConstants.INSTITUTIONALNAME, "un"); + userProperties.put(UserConstants.INSTITUTIONALUSERIDENTIFIER, "12-345-678"); + results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); + Assert.assertFalse(results.contains(ident)); + Assert.assertTrue(results.contains(uniIdent)); + Assert.assertTrue(results.contains(deletedIdent)); + + //search visible institutional name and user identifier 12-345-678* + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null); + Assert.assertFalse(results.contains(ident)); + Assert.assertTrue(results.contains(uniIdent)); + Assert.assertFalse(results.contains(deletedIdent)); + + //search institutional name and user identifier 888 (nothing to find) + userProperties = new HashMap<String, String>(); + userProperties.put(UserConstants.INSTITUTIONALNAME, "un"); + userProperties.put(UserConstants.INSTITUTIONALUSERIDENTIFIER, "888"); + results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); + Assert.assertTrue(results.isEmpty()); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null); + Assert.assertTrue(results.isEmpty()); + + //search institutional name + userProperties = new HashMap<String, String>(); + userProperties.put(UserConstants.INSTITUTIONALNAME, "un"); + results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); + Assert.assertFalse(results.contains(ident)); + Assert.assertTrue(results.contains(uniIdent)); + Assert.assertTrue(results.contains(deletedIdent)); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null); + Assert.assertFalse(results.contains(ident)); + Assert.assertTrue(results.contains(uniIdent)); + Assert.assertFalse(results.contains(deletedIdent)); + results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, Identity.STATUS_ACTIV); + Assert.assertFalse(results.contains(ident)); + Assert.assertTrue(results.contains(uniIdent)); + Assert.assertFalse(results.contains(deletedIdent)); + } + + @Test + public void testGetIdentitiesByPowerSearch_groups() { + String suffix = UUID.randomUUID().toString(); + Identity ident = JunitTestHelper.createAndPersistIdentityAsUser("anIdentity-" + suffix); + Identity ident2 = getOrCreateTestIdentity("extremegroovy-" + suffix); + + // add some stats + ident = baseSecurityManager.saveIdentityStatus(ident, Identity.STATUS_ACTIV); + ident2 = baseSecurityManager.saveIdentityStatus(ident2, Identity.STATUS_ACTIV); + + // check on those four default groups + SecurityGroup admins = baseSecurityManager.findSecurityGroupByName(Constants.GROUP_ADMIN); + SecurityGroup anonymous = baseSecurityManager.findSecurityGroupByName(Constants.GROUP_ANONYMOUS); + SecurityGroup authors = baseSecurityManager.findSecurityGroupByName(Constants.GROUP_AUTHORS); + // test setup: identity is admin and author + baseSecurityManager.addIdentityToSecurityGroup(ident, admins); + baseSecurityManager.addIdentityToSecurityGroup(ident2, admins); + baseSecurityManager.addIdentityToSecurityGroup(ident, authors); + + // security group search test + DBFactory.getInstance().closeSession(); + SecurityGroup[] groups1 = {admins}; + SecurityGroup[] groups2 = {admins, authors}; + SecurityGroup[] groups3 = {authors}; + SecurityGroup[] groupsInvalid = {anonymous}; + + // basic query to find all system users without restrictions + List<Identity> results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, null, null, null, null, null, null); + Assert.assertFalse(results.isEmpty()); + + results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, null, null, null, null, null, Identity.STATUS_DELETED); + Assert.assertFalse(results.isEmpty()); + + results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, groups1, null, null, null, null, null, null, null); + Assert.assertFalse(results.isEmpty()); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, groups1, null, null, null, null); + Assert.assertFalse(results.isEmpty()); + + results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, groups2, null, null, null, null, null, null, null); + Assert.assertFalse(results.isEmpty()); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, groups2, null, null, null, null); + Assert.assertFalse(results.isEmpty()); + + results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, groups3, null, null, null, null, null, null, null); + Assert.assertFalse(results.isEmpty()); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, groups3, null, null, null, null); + Assert.assertFalse(results.isEmpty()); + + results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, groupsInvalid, null, null, null, null, null, null, null); + Assert.assertTrue(results.isEmpty()); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, groupsInvalid, null, null, null, null); + Assert.assertTrue(results.isEmpty()); + + results = baseSecurityManager.getIdentitiesByPowerSearch("an*tity-" + suffix, null, true, groups2, null, null, null, null, null, null, null); + Assert.assertEquals(1, results.size()); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch("an*tity-" + suffix, null, true, groups2, null, null, null, null); + Assert.assertEquals(1, results.size()); + + results = baseSecurityManager.getIdentitiesByPowerSearch("an*tity-" + suffix, null, true, groups1, null, null, null, null, null, null, null); + Assert.assertEquals(1, results.size()); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch("an*tity-" + suffix, null, true, groups1, null, null, null, null); + Assert.assertEquals(1, results.size()); + } + + + @Test + public void testGetIdentitiesByPowerSearch_policies() { + String suffix = UUID.randomUUID().toString(); + Identity ident = JunitTestHelper.createAndPersistIdentityAsUser("anIdentity-" + suffix); + Identity ident2 = getOrCreateTestIdentity("extremegroovy-" + suffix); + + // add some stats + ident = baseSecurityManager.saveIdentityStatus(ident, Identity.STATUS_ACTIV); + ident2 = baseSecurityManager.saveIdentityStatus(ident2, Identity.STATUS_ACTIV); + + // check on those four default groups + SecurityGroup admins = baseSecurityManager.findSecurityGroupByName(Constants.GROUP_ADMIN); + SecurityGroup anonymous = baseSecurityManager.findSecurityGroupByName(Constants.GROUP_ANONYMOUS); + SecurityGroup authors = baseSecurityManager.findSecurityGroupByName(Constants.GROUP_AUTHORS); + // test setup: identity is admin and author + baseSecurityManager.addIdentityToSecurityGroup(ident, admins); + baseSecurityManager.addIdentityToSecurityGroup(ident2, admins); + baseSecurityManager.addIdentityToSecurityGroup(ident, authors); + + // policy search test + DBFactory.getInstance().closeSession(); + 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(); + SecurityGroup[] groups2 = {admins, authors}; + SecurityGroup[] groups3 = {authors}; + + List<Identity> results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, adminPermissions, null, null, null, null, null, null); + Assert.assertFalse(results.isEmpty()); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, adminPermissions, null, null, null); + Assert.assertFalse(results.isEmpty()); + + results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, anonymousPermissions, null, null, null, null, null, null); + assertTrue(results.size() == 0); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, anonymousPermissions, null, null, null); + assertTrue(results.size() == 0); + + results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, groups2, anonymousPermissions, null, null, null, null, null, null); + assertTrue(results.size() == 0); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, groups2, anonymousPermissions, null, null, null); + assertTrue(results.size() == 0); + + results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, groups2, adminPermissions, null, null, null, null, null, null); + assertTrue(results.size() >0); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, groups2, adminPermissions, null, null, null); + assertTrue(results.size() >0); + + results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, groups3, adminPermissions, null, null, null, null, null, null); + assertTrue("Found no identities for group 'authors'",results.size() > 0); + boolean isAuthor = true; + checkIdentitiesHasRoles(results, isAuthor); + + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, groups3, adminPermissions, null, null, null); + assertTrue("Found no identities for group 'authors'",results.size() > 0); + checkIdentitiesHasRoles(results, isAuthor); + + results = baseSecurityManager.getIdentitiesByPowerSearch("an*tity-" + suffix, null, true, groups2, adminPermissions, null, null, null, null, null, null); + assertTrue(results.size() == 1); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch("an*tity-" + suffix, null, true, groups2, adminPermissions, null, null, null); + assertTrue(results.size() == 1); + + results = baseSecurityManager.getIdentitiesByPowerSearch("dontexist", null, true, groups2, adminPermissions, null, null, null, null, null, null); + assertTrue(results.size() == 0); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch("dontexist", null, true, groups2, adminPermissions, null, null, null); + assertTrue(results.size() == 0); + } + + @Test + public void testGetIdentitiesByPowerSearch_authProvider() { + String suffix = UUID.randomUUID().toString(); + Identity ident = JunitTestHelper.createAndPersistIdentityAsUser("anIdentity-" + suffix); + Identity ident2 = getOrCreateTestIdentity("extremegroovy-" + suffix); + + // add some stats + ident = baseSecurityManager.saveIdentityStatus(ident, Identity.STATUS_ACTIV); + ident2 = baseSecurityManager.saveIdentityStatus(ident2, Identity.STATUS_ACTIV); + + // check on those four default groups + SecurityGroup admins = baseSecurityManager.findSecurityGroupByName(Constants.GROUP_ADMIN); + SecurityGroup authors = baseSecurityManager.findSecurityGroupByName(Constants.GROUP_AUTHORS); + // test setup: identity is admin and author + baseSecurityManager.addIdentityToSecurityGroup(ident, admins); + baseSecurityManager.addIdentityToSecurityGroup(ident2, admins); + baseSecurityManager.addIdentityToSecurityGroup(ident, authors); + + SecurityGroup[] groups1 = { admins }; + SecurityGroup[] groups2 = { admins, authors }; + + // policy search test + DBFactory.getInstance().closeSession(); + List<Policy> policies = baseSecurityManager.getPoliciesOfSecurityGroup(admins); + PermissionOnResourceable[] adminPermissions = convertPoliciesListToPermissionOnResourceArray(policies); + + // authentication provider search + String[] authProviders = {BaseSecurityModule.getDefaultAuthProviderIdentifier(), "Shib"}; + String[] authProvidersInvalid = {"nonexist"};// max length 8 ! + String[] authProviderNone = { null }; + String[] authProvidersAll = {BaseSecurityModule.getDefaultAuthProviderIdentifier(), "Shib", null }; + + List<Identity> results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, authProviders, null, null, null, null, null); + Assert.assertFalse(results.isEmpty()); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, null, authProviders, null, null); + Assert.assertFalse(results.isEmpty()); + + results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, authProvidersInvalid, null, null, null, null, null); + Assert.assertTrue(results.isEmpty()); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, null, authProvidersInvalid, null, null); + Assert.assertTrue(results.isEmpty()); + + results = baseSecurityManager.getIdentitiesByPowerSearch("an*tity-" + suffix, null, true, groups2, adminPermissions, authProviders, null, null, null, null, null); + Assert.assertEquals(1, results.size()); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch("an*tity-" + suffix, null, true, groups2, adminPermissions, authProviders, null, null); + Assert.assertEquals(1, results.size()); + + results = baseSecurityManager.getIdentitiesByPowerSearch("an*tity", null, true, groups2, adminPermissions, authProvidersInvalid, null, null, null, null, null); + Assert.assertTrue(results.isEmpty()); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch("an*tity", null, true, groups2, adminPermissions, authProvidersInvalid, null, null); + Assert.assertTrue(results.isEmpty()); + + results = baseSecurityManager.getIdentitiesByPowerSearch("dontexist", null, true, groups2, adminPermissions, authProviders, null, null, null, null, null); + Assert.assertTrue(results.isEmpty()); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch("dontexist", null, true, groups2, adminPermissions, authProviders, null, null); + Assert.assertTrue(results.isEmpty()); + + Authentication auth = baseSecurityManager.findAuthentication(ident, BaseSecurityModule.getDefaultAuthProviderIdentifier()); + baseSecurityManager.deleteAuthentication(auth); + DBFactory.getInstance().closeSession(); + + // ultimate tests + //Identity ident = getOrCreateIdentity("anIdentity"); + Date created = ident.getCreationDate(); + Calendar cal = Calendar.getInstance(); + cal.setTime(created); + cal.add(Calendar.DAY_OF_MONTH, -5); + Date before = cal.getTime(); + + DBFactory.getInstance().closeSession(); + 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); + Assert.assertTrue(results.isEmpty()); + + results = baseSecurityManager.getIdentitiesByPowerSearch("extremegroovy-" + suffix, null, true, groups1, adminPermissions, null, before, null, null, null, null); + Assert.assertEquals(1, results.size()); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch("extremegroovy-" + suffix, null, true, groups1, adminPermissions, null, before, null); + Assert.assertEquals(1, results.size()); + + results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, groups1, adminPermissions, authProviders, before, null, null, null, null); + Assert.assertFalse("Found no results", results.isEmpty()); + checkIdentitiesAreInGroups(results, groups1); + checkIdentitiesHasAuthProvider(results,authProviders ); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, groups1, adminPermissions, authProviders, before, null); + Assert.assertFalse("Found no results", results.isEmpty()); + checkIdentitiesAreInGroups(results, groups1); + checkIdentitiesHasAuthProvider(results,authProviders ); + + results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, groups1, adminPermissions, authProviderNone, before, null, null, null, null); + Assert.assertFalse("Found no results", results.isEmpty()); + checkIdentitiesAreInGroups(results, groups1); + checkIdentitiesHasPermissions(results, adminPermissions); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, groups1, adminPermissions, authProviderNone, before, null); + Assert.assertFalse("Found no results", results.isEmpty()); + checkIdentitiesAreInGroups(results, groups1); + checkIdentitiesHasPermissions(results, adminPermissions); + + results = baseSecurityManager.getIdentitiesByPowerSearch("%y", null, true, groups1, adminPermissions, authProvidersAll, before, null, null, null, null); + Assert.assertTrue(results.contains(ident)); + Assert.assertTrue(results.contains(ident2)); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch("%y", null, true, groups1, adminPermissions, authProvidersAll, before, null); + Assert.assertTrue(results.contains(ident)); + Assert.assertTrue(results.contains(ident2)); + + results = baseSecurityManager.getIdentitiesByPowerSearch("%y", null, true, groups1, adminPermissions, authProvidersAll, null, before, null, null, null); + Assert.assertTrue(results.isEmpty()); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch("%y", null, true, groups1, adminPermissions, authProvidersAll, null, before); + Assert.assertTrue(results.isEmpty()); + + results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, groups1, adminPermissions, null, before, null, null, null, null); + sysoutResults(results); + Assert.assertFalse("Found no results", results.isEmpty()); + checkIdentitiesAreInGroups(results, groups1); + checkIdentitiesHasPermissions(results, adminPermissions); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, groups1, adminPermissions, null, before, null); + Assert.assertFalse("Found no results", results.isEmpty()); + checkIdentitiesAreInGroups(results, groups1); + checkIdentitiesHasPermissions(results, adminPermissions); + } + + @Test + public void testGetIdentitiesByPowerSearch_authProviders() { + //authentication provider search + String[] authProviderNone = { null }; + String[] authProvidersAll = { BaseSecurityModule.getDefaultAuthProviderIdentifier(), "Shib", null }; + + //check count before adding + List<Identity> results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, authProviderNone, null, null, null, null, null); + int prevProviderNoneCount = results.size(); + //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(); + + // special case: no auth provider + // test if 2 new users are found. + results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, authProviderNone, null, null, null, null, null); + Assert.assertTrue(results.contains(authNoneOne)); + Assert.assertTrue(results.contains(authNoneTwo)); + Assert.assertEquals(prevProviderNoneCount + 2, results.size()); + + //same but check visible + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, null, authProviderNone, null, null); + prevProviderNoneCount = results.size(); + + Identity authNoneThree = getOrCreateTestIdentityWithAuth("authNoneThree-" + rnd, null); + Identity authNoneFour = getOrCreateTestIdentityWithAuth("authNoneFour-" + rnd, null); + DBFactory.getInstance().closeSession(); + + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, null, authProviderNone, null, null); + Assert.assertTrue(results.contains(authNoneThree)); + Assert.assertTrue(results.contains(authNoneFour)); + Assert.assertEquals("Wrong number of visible identities, search with (authProviderNone)", prevProviderNoneCount + 2, results.size()); + + // + results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, authProviderNone, null, null, null, null, null); + prevProviderNoneCount = results.size(); + + getOrCreateTestIdentityWithAuth("authNoneFive-" + rnd, null); + getOrCreateTestIdentityWithAuth("authNoneSix-" + rnd, null); + DBFactory.getInstance().closeSession(); + 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()); + + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, null, authProviderNone, null, null); + prevProviderNoneCount = results.size(); + getOrCreateTestIdentityWithAuth("authNoneSeven-" + rnd, null); + getOrCreateTestIdentityWithAuth("authNoneEight-" + rnd, null); + DBFactory.getInstance().closeSession(); + 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()); + + + results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, authProvidersAll, null, null, null, null, null); + prevProviderNoneCount = results.size(); + //add a new identity per entry of AuthProvidersAll + getOrCreateTestIdentityWithAuth("authTwelve-" + rnd, "Shib"); + getOrCreateTestIdentityWithAuth("authThirteen-" + rnd, BaseSecurityModule.getDefaultAuthProviderIdentifier()); + getOrCreateTestIdentityWithAuth("authForteen-" + rnd, null); + DBFactory.getInstance().closeSession(); + results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, authProvidersAll, null, null, null, null, null); + Assert.assertTrue(results.size() - prevProviderNoneCount == 3); + + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, null, authProvidersAll, null, null); + prevProviderNoneCount = results.size(); + //add a new identity per entry of AuthProvidersAll + getOrCreateTestIdentityWithAuth("authSixteen-" + rnd, "Shib"); + getOrCreateTestIdentityWithAuth("authSeventeen-" + rnd, BaseSecurityModule.getDefaultAuthProviderIdentifier()); + getOrCreateTestIdentityWithAuth("authEighteen-" + rnd, null); + DBFactory.getInstance().closeSession(); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, null, authProvidersAll, null, null); + Assert.assertTrue(results.size() - prevProviderNoneCount == 3); + } + + // Hint : Properties for testing with HSQL must be lowercaseHSQL DB does not + // mysql 'like' found results with upper and lowercase + // HSQL 'like' found only results with lowercase + // Our implementation of powersearch convert search-properties to lowercase ! + @Test + public void testGetIdentitiesByPowerSearch_userPropertiesAndIntersectionOption() { + // create two test users + String one = "one" + UUID.randomUUID().toString().replace("-", ""); + String oneUsername = "onePropUser-" + UUID.randomUUID(); + + User onePropUser = UserManager.getInstance().createUser("onepropuser", "onepropuser", one + "@lustig.com"); + onePropUser.setProperty(UserConstants.FIRSTNAME, "one"); + Identity onePropIdentity = baseSecurityManager.createAndPersistIdentityAndUser(oneUsername, onePropUser, BaseSecurityModule.getDefaultAuthProviderIdentifier(), oneUsername, "ppp"); + Assert.assertNotNull(onePropIdentity); + + String two = "two" + UUID.randomUUID().toString().replace("-", ""); + String twoUsername = "twoPropUser-" + UUID.randomUUID(); + + User twoPropUser = UserManager.getInstance().createUser("twopropuser", "twopropuser", two + "@lustig.com"); + twoPropUser.setProperty(UserConstants.FIRSTNAME, "two"); + twoPropUser.setProperty(UserConstants.LASTNAME, "prop"); + Identity twoPropIdentity = baseSecurityManager.createAndPersistIdentityAndUser(twoUsername, twoPropUser, BaseSecurityModule.getDefaultAuthProviderIdentifier(), twoUsername, "ppp"); + Assert.assertNotNull(twoPropIdentity); + DBFactory.getInstance().closeSession(); + + HashMap<String, String> userProperties = new HashMap<String, String>(); + userProperties.put(UserConstants.FIRSTNAME, "one"); + List<Identity> results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); + Assert.assertTrue(results.contains(onePropIdentity)); + + // no intersection - all properties optional + userProperties = new HashMap<String, String>(); + userProperties.put(UserConstants.FIRSTNAME, "one"); + userProperties.put(UserConstants.LASTNAME, "somewrongvalue"); + results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); + Assert.assertTrue(results.isEmpty()); + + // no intersection - all properties optional + userProperties = new HashMap<String, String>(); + userProperties.put(UserConstants.FIRSTNAME, "one"); + userProperties.put(UserConstants.LASTNAME, "somewrongvalue"); + results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, false, null, null, null, null, null, null, null, null); + Assert.assertTrue(results.contains(onePropIdentity)); + Assert.assertFalse(results.contains(twoPropIdentity)); + + // find second + userProperties = new HashMap<String, String>(); + userProperties.put(UserConstants.FIRSTNAME, "two"); + results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); + Assert.assertFalse(results.contains(onePropIdentity)); + Assert.assertTrue(results.contains(twoPropIdentity)); + + userProperties = new HashMap<String, String>(); + userProperties.put(UserConstants.FIRSTNAME, "two"); + userProperties.put(UserConstants.LASTNAME, "somewrongvalue"); + results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); + Assert.assertTrue(results.isEmpty()); + + // no intersection - all properties optional + userProperties = new HashMap<String, String>(); + userProperties.put(UserConstants.FIRSTNAME, "two"); + userProperties.put(UserConstants.LASTNAME, "somewrongvalue"); + results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, false, null, null, null, null, null, null, null, null); + Assert.assertFalse(results.contains(onePropIdentity)); + Assert.assertTrue(results.contains(twoPropIdentity)); + + userProperties = new HashMap<String, String>(); + userProperties.put(UserConstants.FIRSTNAME, "two"); + userProperties.put(UserConstants.LASTNAME, "prop"); + results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); + Assert.assertFalse(results.contains(onePropIdentity)); + Assert.assertTrue(results.contains(twoPropIdentity)); + + // find all + // 1. basic query to find all system users without restrictions + results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, null, null, null, null, null, null); + Assert.assertFalse(results.isEmpty()); + int numberOfAllUsers = results.size(); + + userProperties = new HashMap<String, String>(); + results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); + Assert.assertEquals("Wrong search result 'empty userProperties'", numberOfAllUsers, results.size()); + + userProperties = new HashMap<String, String>(); + results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, false, null, null, null, null, null, null, null, null); + Assert.assertEquals("Wrong search result 'empty userProperties and intersection=false'", numberOfAllUsers, results.size()); + } + + @Test + public void testGetIdentitiesByPowerSearch_multipleUserProperties() { + String multi = "multi" + UUID.randomUUID().toString().replace("-", ""); + String multiInst = "multiinst" + UUID.randomUUID().toString().replace("-", ""); + String multiUsername = "multiPropUser-" + UUID.randomUUID(); + + User user = UserManager.getInstance().createUser("multipropuser", "multipropuser", multi + "@lustig.com"); + user.setProperty(UserConstants.FIRSTNAME, "multi"); + user.setProperty(UserConstants.LASTNAME, "prop"); + user.setProperty(UserConstants.INSTITUTIONALNAME, "multiinst"); + user.setProperty(UserConstants.INSTITUTIONALEMAIL, multiInst + "@lustig.com"); + user.setProperty(UserConstants.INSTITUTIONALUSERIDENTIFIER, multiInst); + user.setProperty(UserConstants.CITY, "züri"); + Identity identity = baseSecurityManager.createAndPersistIdentityAndUser(multiUsername, user, BaseSecurityModule.getDefaultAuthProviderIdentifier(), multiUsername, "ppp"); + Assert.assertNotNull(identity); + + // commit + DBFactory.getInstance().closeSession(); + + 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)); + + userProperties = new HashMap<String, String>(); + userProperties.put(UserConstants.FIRSTNAME, "multi"); + userProperties.put(UserConstants.LASTNAME, "prop"); + results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); + Assert.assertTrue(results.contains(identity)); + + userProperties = new HashMap<String, String>(); + userProperties.put(UserConstants.FIRSTNAME, "multi"); + userProperties.put(UserConstants.LASTNAME, "prop"); + userProperties.put(UserConstants.INSTITUTIONALNAME, "multiinst"); + results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); + Assert.assertTrue(results.contains(identity)); + + userProperties = new HashMap<String, String>(); + userProperties.put(UserConstants.FIRSTNAME, "multi"); + userProperties.put(UserConstants.LASTNAME, "prop"); + userProperties.put(UserConstants.INSTITUTIONALNAME, "multiinst"); + userProperties.put(UserConstants.INSTITUTIONALEMAIL, multiInst + "@lustig.com"); + results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); + Assert.assertEquals(1, results.size()); + Assert.assertTrue(results.contains(identity)); + + userProperties = new HashMap<String, String>(); + userProperties.put(UserConstants.FIRSTNAME, "multi"); + userProperties.put(UserConstants.LASTNAME, "prop"); + userProperties.put(UserConstants.INSTITUTIONALNAME, "multiinst"); + userProperties.put(UserConstants.INSTITUTIONALEMAIL, multiInst + "@lustig.com"); + userProperties.put(UserConstants.INSTITUTIONALUSERIDENTIFIER, multiInst); + userProperties.put(UserConstants.CITY, "züri"); + results = baseSecurityManager.getIdentitiesByPowerSearch(null, userProperties, true, null, null, null, null, null, null, null, null); + Assert.assertEquals(1, results.size()); + Assert.assertTrue(results.contains(identity)); + } + + @Test + public void testGetIdentitiesByPowerSearch_withDate() { + Identity ident = JunitTestHelper.createAndPersistIdentityAsUser("anIdentity-" + UUID.randomUUID()); + Date created = ident.getCreationDate(); + Calendar cal = Calendar.getInstance(); + cal.setTime(created); + cal.add(Calendar.DAY_OF_MONTH, -5); + Date before = cal.getTime(); + cal.add(Calendar.DAY_OF_MONTH, 10); + Date after = cal.getTime(); + + // basic query to find all system users without restrictions + List<Identity> results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, null, null, null, null, null, null); + assertTrue(results.size()>0); + int numberOfAllUsers = results.size(); + + results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, null, null, null, null, null, Identity.STATUS_DELETED); + assertTrue(results.size() >0); + int numberOfDeletedUsers = results.size(); + + Date createdAfter = before; + Date createdBefore = after; + results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, null, createdAfter, createdBefore, null, null, null); + assertEquals("Search with date (createdAfter,createdBefore) delivers not the same number of users", numberOfAllUsers, results.size()); + + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, null, null, before, after); + assertEquals("Search (visible identities) with date (createdAfter,createdBefore) delivers not the same number of users", (numberOfAllUsers - numberOfDeletedUsers) , results.size()); // One identity is deleted + + results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, null, null, after, null, null, null); + assertEquals("Search with date (only after) delivers not the same number of users", numberOfAllUsers, results.size()); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, null, null, null, after); + assertEquals("Search (visible identities) with date (createdAfter,createdBefore) delivers not the same number of users", (numberOfAllUsers - numberOfDeletedUsers) , results.size()); // One identity is deleted + + results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, null, before, null, null, null, null); + assertEquals("Search with date (only before) delivers not the same number of users", numberOfAllUsers, results.size()); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, null, null, before, null); + assertEquals("Search (visible identities) with date (createdAfter,createdBefore) delivers not the same number of users", (numberOfAllUsers - numberOfDeletedUsers) , results.size()); // One identity is deleted + + results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, null, after, before, null, null, null); + assertTrue(results.size() == 0); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, null, null, after, before); + assertTrue(results.size() == 0); + + results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, null, after, null, null, null, null); + assertTrue(results.size() == 0); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, null, null, after, null); + assertTrue(results.size() == 0); + + results = baseSecurityManager.getIdentitiesByPowerSearch(null, null, true, null, null, null, null, before, null, null, null); + assertTrue(results.size() == 0); + results = baseSecurityManager.getVisibleIdentitiesByPowerSearch(null, null, true, null, null, null, null, before); + assertTrue(results.size() == 0); + } + + //////////////////// + // Helper + /////////////////// + + private Identity getOrCreateTestIdentity(String loginName) { + return getOrCreateTestIdentityWithAuth(loginName, BaseSecurityModule.getDefaultAuthProviderIdentifier()); + } + + private Identity getOrCreateTestIdentityWithAuth(String loginName, String authProvider){ + Identity ident = baseSecurityManager.findIdentityByName(loginName); + if (ident != null) { + return ident; + } else { + User user = UserManager.getInstance().createUser(loginName+"_Firstname", loginName + "_Lastname", loginName + "@lustig.com"); + user.setProperty(UserConstants.INSTITUTIONALNAME, "unizh2"); + user.setProperty(UserConstants.INSTITUTIONALUSERIDENTIFIER, "12-345-678-908"); + ident = baseSecurityManager.createAndPersistIdentityAndUser(loginName, user, authProvider, loginName, "ppp"); + return ident; + } + } + + private PermissionOnResourceable[] convertPoliciesListToPermissionOnResourceArray(List<Policy> policies) { + PermissionOnResourceable[] array = new PermissionOnResourceable[policies.size()]; + for (int i = 0; i < policies.size() ; i++) { + Policy policy = policies.get(i); + PermissionOnResourceable por = new PermissionOnResourceable(policy.getPermission(), policy.getOlatResource()); + array[i] = por; + } + + return array; + } + + /* + * Only for debugging to see identities result list. + */ + private void sysoutResults(List<Identity> results) { + log.info("TEST results.size()=" + results.size()); + for (Identity identity:results) { + log.debug("TEST ident=" + identity); + } + } + + // check Helper Methoden + //////////////////////// + private void checkIdentitiesHasPermissions(List<Identity> results, PermissionOnResourceable[] adminPermissions) { + for (Identity resultIdentity: results) { + for (int i = 0; i < adminPermissions.length; i++) { + assertTrue( baseSecurityManager.isIdentityPermittedOnResourceable(resultIdentity, adminPermissions[i].getPermission(), adminPermissions[i].getOlatResourceable() ) ); + } + } + } + + private void checkIdentitiesHasAuthProvider(List<Identity> results, String[] authProviders) { + for (Identity resultIdentity : results) { + boolean foundIdentityWithAuth = false; + for (int i = 0; i < authProviders.length; i++) { + Authentication authentication = baseSecurityManager.findAuthentication(resultIdentity, authProviders[i]); + if (authentication != null) { + foundIdentityWithAuth = true; + } + } + assertTrue("Coud not found any authentication for identity=" + resultIdentity, foundIdentityWithAuth); + } + } + + private void checkIdentitiesAreInGroups(List<Identity> results, SecurityGroup[] groups1) { + for (Identity resultIdentity:results) { + boolean foundIdentityInSecGroup = false; + for (int i = 0; i < groups1.length; i++) { + if (baseSecurityManager.isIdentityInSecurityGroup(resultIdentity, groups1[i]) ) { + foundIdentityInSecGroup = true; + } + } + assertTrue("Coud not found identity=" + resultIdentity, foundIdentityInSecGroup); + } + } + + private void checkIdentitiesHasRoles(List<Identity> results, boolean checkIsAuthor) { + for (Identity resultIdentity: results) { + Roles roles = baseSecurityManager.getRoles(resultIdentity); + if (checkIsAuthor) { + assertTrue("Identity has not roles author, identity=" + resultIdentity, roles.isAuthor()); + } + } + } +} \ No newline at end of file diff --git a/src/test/java/org/olat/commons/coordinate/CoordinatorTest.java b/src/test/java/org/olat/commons/coordinate/CoordinatorTest.java index 353d63c53fdf3ddcfca1250ade8fa6c1a5bcad4c..923167172521554f92c2589fabb5e0a2d6dac263 100644 --- a/src/test/java/org/olat/commons/coordinate/CoordinatorTest.java +++ b/src/test/java/org/olat/commons/coordinate/CoordinatorTest.java @@ -26,14 +26,16 @@ package org.olat.commons.coordinate; -import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; -import org.junit.Before; +import org.jgroups.util.UUID; +import org.junit.Assert; import org.junit.Test; import org.olat.core.CoreSpringFactory; import org.olat.core.commons.persistence.DBFactory; @@ -63,11 +65,6 @@ public class CoordinatorTest extends OlatTestCase { @Autowired private RepositoryService repositoryService; - @Before - public void setUp() throws Exception { - DBFactory.getInstance().closeSession(); - } - /** * Test with 2 threads T1 & T2. @@ -89,7 +86,9 @@ public class CoordinatorTest extends OlatTestCase { final List<Exception> exceptionHolder = Collections.synchronizedList(new ArrayList<Exception>(1)); final List<Boolean> statusList = Collections.synchronizedList(new ArrayList<Boolean>(1)); + final CountDownLatch finishCount = new CountDownLatch(2); final OLATResourceable ores = OresHelper.createOLATResourceableInstance("testDoInSync", new Long("123")); + // thread 1 new Thread(new Runnable() { public void run() { @@ -102,7 +101,7 @@ public class CoordinatorTest extends OlatTestCase { });//end syncerCallback // sleep - sleep(10000); + sleep(1000); // do again do something in sync CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync(ores, new SyncerExecutor(){ @@ -119,7 +118,8 @@ public class CoordinatorTest extends OlatTestCase { DBFactory.getInstance().closeSession(); } catch (Exception e) { // ignore - }; + } + finishCount.countDown(); } }}).start(); @@ -128,7 +128,7 @@ public class CoordinatorTest extends OlatTestCase { public void run() { try { // sleep - sleep(5000); + sleep(500); // do something in sync CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync(ores, new SyncerExecutor(){ @@ -138,7 +138,7 @@ public class CoordinatorTest extends OlatTestCase { });//end syncerCallback // sleep - sleep(10000); + sleep(1000); // do again do something in sync CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync(ores, new SyncerExecutor(){ @@ -155,25 +155,23 @@ public class CoordinatorTest extends OlatTestCase { DBFactory.getInstance().closeSession(); } catch (Exception e) { // ignore - }; + } + finishCount.countDown(); } }}).start(); // sleep until t1 and t2 should have terminated/excepted - int loopCount = 0; - while ( (statusList.size()<2) && (exceptionHolder.size()<1) && (loopCount<90)) { - sleep(1000); - loopCount++; + try { + finishCount.await(10, TimeUnit.SECONDS); + } catch (InterruptedException e) { + Assert.fail("Threads did not finish in 10sec"); } - assertTrue("Threads did not finish in 90sec", loopCount<90); + // if not -> they are in deadlock and the db did not detect it for (Exception exception : exceptionHolder) { - log.info("exception: "+exception.getMessage()); - exception.printStackTrace(); - } - if (exceptionHolder.size() > 0) { - assertTrue("It throws an exception in test => see sysout exception[0]=" + exceptionHolder.get(0).getMessage(), exceptionHolder.size() == 0); + log.error("exception: ", exception); } + Assert.assertEquals("It throws an exception in test", 0, exceptionHolder.size()); } /** @@ -197,6 +195,8 @@ public class CoordinatorTest extends OlatTestCase { final List<Boolean> statusList = Collections.synchronizedList(new ArrayList<Boolean>(1)); final OLATResourceable ores = OresHelper.createOLATResourceableInstance("testDoInSync", new Long("123")); + final CountDownLatch finishCount = new CountDownLatch(2); + // thread 1 new Thread(new Runnable() { public void run() { @@ -210,7 +210,7 @@ public class CoordinatorTest extends OlatTestCase { });//end syncerCallback // sleep - sleep(10000); + sleep(1000); // do again do something in sync CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync(ores, new SyncerCallback<Boolean>(){ @@ -228,7 +228,8 @@ public class CoordinatorTest extends OlatTestCase { DBFactory.getInstance().closeSession(); } catch (Exception e) { // ignore - }; + } + finishCount.countDown(); } }}).start(); @@ -237,7 +238,7 @@ public class CoordinatorTest extends OlatTestCase { public void run() { try { // sleep - sleep(5000); + sleep(500); // do something in sync CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync(ores, new SyncerCallback<Boolean>(){ @@ -248,7 +249,7 @@ public class CoordinatorTest extends OlatTestCase { });//end syncerCallback // sleep - sleep(10000); + sleep(1000); // do again do something in sync CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync(ores, new SyncerCallback<Boolean>(){ @@ -266,52 +267,46 @@ public class CoordinatorTest extends OlatTestCase { DBFactory.getInstance().closeSession(); } catch (Exception e) { // ignore - }; + } + finishCount.countDown(); } }}).start(); // sleep until t1 and t2 should have terminated/excepted - int loopCount = 0; - while ( (statusList.size()<2) && (exceptionHolder.size()<1) && (loopCount<90)) { - sleep(1000); - loopCount++; + try { + finishCount.await(10, TimeUnit.SECONDS); + } catch (InterruptedException e) { + Assert.fail("Test takes too long (more than 10s)"); } - assertTrue("Threads did not finish in 90sec", loopCount<90); + // if not -> they are in deadlock and the db did not detect it for (Exception exception : exceptionHolder) { - log.info("exception: "+exception.getMessage()); - exception.printStackTrace(); - } - if (exceptionHolder.size() > 0) { - assertTrue("It throws an exception in test => see sysout exception[0]=" + exceptionHolder.get(0).getMessage(), exceptionHolder.size() == 0); + log.error("exception: ", exception); } + + Assert.assertEquals("It throws an exception in test", 0, exceptionHolder.size()); } - - @Test + @Test(expected = AssertException.class) public void testNestedAssertExceptionInDoInSync() { final OLATResourceable ores = OresHelper.createOLATResourceableInstance("testNestedAssertExceptionInDoInSync", new Long("123")); - try { - CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync(ores, new SyncerCallback<Boolean>(){ - public Boolean execute() { - log.info("testNestedAssertExceptionInDoInSync: execute doInSync 1"); - - // Do agin in sync => nested => no allowed! - CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync(ores, new SyncerCallback<Boolean>(){ - public Boolean execute() { - log.info("testNestedAssertExceptionInDoInSync: execute doInSync 2"); - fail("No NestedAssertException thrown"); - return Boolean.TRUE; - } - });//end syncerCallback - - return Boolean.TRUE; - } - });//end syncerCallback - }catch(AssertException aex) { - log.info("testNestedAssertExceptionInDoInSync: Ok, got a AssertException=" + aex); - } + CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync(ores, new SyncerCallback<Boolean>(){ + public Boolean execute() { + log.info("testNestedAssertExceptionInDoInSync: execute doInSync 1"); + + // Do agin in sync => nested => no allowed! + CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync(ores, new SyncerCallback<Boolean>(){ + public Boolean execute() { + log.info("testNestedAssertExceptionInDoInSync: execute doInSync 2"); + fail("No NestedAssertException thrown"); + return Boolean.TRUE; + } + });//end syncerCallback + + return Boolean.TRUE; + } + });//end syncerCallback } @Test @@ -345,9 +340,9 @@ public class CoordinatorTest extends OlatTestCase { @Test public void testDoInSyncPerformance() { - final OLATResourceable ores = OresHelper.createOLATResourceableInstance("testDoInSyncPerformance", new Long("123989456")); + final OLATResourceable ores = OresHelper.createOLATResourceableInstance(UUID.randomUUID().toString(), new Long("123989456")); OLATResource r = CoreSpringFactory.getImpl(OLATResourceManager.class).findOrPersistResourceable(ores); - int maxLoop = 1000; + int maxLoop = 500; final RepositoryEntry re = repositoryService.create("test", "perfTest", "testPerf", "perfTest description", r); // create security group diff --git a/src/test/java/org/olat/core/commons/persistence/DBTest.java b/src/test/java/org/olat/core/commons/persistence/DBTest.java index be411d95c81b720fbcaf63c86a7bf7957a61a563..d6e91a8542d4c650dc9a333167e150e238a20f04 100644 --- a/src/test/java/org/olat/core/commons/persistence/DBTest.java +++ b/src/test/java/org/olat/core/commons/persistence/DBTest.java @@ -136,8 +136,7 @@ public class DBTest extends OlatTestCase { try { latch.await(20, TimeUnit.SECONDS); } catch (InterruptedException e) { - log.error("", e); - fail("Takes too long"); + fail("Takes too long (more than 20sec)"); } Assert.assertFalse(test.hasError()); @@ -146,11 +145,11 @@ public class DBTest extends OlatTestCase { private class TestThread extends Thread { private boolean error; private final CountDownLatch latch; - private final RepositoryManager repositoryManager; + private final RepositoryManager repoManager; public TestThread(RepositoryManager repositoryManager, CountDownLatch latch) { this.latch = latch; - this.repositoryManager = repositoryManager; + this.repoManager = repositoryManager; } public boolean hasError() { @@ -161,7 +160,7 @@ public class DBTest extends OlatTestCase { try { EntityManager em1 = EntityManagerFactoryUtils.getTransactionalEntityManager(emf); Assert.assertNull(em1); - repositoryManager.lookupRepositoryEntry(27l, false); + repoManager.lookupRepositoryEntry(27l, false); EntityManager em2 = EntityManagerFactoryUtils.getTransactionalEntityManager(emf); //Transactional annotation must clean-up the entity manager Assert.assertNull(em2); @@ -401,8 +400,7 @@ public class DBTest extends OlatTestCase { try { latch.await(20, TimeUnit.SECONDS); } catch (InterruptedException e) { - log.error("", e); - fail("Takes too long"); + fail("Takes too long (more than 20sec)"); } for (int i=0; i<maxWorkers; i++) { diff --git a/src/test/java/org/olat/core/commons/services/taskexecutor/TaskExecutorManagerTest.java b/src/test/java/org/olat/core/commons/services/taskexecutor/TaskExecutorManagerTest.java index 1efaf9ce3fcc650e6cf27c51b0a904e5019b67e4..d543290e7227134a27f7125cf6c4befd357a4100 100644 --- a/src/test/java/org/olat/core/commons/services/taskexecutor/TaskExecutorManagerTest.java +++ b/src/test/java/org/olat/core/commons/services/taskexecutor/TaskExecutorManagerTest.java @@ -25,8 +25,6 @@ import java.util.concurrent.TimeUnit; import junit.framework.Assert; import org.junit.Test; -import org.olat.core.logging.OLog; -import org.olat.core.logging.Tracing; import org.olat.test.OlatTestCase; import org.springframework.beans.factory.annotation.Autowired; @@ -38,8 +36,6 @@ import org.springframework.beans.factory.annotation.Autowired; */ public class TaskExecutorManagerTest extends OlatTestCase { - private static final OLog log = Tracing.createLoggerFor(TaskExecutorManagerTest.class); - @Autowired private TaskExecutorManager taskExecutorManager; @@ -52,8 +48,7 @@ public class TaskExecutorManagerTest extends OlatTestCase { boolean zero = finishCount.await(10, TimeUnit.SECONDS); Assert.assertTrue(zero); } catch (InterruptedException e) { - log.error("", e); - Assert.fail(); + Assert.fail("Takes too long (more than 10sec)"); } } diff --git a/src/test/java/org/olat/core/commons/services/webdav/WebDAVCommandsTest.java b/src/test/java/org/olat/core/commons/services/webdav/WebDAVCommandsTest.java index 580d837fee76fb2414bc7d5bde0b6df9ae95c537..5278ff015efe7a8c7e87ffa36561c1efca28d3cc 100644 --- a/src/test/java/org/olat/core/commons/services/webdav/WebDAVCommandsTest.java +++ b/src/test/java/org/olat/core/commons/services/webdav/WebDAVCommandsTest.java @@ -143,7 +143,7 @@ public class WebDAVCommandsTest extends WebDAVTestCase { HttpResponse response = conn.head(publicUri); Header lengthHeader = response.getFirstHeader("Content-Length"); Assert.assertNotNull(lengthHeader); - Assert.assertEquals("0", lengthHeader.getValue()); + Assert.assertEquals("10", lengthHeader.getValue()); Header typeHeader = response.getFirstHeader("Content-Type"); Assert.assertNotNull(typeHeader); Assert.assertEquals("text/plain", typeHeader.getValue()); diff --git a/src/test/java/org/olat/core/util/mail/manager/MailManagerTest.java b/src/test/java/org/olat/core/util/mail/manager/MailManagerTest.java index c95348ae332d2c7952e6e702b5de3046c89aab4b..0a1566175c35afaccf54854a7a533286406097ef 100644 --- a/src/test/java/org/olat/core/util/mail/manager/MailManagerTest.java +++ b/src/test/java/org/olat/core/util/mail/manager/MailManagerTest.java @@ -64,7 +64,6 @@ public class MailManagerTest extends OlatTestCase { inbox = mailModule.isInternSystem(); if(!inbox) { mailModule.setInterSystem(true); - sleep(500);//set of properties on module are async } } @@ -72,7 +71,6 @@ public class MailManagerTest extends OlatTestCase { public void resetInternalInbox() { if(!inbox) { mailModule.setInterSystem(inbox); - sleep(500);//set of properties on module are async } } diff --git a/src/test/java/org/olat/course/assessment/manager/UserCourseInformationsManagerTest.java b/src/test/java/org/olat/course/assessment/manager/UserCourseInformationsManagerTest.java index 3f4b951c97d99d8cff279dd0bafc083cd3868579..8f0f97db9a2daf4467f334ea034f7e831d061999 100644 --- a/src/test/java/org/olat/course/assessment/manager/UserCourseInformationsManagerTest.java +++ b/src/test/java/org/olat/course/assessment/manager/UserCourseInformationsManagerTest.java @@ -192,7 +192,7 @@ public class UserCourseInformationsManagerTest extends OlatTestCase { try { latch.await(120, TimeUnit.SECONDS); } catch (InterruptedException e) { - log.error("", e); + Assert.fail("Takes too long (more than 120sec)"); } int countErrors = 0; diff --git a/src/test/java/org/olat/group/test/BGAreaManagerTest.java b/src/test/java/org/olat/group/test/BGAreaManagerTest.java index f9d6e4687939897b4fa8f447d42b0b1b6c812490..16dff25f987dde48167b2da64773e4e6686bf877 100644 --- a/src/test/java/org/olat/group/test/BGAreaManagerTest.java +++ b/src/test/java/org/olat/group/test/BGAreaManagerTest.java @@ -645,13 +645,12 @@ public class BGAreaManagerTest extends OlatTestCase { try { finfishCount.await(120, TimeUnit.SECONDS); } catch (InterruptedException e) { - e.printStackTrace(); + log.error("", e); } // if not -> they are in deadlock and the db did not detect it for (Exception exception : exceptionHolder) { - System.err.println("exception: "+exception.getMessage()); - exception.printStackTrace(); + log.error("exception: ", exception); } assertTrue("Exceptions #" + exceptionHolder.size(), exceptionHolder.size() == 0); assertEquals("Not all threads has finished", 0, finfishCount.getCount()); @@ -735,8 +734,7 @@ public class BGAreaManagerTest extends OlatTestCase { // if not -> they are in deadlock and the db did not detect it for (Exception exception : exceptionHolder) { - System.err.println("exception: "+exception.getMessage()); - exception.printStackTrace(); + log.error("exception: ", exception); } assertTrue("Exceptions #" + exceptionHolder.size(), exceptionHolder.size() == 0); assertEquals("Not all threads has finished", 0, finfishCount.getCount()); diff --git a/src/test/java/org/olat/instantMessaging/InstantMessagePreferencesDAOTest.java b/src/test/java/org/olat/instantMessaging/InstantMessagePreferencesDAOTest.java index 1a15a4a89649e800d4f4056f90bcaecd8bf83cf4..bc7ca0de283a7d2ef681b2df85da19db3ad150c9 100644 --- a/src/test/java/org/olat/instantMessaging/InstantMessagePreferencesDAOTest.java +++ b/src/test/java/org/olat/instantMessaging/InstantMessagePreferencesDAOTest.java @@ -146,7 +146,7 @@ public class InstantMessagePreferencesDAOTest extends OlatTestCase { try { finishCount.await(20, TimeUnit.SECONDS); } catch (InterruptedException e) { - log.error("", e); + Assert.fail("Takes too long (mote than 20sec)"); } boolean allOk = true; diff --git a/src/test/java/org/olat/resource/lock/pessimistic/PLockTest.java b/src/test/java/org/olat/resource/lock/pessimistic/PLockTest.java index c52df08e4ddf7a2fecca56a095070f56e2915fa6..43953939b71eafe00c7fdfc0ef8e9be9f9e15b47 100644 --- a/src/test/java/org/olat/resource/lock/pessimistic/PLockTest.java +++ b/src/test/java/org/olat/resource/lock/pessimistic/PLockTest.java @@ -38,43 +38,54 @@ import java.util.UUID; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; +import org.junit.Assert; import org.junit.Test; import org.olat.basesecurity.BaseSecurityManager; import org.olat.basesecurity.SecurityGroup; -import org.olat.core.commons.persistence.DBFactory; +import org.olat.core.commons.persistence.DB; import org.olat.core.id.Identity; +import org.olat.core.logging.OLog; +import org.olat.core.logging.Tracing; import org.olat.test.JunitTestHelper; import org.olat.test.OlatTestCase; +import org.springframework.beans.factory.annotation.Autowired; /** * */ public class PLockTest extends OlatTestCase { + + private static final OLog log = Tracing.createLoggerFor(PLockTest.class); private static final int MAX_COUNT = 5; //5; //30; private static final int MAX_USERS_MORE = 20; //20; //100; + + @Autowired + private DB dbInstance; + @Autowired + private PessimisticLockManager pessimisticLockManager; @Test public void testReentrantLock() { long start = System.currentTimeMillis(); String asset = "p1"; // make sure the lock is created first - PLock pc = PessimisticLockManager.getInstance().findOrPersistPLock(asset); + PLock pc = pessimisticLockManager.findOrPersistPLock(asset); assertNotNull(pc); - DBFactory.getInstance().closeSession(); + dbInstance.closeSession(); // test double acquisition within same transaction - PLock pc1 = PessimisticLockManager.getInstance().findOrPersistPLock(asset); + PLock pc1 = pessimisticLockManager.findOrPersistPLock(asset); assertNotNull(pc1); - PLock pc2 = PessimisticLockManager.getInstance().findOrPersistPLock(asset); + PLock pc2 = pessimisticLockManager.findOrPersistPLock(asset); assertNotNull(pc2); - DBFactory.getInstance().closeSession(); + dbInstance.closeSession(); // and without explicit transaction boundary. - PLock p1 = PessimisticLockManager.getInstance().findOrPersistPLock(asset); + PLock p1 = pessimisticLockManager.findOrPersistPLock(asset); assertNotNull(p1); - PLock p2 = PessimisticLockManager.getInstance().findOrPersistPLock(asset); + PLock p2 = pessimisticLockManager.findOrPersistPLock(asset); assertNotNull(p2); long stop = System.currentTimeMillis(); long diff = stop - start; @@ -85,39 +96,40 @@ public class PLockTest extends OlatTestCase { * T1 T2 * */ - @Test public void testReentrantLock2Threads() { + @Test + public void testReentrantLock2Threads() { final String asset = "p1-2"; // make sure the lock is created first - PLock pc = PessimisticLockManager.getInstance().findOrPersistPLock(asset); + PLock pc = pessimisticLockManager.findOrPersistPLock(asset); assertNotNull(pc); - DBFactory.getInstance().closeSession(); + dbInstance.closeSession(); final List<Exception> exceptionHolder = Collections.synchronizedList(new ArrayList<Exception>(1)); - final List<Boolean> statusList = Collections.synchronizedList(new ArrayList<Boolean>(1)); + final CountDownLatch finishCount = new CountDownLatch(2); // thread 1 new Thread(new Runnable() { public void run() { try { - PLock pc1 = PessimisticLockManager.getInstance().findOrPersistPLock(asset); + PLock pc1 = pessimisticLockManager.findOrPersistPLock(asset); assertNotNull(pc1); - System.out.println("Thread-1: got PLock pc1=" + pc1); - System.out.println("Thread-1: sleep 10sec"); - sleep(10000); - PLock pc2 = PessimisticLockManager.getInstance().findOrPersistPLock(asset); + log.info("Thread-1: got PLock pc1=" + pc1); + log.info("Thread-1: sleep 1sec"); + sleep(1000); + PLock pc2 = pessimisticLockManager.findOrPersistPLock(asset); assertNotNull(pc2); - System.out.println("Thread-1: got PLock pc2=" + pc2); - System.out.println("Thread-1: finished"); - statusList.add(Boolean.TRUE); + log.info("Thread-1: got PLock pc2=" + pc2); + log.info("Thread-1: finished"); } catch (Exception e) { exceptionHolder.add(e); } finally { + finishCount.countDown(); try { - DBFactory.getInstance().closeSession(); + dbInstance.commitAndCloseSession(); } catch (Exception e) { // ignore - }; + } } }}).start(); @@ -125,40 +137,40 @@ public class PLockTest extends OlatTestCase { new Thread(new Runnable() { public void run() { try { - System.out.println("Thread-2: sleep 5sec"); - sleep(5000); - System.out.println("Thread-2: try to get PLock..."); - PLock p1 = PessimisticLockManager.getInstance().findOrPersistPLock(asset); + log.info("Thread-2: sleep 0.5sec"); + sleep(500); + log.info("Thread-2: try to get PLock..."); + PLock p1 = pessimisticLockManager.findOrPersistPLock(asset); assertNotNull(p1); - System.out.println("Thread-2: got PLock p1=" + p1); - System.out.println("Thread-2: sleep 10sec"); - sleep(10000); - PLock p2 = PessimisticLockManager.getInstance().findOrPersistPLock(asset); + log.info("Thread-2: got PLock p1=" + p1); + log.info("Thread-2: sleep 1sec"); + sleep(1000); + PLock p2 = pessimisticLockManager.findOrPersistPLock(asset); assertNotNull(p2); - System.out.println("Thread-1: got PLock p2=" + p2); - System.out.println("Thread-1: finished"); - statusList.add(Boolean.TRUE); + log.info("Thread-1: got PLock p2=" + p2); + log.info("Thread-1: finished"); } catch (Exception e) { exceptionHolder.add(e); } finally { + finishCount.countDown(); try { - DBFactory.getInstance().closeSession(); + dbInstance.commitAndCloseSession(); } catch (Exception e) { // ignore - }; + } } }}).start(); // sleep until t1 and t2 should have terminated/excepted - int loopCount = 0; - while ( (statusList.size()<2) && (exceptionHolder.size()<1) && (loopCount<60)) { - sleep(1000); - loopCount++; + try { + finishCount.await(60, TimeUnit.SECONDS); + } catch (InterruptedException e) { + Assert.fail("Test takes too long (more than 60s)"); } - assertTrue("Threads did not finish in 60sec", loopCount<60); + // if not -> they are in deadlock and the db did not detect it for (Exception exception : exceptionHolder) { - System.out.println("exception: "+exception.getMessage()); + log.info("exception: "+exception.getMessage()); exception.printStackTrace(); } assertTrue("exception in test => see sysout", exceptionHolder.size() == 0); @@ -170,13 +182,13 @@ public class PLockTest extends OlatTestCase { final String asset = "testLockWaitTimout"; - System.out.println("testing if holding a lock timeouts"); + log.info("testing if holding a lock timeouts"); // make sure all three row entries for the locks are created, otherwise the system-wide locking // applied on lock-row-creation cannot support row-level-locking by definition. - PLock pc3 = PessimisticLockManager.getInstance().findOrPersistPLock("blibli"); + PLock pc3 = pessimisticLockManager.findOrPersistPLock("blibli"); assertNotNull(pc3); - DBFactory.getInstance().closeSession(); + dbInstance.closeSession(); /** * t1 t2 @@ -193,22 +205,24 @@ public class PLockTest extends OlatTestCase { final List<Exception> exceptionHolder = Collections.synchronizedList(new ArrayList<Exception>(1)); + final CountDownLatch finishCount = new CountDownLatch(2); // t1 new Thread(new Runnable() { public void run() { try { - sleep(2500); - PLock p3 = PessimisticLockManager.getInstance().findOrPersistPLock(asset); + sleep(500); + PLock p3 = pessimisticLockManager.findOrPersistPLock(asset); assertNotNull(p3); } catch (Exception e) { exceptionHolder.add(e); } finally { + finishCount.countDown(); try { - DBFactory.getInstance().closeSession(); + dbInstance.closeSession(); } catch (Exception e) { // ignore - }; + } } }}).start(); @@ -216,101 +230,105 @@ public class PLockTest extends OlatTestCase { new Thread(new Runnable() { public void run() { try { - PLock p2 = PessimisticLockManager.getInstance().findOrPersistPLock(asset); + PLock p2 = pessimisticLockManager.findOrPersistPLock(asset); assertNotNull(p2); - sleep(60000); - // holding the lock for more than the transaction timeout (normally 30secs, configured where? hib) should cause a lock timeout - // if the db is configured so. + sleep(55000); + // holding the lock for more than the transaction timeout + // (normally 30secs, configured where? hib) should cause a lock timeout + // if the db is configured so (innodb_lock_wait_timeout). } catch (Exception e) { exceptionHolder.add(e); } finally { + finishCount.countDown(); try { - DBFactory.getInstance().closeSession(); + dbInstance.closeSession(); } catch (Exception e) { // ignore - }; + } } }}).start(); // sleep until t1 and t2 should have terminated/excepted - System.out.println("Sleep 55s"); - sleep(55000); - - // if not -> they are in deadlock and the db did not detect it - for (Exception exception : exceptionHolder) { - System.out.println("exception: "+exception.getMessage()); - exception.printStackTrace(); + try { + log.info("Sleep 55s"); + finishCount.await(60, TimeUnit.SECONDS); + } catch (InterruptedException e) { + Assert.fail(""); } - assertTrue("expected a lock wait timeout exceeded exception", exceptionHolder.size() > 0); + + Assert.assertEquals("expected a lock wait timeout exceeded exception", 1, exceptionHolder.size()); } - @Test public void testSingleRowLockingSupported() { - System.out.println("testing if one lock only locks the given row and not the complete table (test whether the database supports rowlocking)"); + @Test + public void testSingleRowLockingSupported() { + log.info("testing if one lock only locks the given row and not the complete table (test whether the database supports rowlocking)"); // make sure both row entries for the locks are created, otherwise the system-wide locking // applied on lock-row-creation cannot support row-level-locking by definition. - PLock pc1 = PessimisticLockManager.getInstance().findOrPersistPLock("blabla"); - assertNotNull(pc1); - PLock pc2 = PessimisticLockManager.getInstance().findOrPersistPLock("blublu"); - assertNotNull(pc2); - DBFactory.getInstance().closeSession(); + PLock pc1 = pessimisticLockManager.findOrPersistPLock("blabla"); + Assert.assertNotNull(pc1); + PLock pc2 = pessimisticLockManager.findOrPersistPLock("blublu"); + Assert.assertNotNull(pc2); + dbInstance.closeSession(); final List<Long> holder = new ArrayList<Long>(1); // first thread acquires the lock and waits and continues holding the lock for some time. - PLock p1 = PessimisticLockManager.getInstance().findOrPersistPLock("blabla"); - assertNotNull(p1); + PLock p1 = pessimisticLockManager.findOrPersistPLock("blabla"); + Assert.assertNotNull(p1); new Thread(new Runnable() { public void run() { - PLock p2 = PessimisticLockManager.getInstance().findOrPersistPLock("blublu"); + PLock p2 = pessimisticLockManager.findOrPersistPLock("blublu"); assertNotNull(p2); - long p2Acquired = System.currentTimeMillis(); + long p2Acquired = System.nanoTime(); holder.add(new Long(p2Acquired)); - DBFactory.getInstance().closeSession(); + dbInstance.closeSession(); }}).start(); - sleep(5000); - long p1AboutToRelease= System.currentTimeMillis(); - DBFactory.getInstance().closeSession(); + sleep(500); + long p1AboutToRelease = System.nanoTime(); + dbInstance.closeSession(); // if row locking is not supported, then the timestamp when p2 has been acquired will be shortly -after- p1 has been released - boolean singleRowLockingOk = holder.size() >0 && holder.get(0).longValue() < p1AboutToRelease; + boolean singleRowLockingOk = holder.size() > 0 && holder.get(0).longValue() < p1AboutToRelease; assertTrue("the database does not seem to support row locking when executing 'select for update', critical for performance!, ", singleRowLockingOk); } - @Test public void testNestedLockingSupported() { - System.out.println("testing if nested locking is supported"); + @Test + public void testNestedLockingSupported() { + log.info("testing if nested locking is supported"); // make sure all three row entries for the locks are created, otherwise the system-wide locking // applied on lock-row-creation cannot support row-level-locking by definition. - PLock pc1 = PessimisticLockManager.getInstance().findOrPersistPLock("blabla"); + PLock pc1 = pessimisticLockManager.findOrPersistPLock("blabla"); assertNotNull(pc1); - PLock pc2 = PessimisticLockManager.getInstance().findOrPersistPLock("blublu"); + PLock pc2 = pessimisticLockManager.findOrPersistPLock("blublu"); assertNotNull(pc2); - PLock pc3 = PessimisticLockManager.getInstance().findOrPersistPLock("blibli"); + PLock pc3 = pessimisticLockManager.findOrPersistPLock("blibli"); assertNotNull(pc3); - DBFactory.getInstance().closeSession(); + dbInstance.closeSession(); final List<Long> holder = new ArrayList<Long>(1); // first thread acquires the two locks and waits and continues holding the lock for some time. - PLock p1 = PessimisticLockManager.getInstance().findOrPersistPLock("blabla"); + PLock p1 = pessimisticLockManager.findOrPersistPLock("blabla"); assertNotNull(p1); - PLock p3 = PessimisticLockManager.getInstance().findOrPersistPLock("blibli"); + PLock p3 = pessimisticLockManager.findOrPersistPLock("blibli"); assertNotNull(p3); new Thread(new Runnable() { public void run() { - PLock p2 = PessimisticLockManager.getInstance().findOrPersistPLock("blibli"); + PLock p2 = pessimisticLockManager.findOrPersistPLock("blibli"); assertNotNull(p2); - long p2Acquired = System.currentTimeMillis(); + long p2Acquired = System.nanoTime(); holder.add(new Long(p2Acquired)); - DBFactory.getInstance().closeSession(); + dbInstance.closeSession(); }}).start(); - sleep(5000); + sleep(500); boolean acOk = holder.size() == 0; - DBFactory.getInstance().closeSession(); - sleep(5000); + //the commit will drop the lock on blibli d + dbInstance.closeSession(); + sleep(500); boolean acNowOk = holder.size() == 1; // if row locking is not supported, then the timestamp when p2 has been acquired will be shortly -after- p1 has been released @@ -318,18 +336,19 @@ public class PLockTest extends OlatTestCase { assertTrue("after having released the blabla lock, a next waiting thread must have acquired it after some time", acNowOk); } - @Test public void testDeadLockTimeout() { - System.out.println("testing if deadlock detection and handling is supported"); + @Test + public void testDeadLockTimeout() { + log.info("testing if deadlock detection and handling is supported"); // make sure all three row entries for the locks are created, otherwise the system-wide locking // applied on lock-row-creation cannot support row-level-locking by definition. - PLock pc1 = PessimisticLockManager.getInstance().findOrPersistPLock("blabla"); + PLock pc1 = pessimisticLockManager.findOrPersistPLock("blabla"); assertNotNull(pc1); - PLock pc2 = PessimisticLockManager.getInstance().findOrPersistPLock("blublu"); + PLock pc2 = pessimisticLockManager.findOrPersistPLock("blublu"); assertNotNull(pc2); - PLock pc3 = PessimisticLockManager.getInstance().findOrPersistPLock("blibli"); + PLock pc3 = pessimisticLockManager.findOrPersistPLock("blibli"); assertNotNull(pc3); - DBFactory.getInstance().closeSession(); + dbInstance.closeSession(); /** * t1 t2 @@ -347,27 +366,28 @@ public class PLockTest extends OlatTestCase { final List<Exception> exceptionHolder = Collections.synchronizedList(new ArrayList<Exception>(1)); - + final CountDownLatch finishCount = new CountDownLatch(2); // t1 new Thread(new Runnable() { public void run() { try { - PLock p1 = PessimisticLockManager.getInstance().findOrPersistPLock("blabla"); + PLock p1 = pessimisticLockManager.findOrPersistPLock("blabla"); assertNotNull(p1); - sleep(2500); + sleep(250); // now try to acquire blibli but that fails, since blibli is already locked by thread 2. // but thread 2 cannot continue either, since it is waiting for lock blabla, which is already hold by thread 1 // -> deadlock - PLock p3 = PessimisticLockManager.getInstance().findOrPersistPLock("blibli"); + PLock p3 = pessimisticLockManager.findOrPersistPLock("blibli"); assertNotNull(p3); } catch (Exception e) { exceptionHolder.add(e); } finally { try { - DBFactory.getInstance().closeSession(); + dbInstance.closeSession(); } catch (Exception e) { // ignore - }; + } + finishCount.countDown(); } }}).start(); @@ -375,35 +395,40 @@ public class PLockTest extends OlatTestCase { new Thread(new Runnable() { public void run() { try { - PLock p2 = PessimisticLockManager.getInstance().findOrPersistPLock("blibli"); + PLock p2 = pessimisticLockManager.findOrPersistPLock("blibli"); assertNotNull(p2); - sleep(5000); - PLock p3 = PessimisticLockManager.getInstance().findOrPersistPLock("blabla"); + sleep(500); + PLock p3 = pessimisticLockManager.findOrPersistPLock("blabla"); assertNotNull(p3); } catch (Exception e) { exceptionHolder.add(e); } finally { try { - DBFactory.getInstance().closeSession(); + dbInstance.closeSession(); } catch (Exception e) { // ignore - }; + } + finishCount.countDown(); } }}).start(); // sleep until t1 and t2 should have terminated/excepted - sleep(8000); + try { + finishCount.await(8, TimeUnit.SECONDS); + } catch (InterruptedException e) { + Assert.fail("Takes too long (more than 8sec)"); + } + // if not -> they are in deadlock and the db did not detect it for (Exception exception : exceptionHolder) { - System.out.println("exception: "+exception.getMessage()); - exception.printStackTrace(); + log.error("exception: ", exception); } assertTrue("expected a deadlock exception, but got none", exceptionHolder.size() > 0); } @Test public void testPerf() { - System.out.println("testing what the throughput is for the pessimistic locking"); + log.info("testing what the throughput is for the pessimistic locking"); // test what the throughput is for the pessimistic locking. // take 500 threads (created and started with no delay (as fast as the vm can) trying to acquire a plock on 20 different olatresourceables. // measure how long that takes. and warn if it exceeds an upper boundary. @@ -425,12 +450,12 @@ public class PLockTest extends OlatTestCase { Runnable r = new Runnable() { public void run() { try { - PessimisticLockManager.getInstance().findOrPersistPLock(asset); + pessimisticLockManager.findOrPersistPLock(asset); doneSignal.countDown(); } catch (Exception e) { e.printStackTrace(); } finally { - DBFactory.getInstance().closeSession(); + dbInstance.closeSession(); } } }; @@ -439,11 +464,10 @@ public class PLockTest extends OlatTestCase { // 4. wait till all are finished or it takes too long try { - boolean interrupt = doneSignal.await(20, TimeUnit.SECONDS); - System.out.println("perf for Plocktest:testPerf(): "+(System.currentTimeMillis()-start)); - assertTrue("Test takes too long (more than 20s)", interrupt); + doneSignal.await(20, TimeUnit.SECONDS); + log.info("perf for Plocktest:testPerf(): "+(System.currentTimeMillis()-start)); } catch (InterruptedException e) { - fail("" + e.getMessage()); + fail("Test takes too long (more than 20s)"); } // repeat the same again - this time it should/could be faster @@ -455,12 +479,12 @@ public class PLockTest extends OlatTestCase { Runnable r = new Runnable() { public void run() { try { - PessimisticLockManager.getInstance().findOrPersistPLock(asset); + pessimisticLockManager.findOrPersistPLock(asset); doneSignal2.countDown(); } catch (Exception e) { e.printStackTrace(); } finally { - DBFactory.getInstance().commitAndCloseSession(); + dbInstance.commitAndCloseSession(); } } }; @@ -471,7 +495,7 @@ public class PLockTest extends OlatTestCase { try { boolean interrupt = doneSignal.await(20, TimeUnit.SECONDS); - System.out.println("perf (again) for Plocktest:testPerf(): "+(System.currentTimeMillis()-start2)); + log.info("perf (again) for Plocktest:testPerf(): "+(System.currentTimeMillis()-start2)); assertTrue("Test takes too long (more than 20s)", interrupt); } catch (InterruptedException e) { fail("" + e.getMessage()); @@ -479,7 +503,7 @@ public class PLockTest extends OlatTestCase { } @Test public void testSync() { - System.out.println("testing enrollment"); + log.info("testing enrollment"); // ------------------ now check with lock ------------------- // create a group // create users @@ -487,13 +511,13 @@ public class PLockTest extends OlatTestCase { for (int i = 0; i < MAX_COUNT + MAX_USERS_MORE; i++) { Identity id = JunitTestHelper.createAndPersistIdentityAsUser("u-" + i + "-" + UUID.randomUUID().toString()); identities.add(id); - System.out.println("testSync: Identity=" + id.getName() + " created"); + log.info("testSync: Identity=" + id.getName() + " created"); } - DBFactory.getInstance().closeSession(); + dbInstance.closeSession(); final SecurityGroup group2 = BaseSecurityManager.getInstance().createAndPersistSecurityGroup(); // make sure the lock has been written to the disk (tests for createOrFind see other methods) - DBFactory.getInstance().closeSession(); + dbInstance.closeSession(); //prepare threads int numOfThreads = MAX_COUNT + MAX_USERS_MORE; @@ -505,14 +529,14 @@ public class PLockTest extends OlatTestCase { new Thread(new Runnable(){ public void run() { try { - System.out.println("testSync: thread started j=" + j); + log.info("testSync: thread started j=" + j); Identity id = identities.get(j); // - PLock p2 = PessimisticLockManager.getInstance().findOrPersistPLock("befinsert"); + PLock p2 = pessimisticLockManager.findOrPersistPLock("befinsert"); assertNotNull(p2); doNoLockingEnrol(id, group2); - DBFactory.getInstance().commit(); - DBFactory.getInstance().closeSession(); + dbInstance.commit(); + dbInstance.closeSession(); } catch (Exception e) { e.printStackTrace(); } finally { @@ -524,19 +548,19 @@ public class PLockTest extends OlatTestCase { try { finishCount.await(120, TimeUnit.SECONDS); } catch (InterruptedException e) { - e.printStackTrace(); + log.error("", e); } // now count - DBFactory.getInstance().closeSession(); + dbInstance.closeSession(); int cnt2 = BaseSecurityManager.getInstance().countIdentitiesOfSecurityGroup(group2); assertTrue("cnt should be smaller or eq than allowed since synced with select for update. cnt:"+cnt2+", max "+MAX_COUNT, cnt2 <= MAX_COUNT); assertTrue("cnt should be eq to allowed since synced with select for update. cnt:"+cnt2+", max "+MAX_COUNT, cnt2 == MAX_COUNT); - System.out.println("cnt lock "+cnt2); + log.info("cnt lock "+cnt2); } - void doNoLockingEnrol(Identity i, SecurityGroup group) { + private void doNoLockingEnrol(Identity i, SecurityGroup group) { // check that below max try { StringBuilder sb = new StringBuilder(); @@ -549,9 +573,9 @@ public class PLockTest extends OlatTestCase { sb.append(" adding "+i.getName()+": current.. "+cnt+", max = "+MAX_COUNT); BaseSecurityManager.getInstance().addIdentityToSecurityGroup(i, group); } - System.out.println(sb.toString()); + log.info(sb.toString()); } catch (Exception e) { - e.printStackTrace(); + log.error("", e); } } } \ No newline at end of file diff --git a/src/test/java/org/olat/restapi/RestConnection.java b/src/test/java/org/olat/restapi/RestConnection.java index f2ca86bb170d097823974f12b6500c12dbed64a2..f1133e0c420185417d755693e9168129f492a024 100644 --- a/src/test/java/org/olat/restapi/RestConnection.java +++ b/src/test/java/org/olat/restapi/RestConnection.java @@ -180,9 +180,11 @@ public class RestConnection { if(200 == response.getStatusLine().getStatusCode()) { HttpEntity entity = response.getEntity(); return parse(entity.getContent(), cl); + } else { + EntityUtils.consume(response.getEntity()); + log.error("get return: " + response.getStatusLine().getStatusCode()); + return null; } - log.error("get return: " + response.getStatusLine().getStatusCode()); - return null; } public void addEntity(HttpEntityEnclosingRequestBase put, NameValuePair... pairs) diff --git a/src/test/java/org/olat/test/AllTestsJunit4.java b/src/test/java/org/olat/test/AllTestsJunit4.java index 8019e90d1e8438a1a3154a37f29498834d9f22ce..87ef6fe24a545551815271e2f19aac4b7eb91200 100644 --- a/src/test/java/org/olat/test/AllTestsJunit4.java +++ b/src/test/java/org/olat/test/AllTestsJunit4.java @@ -100,7 +100,7 @@ import org.junit.runners.Suite; org.olat.resource.OLATResourceManagerTest.class,//ok org.olat.basesecurity.manager.GroupDAOTest.class,//ok org.olat.basesecurity.SecurityManagerTest.class,//ok - org.olat.basesecurity.BaseSecurityTest.class,//ok + org.olat.basesecurity.GetIdentitiesByPowerSearchTest.class,//ok org.olat.basesecurity.BaseSecurityManagerTest.class,//ok org.olat.user.UserManagerTest.class,//ok org.olat.user.UserNameAndPasswordSyntaxCheckerWithRegexpTest.class,//ok