From 59dd7e763f22fdc2e075dc1d188225b4f965616c Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Fri, 29 Jun 2012 14:28:56 +0200 Subject: [PATCH] OO-291: fix a threading issue with the test --- .../olat/instantMessaging/ImPrefsManager.java | 14 +++ .../olat/instantMessaging/IMPrefsTask.java | 14 +-- .../instantMessaging/IMPrefsUnitTest.java | 85 +++++++------------ 3 files changed, 54 insertions(+), 59 deletions(-) diff --git a/src/main/java/org/olat/instantMessaging/ImPrefsManager.java b/src/main/java/org/olat/instantMessaging/ImPrefsManager.java index cdb81c5aeca..3f2f2440d7c 100644 --- a/src/main/java/org/olat/instantMessaging/ImPrefsManager.java +++ b/src/main/java/org/olat/instantMessaging/ImPrefsManager.java @@ -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()); + } + }); + } /** * diff --git a/src/test/java/org/olat/instantMessaging/IMPrefsTask.java b/src/test/java/org/olat/instantMessaging/IMPrefsTask.java index 870741971b5..cfc0c4b750a 100644 --- a/src/test/java/org/olat/instantMessaging/IMPrefsTask.java +++ b/src/test/java/org/olat/instantMessaging/IMPrefsTask.java @@ -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()); } diff --git a/src/test/java/org/olat/instantMessaging/IMPrefsUnitTest.java b/src/test/java/org/olat/instantMessaging/IMPrefsUnitTest.java index 08b344abf9e..a0fab2587e7 100644 --- a/src/test/java/org/olat/instantMessaging/IMPrefsUnitTest.java +++ b/src/test/java/org/olat/instantMessaging/IMPrefsUnitTest.java @@ -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 -- GitLab