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 {
});
}
/**
* 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;
import org.jivesoftware.smack.packet.Presence;
import org.olat.core.commons.persistence.DBFactory;
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>
......@@ -40,6 +41,8 @@ import org.olat.properties.PropertyManager;
*/
public class IMPrefsTask implements Runnable {
private OLog log = Tracing.createLoggerFor(IMPrefsTask.class);
private Identity ident;
public IMPrefsTask(Identity ident) {
......@@ -56,8 +59,7 @@ public class IMPrefsTask implements Runnable {
try {
Thread.sleep(z);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
log.error("", e);
}
ImPrefsManager mgr = ImPrefsManager.getInstance();
......@@ -68,13 +70,13 @@ public class IMPrefsTask implements Runnable {
prefs.setVisibleToOthers(false);
mgr.updatePropertiesFor(ident, prefs);
double rand = Math.random()*3;
double rand = Math.random() * 3;
int i = Long.valueOf((Math.round(rand))).intValue();
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());
}
DBFactory.getInstance().closeSession();
DBFactory.getInstance().commitAndCloseSession();
System.out.println("prefs loaded and updated for user: "+ident.getName());
}
......
......@@ -28,14 +28,12 @@ package org.olat.instantMessaging;
import static org.junit.Assert.assertNotNull;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
import org.junit.After;
import org.junit.Before;
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.taskExecutor.TaskExecutorManager;
import org.olat.core.id.Identity;
......@@ -55,38 +53,44 @@ import org.springframework.beans.factory.annotation.Autowired;
*/
public class IMPrefsUnitTest extends OlatTestCase {
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
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
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>();
usernames.add(testUserA);
usernames.add(testUserB);
usernames.add(testUserC);
usernames.add(testUserD);
identities.add(id1);
identities.add(id2);
identities.add(id3);
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();
int runs = 0;
while (runs < 100) {
double rand = Math.random()*3;
for (int runs=0; runs<100; runs++) {
double rand = Math.random() * 3.0d;
int i = Long.valueOf((Math.round(rand))).intValue();
ImPrefsManager mgr = ImPrefsManager.getInstance();
Identity ident = identities.get(i);
ImPreferences prefs = mgr.loadOrCreatePropertiesFor(ident);
Identity randomIdentity = identities.get(i);
ImPreferences prefs = imPrefsManager.loadOrCreatePropertiesFor(randomIdentity);
assertNotNull(prefs);
assertNotNull(prefs.getDbProperty());
......@@ -95,42 +99,17 @@ public class IMPrefsUnitTest extends OlatTestCase {
} catch (InterruptedException e1) {
log.error("", e1);
}
for (Iterator<Identity> iterator = identities.iterator(); iterator.hasNext();) {
ident = iterator.next();
TaskExecutorManager.getInstance().runTask(new IMPrefsTask(ident));
for (Identity identity:identities) {
TaskExecutorManager.getInstance().runTask(new IMPrefsTask(identity));
try {
Thread.sleep(20);
} catch (InterruptedException e) {
log.error("", e);
}
}
runs++;
}
long stop = System.currentTimeMillis();
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