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