Skip to content
Snippets Groups Projects
Commit 59dd7e76 authored by srosse's avatar srosse
Browse files

OO-291: fix a threading issue with the test

parent 9834efee
No related branches found
No related tags found
No related merge requests found
...@@ -140,6 +140,20 @@ public class ImPrefsManager extends BasicManager { ...@@ -140,6 +140,20 @@ public class ImPrefsManager extends BasicManager {
}); });
} }
/**
* Delete must be synched too
*
*/
public void deleteProperties(final Identity identity, final ImPreferences prefs) {
//o_clusterOK by guido
CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync(
OresHelper.createOLATResourceableInstanceWithoutCheck(LOCK_KEY, identity.getKey()), new SyncerExecutor(){
public void execute() {
PropertyManager.getInstance().deleteProperty(prefs.getDbProperty());
}
});
}
/** /**
* *
......
...@@ -28,7 +28,8 @@ package org.olat.instantMessaging; ...@@ -28,7 +28,8 @@ package org.olat.instantMessaging;
import org.jivesoftware.smack.packet.Presence; import org.jivesoftware.smack.packet.Presence;
import org.olat.core.commons.persistence.DBFactory; import org.olat.core.commons.persistence.DBFactory;
import org.olat.core.id.Identity; import org.olat.core.id.Identity;
import org.olat.properties.PropertyManager; import org.olat.core.logging.OLog;
import org.olat.core.logging.Tracing;
/** /**
* Description:<br> * Description:<br>
...@@ -40,6 +41,8 @@ import org.olat.properties.PropertyManager; ...@@ -40,6 +41,8 @@ import org.olat.properties.PropertyManager;
*/ */
public class IMPrefsTask implements Runnable { public class IMPrefsTask implements Runnable {
private OLog log = Tracing.createLoggerFor(IMPrefsTask.class);
private Identity ident; private Identity ident;
public IMPrefsTask(Identity ident) { public IMPrefsTask(Identity ident) {
...@@ -56,8 +59,7 @@ public class IMPrefsTask implements Runnable { ...@@ -56,8 +59,7 @@ public class IMPrefsTask implements Runnable {
try { try {
Thread.sleep(z); Thread.sleep(z);
} catch (InterruptedException e) { } catch (InterruptedException e) {
// TODO Auto-generated catch block log.error("", e);
e.printStackTrace();
} }
ImPrefsManager mgr = ImPrefsManager.getInstance(); ImPrefsManager mgr = ImPrefsManager.getInstance();
...@@ -68,13 +70,13 @@ public class IMPrefsTask implements Runnable { ...@@ -68,13 +70,13 @@ public class IMPrefsTask implements Runnable {
prefs.setVisibleToOthers(false); prefs.setVisibleToOthers(false);
mgr.updatePropertiesFor(ident, prefs); mgr.updatePropertiesFor(ident, prefs);
double rand = Math.random()*3; double rand = Math.random() * 3;
int i = Long.valueOf((Math.round(rand))).intValue(); int i = Long.valueOf((Math.round(rand))).intValue();
if (i == 1) { if (i == 1) {
PropertyManager.getInstance().deleteProperty(prefs.getDbProperty()); //delete from time to time a property mgr.deleteProperties(ident, prefs);
System.out.println("prefs deleted for user: "+ident.getName()); System.out.println("prefs deleted for user: "+ident.getName());
} }
DBFactory.getInstance().closeSession(); DBFactory.getInstance().commitAndCloseSession();
System.out.println("prefs loaded and updated for user: "+ident.getName()); System.out.println("prefs loaded and updated for user: "+ident.getName());
} }
......
...@@ -28,14 +28,12 @@ package org.olat.instantMessaging; ...@@ -28,14 +28,12 @@ package org.olat.instantMessaging;
import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotNull;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import org.junit.After; import org.junit.After;
import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.olat.basesecurity.BaseSecurity; import org.olat.core.commons.persistence.DB;
import org.olat.core.commons.persistence.DBFactory; import org.olat.core.commons.persistence.DBFactory;
import org.olat.core.commons.taskExecutor.TaskExecutorManager; import org.olat.core.commons.taskExecutor.TaskExecutorManager;
import org.olat.core.id.Identity; import org.olat.core.id.Identity;
...@@ -55,38 +53,44 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -55,38 +53,44 @@ import org.springframework.beans.factory.annotation.Autowired;
*/ */
public class IMPrefsUnitTest extends OlatTestCase { public class IMPrefsUnitTest extends OlatTestCase {
private OLog log = Tracing.createLoggerFor(IMPrefsUnitTest.class); private OLog log = Tracing.createLoggerFor(IMPrefsUnitTest.class);
private String testUserA = "anIdentity1-" + UUID.randomUUID().toString();
private String testUserB = "anIdentity2-" + UUID.randomUUID().toString();
private String testUserC = "anIdentity3-" + UUID.randomUUID().toString();
private String testUserD = "anIdentity4-" + UUID.randomUUID().toString();
@Autowired @Autowired
private BaseSecurity securityManager; private DB dbInstance;
@Autowired
private ImPrefsManager imPrefsManager;
@After
public void tearDown() {
try {
DBFactory.getInstance().closeSession();
} catch (Exception e) {
log.error("Exception in tearDown(): " + e);
}
}
@Test @Test
public void testPrefs() { public void testPrefs() {
List<String> usernames = new ArrayList<String>(); Identity id1 = JunitTestHelper.createAndPersistIdentityAsUser("im-1-" + UUID.randomUUID().toString());
Identity id2 = JunitTestHelper.createAndPersistIdentityAsUser("im-1-" + UUID.randomUUID().toString());
Identity id3 = JunitTestHelper.createAndPersistIdentityAsUser("im-1-" + UUID.randomUUID().toString());
Identity id4 = JunitTestHelper.createAndPersistIdentityAsUser("im-1-" + UUID.randomUUID().toString());
List<Identity> identities = new ArrayList<Identity>(); List<Identity> identities = new ArrayList<Identity>();
usernames.add(testUserA); identities.add(id1);
usernames.add(testUserB); identities.add(id2);
usernames.add(testUserC); identities.add(id3);
usernames.add(testUserD); identities.add(id4);
dbInstance.commitAndCloseSession();
for (Iterator<String> iterator = usernames.iterator(); iterator.hasNext();) {
String name = iterator.next();
Identity ident = securityManager.findIdentityByName(name);
assertNotNull(ident);
identities.add(ident);
}
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
int runs = 0; for (int runs=0; runs<100; runs++) {
while (runs < 100) { double rand = Math.random() * 3.0d;
double rand = Math.random()*3;
int i = Long.valueOf((Math.round(rand))).intValue(); int i = Long.valueOf((Math.round(rand))).intValue();
ImPrefsManager mgr = ImPrefsManager.getInstance();
Identity ident = identities.get(i); Identity randomIdentity = identities.get(i);
ImPreferences prefs = mgr.loadOrCreatePropertiesFor(ident); ImPreferences prefs = imPrefsManager.loadOrCreatePropertiesFor(randomIdentity);
assertNotNull(prefs); assertNotNull(prefs);
assertNotNull(prefs.getDbProperty()); assertNotNull(prefs.getDbProperty());
...@@ -95,42 +99,17 @@ public class IMPrefsUnitTest extends OlatTestCase { ...@@ -95,42 +99,17 @@ public class IMPrefsUnitTest extends OlatTestCase {
} catch (InterruptedException e1) { } catch (InterruptedException e1) {
log.error("", e1); log.error("", e1);
} }
for (Iterator<Identity> iterator = identities.iterator(); iterator.hasNext();) { for (Identity identity:identities) {
ident = iterator.next(); TaskExecutorManager.getInstance().runTask(new IMPrefsTask(identity));
TaskExecutorManager.getInstance().runTask(new IMPrefsTask(ident));
try { try {
Thread.sleep(20); Thread.sleep(20);
} catch (InterruptedException e) { } catch (InterruptedException e) {
log.error("", e); log.error("", e);
} }
} }
runs++;
} }
long stop = System.currentTimeMillis(); long stop = System.currentTimeMillis();
System.out.println("took time in s:"+(stop-start)/1000); System.out.println("took time in s:"+(stop-start)/1000);
}
/**
* @see junit.framework.TestCase#setUp()
*/
@Before
public void setup()throws Exception {
JunitTestHelper.createAndPersistIdentityAsUser(testUserA);
JunitTestHelper.createAndPersistIdentityAsUser(testUserB);
JunitTestHelper.createAndPersistIdentityAsUser(testUserC);
JunitTestHelper.createAndPersistIdentityAsUser(testUserD);
DBFactory.getInstance().closeSession();
}
/**
* TearDown is called after each test
*/
@After public void tearDown() {
try {
DBFactory.getInstance().closeSession();
} catch (Exception e) {
log.error("Exception in tearDown(): " + e);
}
} }
} }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment