You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2016/11/08 13:09:25 UTC

svn commit: r1768685 - in /openmeetings/application: branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/ branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/ branches/3.1.x/openmeetings-web/...

Author: solomax
Date: Tue Nov  8 13:09:24 2016
New Revision: 1768685

URL: http://svn.apache.org/viewvc?rev=1768685&view=rev
Log:
[OPENMEETINGS-1502] NPE while ldap user check should be fixed

Modified:
    openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java
    openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml
    openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/AbstractJUnitDefaults.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureGetAppointmentByRange.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/calendar/TestSendIcalMessage.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserContact.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserCount.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserGroup.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/AbstractWebServiceTest.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestRecordingService.java
    openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java
    openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/AbstractJUnitDefaults.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureGetAppointmentByRange.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserContact.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserCount.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserGroup.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/AbstractWebServiceTest.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestRecordingService.java
    openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java
    openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java
    openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml
    openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/AbstractJUnitDefaults.java
    openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureGetAppointmentByRange.java
    openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserContact.java
    openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserCount.java
    openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserGroup.java
    openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/AbstractWebServiceTest.java
    openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestRecordingService.java

Modified: openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java Tue Nov  8 13:09:24 2016
@@ -375,6 +375,7 @@ public class UserDao implements IDataPro
 					.setParameter("type", type)
 					.setParameter("domainId", domainId == null ? Long.valueOf(0) : domainId)
 					.getSingleResult();
+			u.getGroupUsers().size(); // this will initiate lazy collection
 		} catch (NoResultException ex) {
 		}
 		return u;

Modified: openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java Tue Nov  8 13:09:24 2016
@@ -249,7 +249,7 @@ public class User implements IDataProvid
 	private Address address;
 
 	@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
-	@JoinColumn(name = "user_id", insertable = true, updatable = true)
+	@JoinColumn(name = "user_id", insertable = true, updatable = true, nullable = false)
 	@ElementList(name = "organisations", required = false)
 	@ElementDependent
 	private List<GroupUser> groupUsers = new ArrayList<>();
@@ -482,9 +482,6 @@ public class User implements IDataProvid
 	}
 
 	public List<GroupUser> getGroupUsers() {
-		if (groupUsers == null) {
-			groupUsers = new ArrayList<>();
-		}
 		return groupUsers;
 	}
 

Modified: openmeetings/application/branches/3.1.x/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml Tue Nov  8 13:09:24 2016
@@ -68,13 +68,13 @@
 			<property name="openjpa.ConnectionDriverName" value="org.apache.commons.dbcp2.BasicDataSource" />
 			<property name="openjpa.ConnectionProperties"
 				value="DriverClassName=org.apache.derby.jdbc.EmbeddedDriver,
-                                  Url=jdbc:derby:openmeetings;create=true, 
-                                  create=true,
-                                  MaxActive=100, 
-                                  MaxWait=10000, 
-                                  TestOnBorrow=true, 
-                                  Username=user, 
-                                  Password=secret" />
+						Url=jdbc:derby:openmeetings;create=true,
+						create=true,
+						MaxActive=100,
+						MaxWait=10000,
+						TestOnBorrow=true,
+						Username=user,
+						Password=secret" />
 			<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema" />
 			<property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO" />
 			<property name="openjpa.DataCache" value="true" />

Modified: openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/AbstractJUnitDefaults.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/AbstractJUnitDefaults.java?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/AbstractJUnitDefaults.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/AbstractJUnitDefaults.java Tue Nov  8 13:09:24 2016
@@ -23,12 +23,14 @@ import static org.apache.openmeetings.ut
 import static org.junit.Assert.assertNotNull;
 
 import java.util.Date;
+import java.util.UUID;
 
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
 import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.user.Address;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.installation.ImportInitvalues;
 import org.apache.openmeetings.installation.InstallationConfig;
@@ -138,19 +140,34 @@ public abstract class AbstractJUnitDefau
 		return ap;
 	}
 
-	public User getUser(int rnd) throws Exception {
+	public User getUser() throws Exception {
+		return getUser(UUID.randomUUID().toString());
+	}
+
+	protected String getRandomPass(String uuid) {
+		return "pass" + uuid;
+	}
+
+	public User getUser(String uuid) throws Exception {
 		User u = new User();
 		// add user
-		u.setFirstname("firstname" + rnd);
-		u.setLastname("lastname" + rnd);
-		u.setLogin("login" + rnd);
-		u.updatePassword(cfgDao, "pass" + rnd);
+		u.setFirstname("firstname" + uuid);
+		u.setLastname("lastname" + uuid);
+		u.setLogin("login" + uuid);
+		u.setAddress(new Address());
+		u.getAddress().setEmail(String.format("email%s@local", uuid));
+		u.setRights(UserDao.getDefaultRights());
+		u.updatePassword(cfgDao, getRandomPass(uuid));
 		u.setLanguageId(1L);
 		return u;
 	}
 
-	public User createUser(int rnd) throws Exception {
-		User u = getUser(rnd);
+	public User createUser() throws Exception {
+		return createUser(UUID.randomUUID().toString());
+	}
+
+	public User createUser(String uuid) throws Exception {
+		User u = getUser(uuid);
 		u = userDao.update(u, null);
 		assertNotNull("Can't add user", u);
 		return u;
@@ -166,8 +183,12 @@ public abstract class AbstractJUnitDefau
 		importInitvalues.loadAll(cfg, false);
 	}
 
-	public User createUserContact(int rnd, Long ownerId) {
-		User user = userDao.getContact("email" + rnd, "firstname" + rnd, "lastname" + rnd, ownerId);
+	public User createUserContact(Long ownerId) {
+		return createUserContact(UUID.randomUUID().toString(), ownerId);
+	}
+
+	public User createUserContact(String uuid, Long ownerId) {
+		User user = userDao.getContact("email" + uuid, "firstname" + uuid, "lastname" + uuid, ownerId);
 		user = userDao.update(user, ownerId);
 		assertNotNull("Cann't add user", user);
 		return user;

Modified: openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureGetAppointmentByRange.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureGetAppointmentByRange.java?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureGetAppointmentByRange.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureGetAppointmentByRange.java Tue Nov  8 13:09:24 2016
@@ -23,7 +23,6 @@ import static org.junit.Assert.assertEqu
 
 import java.util.ArrayList;
 import java.util.Calendar;
-import java.util.Random;
 
 import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
@@ -45,7 +44,6 @@ public class TestDatabaseStructureGetApp
 		log.debug("Test started");
 		Long userId = 1L;
 		
-		Random rnd = new Random();
 		Calendar now = Calendar.getInstance();
 		Calendar rangeStart = Calendar.getInstance();
 		rangeStart.setTime(now.getTime());
@@ -64,7 +62,7 @@ public class TestDatabaseStructureGetApp
 		a2.setTitle("AppointmentByRange_a2");
 		a2.setMeetingMembers(new ArrayList<MeetingMember>());
 		MeetingMember mm1 = new MeetingMember();
-		mm1.setUser(createUserContact(rnd.nextInt(), userId));
+		mm1.setUser(createUserContact(userId));
 		mm1.setAppointment(a2);
 		a2.getMeetingMembers().add(mm1);
 		
@@ -72,11 +70,11 @@ public class TestDatabaseStructureGetApp
 		a3.setTitle("AppointmentByRange_a3");
 		a3.setMeetingMembers(new ArrayList<MeetingMember>());
 		MeetingMember mm2 = new MeetingMember();
-		mm2.setUser(createUserContact(rnd.nextInt(), userId));
+		mm2.setUser(createUserContact(userId));
 		mm2.setAppointment(a3);
 		a3.getMeetingMembers().add(mm2);
 		MeetingMember mm3 = new MeetingMember();
-		mm3.setUser(createUserContact(rnd.nextInt(), userId));
+		mm3.setUser(createUserContact(userId));
 		mm3.setAppointment(a3);
 		a3.getMeetingMembers().add(mm3);
 		

Modified: openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/calendar/TestSendIcalMessage.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/calendar/TestSendIcalMessage.java?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/calendar/TestSendIcalMessage.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/calendar/TestSendIcalMessage.java Tue Nov  8 13:09:24 2016
@@ -22,12 +22,12 @@ import static org.apache.openmeetings.ut
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
-import java.net.SocketException;
 import java.net.URI;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.GregorianCalendar;
 import java.util.Map;
+import java.util.UUID;
 import java.util.Vector;
 
 import javax.activation.DataHandler;
@@ -65,7 +65,6 @@ import net.fortuna.ical4j.model.property
 import net.fortuna.ical4j.model.property.ProdId;
 import net.fortuna.ical4j.model.property.Uid;
 import net.fortuna.ical4j.model.property.Version;
-import net.fortuna.ical4j.util.UidGenerator;
 
 public class TestSendIcalMessage extends AbstractJUnitDefaults {
 	private static final Logger log = Red5LoggerFactory.getLogger(TestSendIcalMessage.class, webAppRootKey);
@@ -116,16 +115,8 @@ public class TestSendIcalMessage extends
 		meeting.getProperties().add(tz.getTimeZoneId());
 
 		// generate unique identifier..
-		UidGenerator ug;
-		try {
-			ug = new UidGenerator("uidGen");
-
-			Uid uid = ug.generateUid();
-			meeting.getProperties().add(uid);
-		} catch (SocketException e) {
-			// TODO Auto-generated catch block
-			log.error("Error", e);
-		}
+		Uid uid = new Uid(UUID.randomUUID().toString());
+		meeting.getProperties().add(uid);
 
 		// add attendees..
 		Attendee dev1 = new Attendee(URI.create("mailto:dev1@mycompany.com"));

Modified: openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserContact.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserContact.java?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserContact.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserContact.java Tue Nov  8 13:09:24 2016
@@ -25,7 +25,7 @@ import static org.junit.Assert.assertNul
 import static org.junit.Assert.assertTrue;
 
 import java.util.List;
-import java.util.Random;
+import java.util.UUID;
 
 import org.apache.openmeetings.db.dao.user.GroupDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
@@ -40,7 +40,6 @@ public class TestUserContact extends Abs
 	private UserDao userDao;
 	@Autowired
 	private GroupDao groupDao;
-	Random random = new Random();
 	
 	@Test
 	public void testGetUser() throws Exception {
@@ -49,11 +48,11 @@ public class TestUserContact extends Abs
 	
 	@Test
 	public void createUserWithGroup() throws Exception {
-		int rnd = random.nextInt();
-		User u = getUser(rnd);
+		String uuid = UUID.randomUUID().toString();
+		User u = getUser(uuid);
 		u.getGroupUsers().add(new GroupUser(groupDao.get(1L), u));
 		u = userDao.update(u, null);
-		assertTrue("Password should be set as expected", userDao.verifyPassword(u.getId(), "pass" + rnd));
+		assertTrue("Password should be set as expected", userDao.verifyPassword(u.getId(), getRandomPass(uuid)));
 		
 		User u1 = userDao.get(u.getId());
 		assertNotNull("Just created user should not be null", u1);
@@ -62,10 +61,10 @@ public class TestUserContact extends Abs
 	}
 	
 	@Test
-	public void createUser() throws Exception {
-		int rnd = random.nextInt();
-		User u = createUser(rnd);
-		assertTrue("Password should be set as expected", userDao.verifyPassword(u.getId(), "pass" + rnd));
+	public void testCreateUser() throws Exception {
+		String uuid = UUID.randomUUID().toString();
+		User u = createUser(uuid);
+		assertTrue("Password should be set as expected", userDao.verifyPassword(u.getId(), getRandomPass(uuid)));
 	}
 	
 	@Test
@@ -76,7 +75,7 @@ public class TestUserContact extends Abs
 		assertNotNull("User list should not be null ", users);
 		assertFalse("User list should not be empty ", users.isEmpty());
 		
-		User contact = createUserContact(random.nextInt(), getUserId());
+		User contact = createUserContact(getUserId());
 		String email = contact.getAddress().getEmail();
 		List<User> l = userDao.get(email, false, 0, 9999);
 		// check that contact is visible for admin
@@ -91,9 +90,9 @@ public class TestUserContact extends Abs
 		l = userDao.get(email, false, 0, 9999);
 		assertTrue("Contact list should be empty after deletion", l.isEmpty());
 
-		User u = createUser(random.nextInt());
-		User u1 = createUser(random.nextInt());
-		contact = createUserContact(random.nextInt(), u.getId());
+		User u = createUser();
+		User u1 = createUser();
+		contact = createUserContact(u.getId());
 		email = contact.getAddress().getEmail();
 		// check that contact is not visible for user that is not owner of this contact
 		l = userDao.get(email, 0, 9999, null, true, u1.getId());

Modified: openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserCount.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserCount.java?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserCount.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserCount.java Tue Nov  8 13:09:24 2016
@@ -21,8 +21,6 @@ package org.apache.openmeetings.test.use
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
 import static org.junit.Assert.assertTrue;
 
-import java.util.Random;
-
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.test.AbstractWicketTester;
@@ -32,25 +30,24 @@ import org.springframework.beans.factory
 public class TestUserCount extends AbstractWicketTester {
 	@Autowired
 	private UserDao userDao;
-	Random random = new Random();
 
 	@Test
 	public void testCountSearchUsers() throws Exception {
-		User u = createUser(random.nextInt());
+		User u = createUser();
 		assertTrue("Account of search users should be one", userDao.count(u.getFirstname()) == 1);
 	}
 
 	@Test
 	public void testCountFilteredUsers() throws Exception {
-		User u = createUser(random.nextInt());
-		User contact = createUserContact(random.nextInt(), u.getId());
+		User u = createUser();
+		User contact = createUserContact(u.getId());
 		assertTrue("Account of filtered user should be one", userDao.count(contact.getFirstname(), true, u.getId()) == 1);
 	}
 
 	@Test
 	public void testCountUnfilteredUsers() throws Exception {
-		User u = createUser(random.nextInt());
-		createUserContact(random.nextInt(), u.getId());
+		User u = createUser();
+		createUserContact(u.getId());
 		assertTrue("Account of unfiltered should be more then one", userDao.count("firstname", false, getUserId()) > 1);
 	}
 		

Modified: openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserGroup.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserGroup.java?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserGroup.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserGroup.java Tue Nov  8 13:09:24 2016
@@ -23,7 +23,7 @@ import static org.junit.Assert.assertTru
 import static org.junit.Assert.fail;
 
 import java.util.List;
-import java.util.Random;
+import java.util.UUID;
 
 import org.apache.openmeetings.db.dao.user.GroupDao;
 import org.apache.openmeetings.db.dao.user.GroupUserDao;
@@ -33,6 +33,7 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.test.AbstractJUnitDefaults;
 import org.apache.openmeetings.test.selenium.HeavyTests;
+import org.apache.openmeetings.util.OmException;
 import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
@@ -44,7 +45,7 @@ public class TestUserGroup extends Abstr
 	@Autowired
 	private UserDao userDao;
 	public static final String GROUP_NAME = "Test Group";
-	
+
 	private User getValidUser() {
 		for (User u : userDao.getAllBackupUsers()) {
 			if (!u.isDeleted() && u.getGroupUsers().size() > 0) {
@@ -52,9 +53,9 @@ public class TestUserGroup extends Abstr
 			}
 		}
 		fail("Unable to find valid user");
-		return null;  //unreachable
+		return null; //unreachable
 	}
-	
+
 	@Test
 	public void getUsersByGroupId() {
 		User u = getValidUser();
@@ -63,14 +64,14 @@ public class TestUserGroup extends Abstr
 		assertTrue("Default Group should contain at least 1 user: " + ul.size(), ul.size() > 0);
 		
 		GroupUser ou = groupUserDao.getByGroupAndUser(groupId, u.getId());
-		assertNotNull("Unable to found [group, user] pair - [" + groupId + "," + u.getId() + "]", ou);
+		assertNotNull("Unable to find [group, user] pair - [" + groupId + "," + u.getId() + "]", ou);
 	}
-	
+
 	@Test
 	public void addGroup() {
-		Group o = new Group();
-		o.setName(GROUP_NAME);
-		Long groupId = groupDao.update(o, null).getId(); //inserted by not checked
+		Group g = new Group();
+		g.setName(GROUP_NAME);
+		Long groupId = groupDao.update(g, null).getId(); //inserted by not checked
 		assertNotNull("New Group have valid id", groupId);
 		
 		List<GroupUser> ul = groupUserDao.get(groupId, 0, 9999);
@@ -78,6 +79,38 @@ public class TestUserGroup extends Abstr
 	}
 
 	@Test
+	public void addUserWithoutGroup() throws Exception {
+		String uuid = UUID.randomUUID().toString();
+		User u = getUser(uuid);
+		u = userDao.update(u, null);
+		assertNotNull("User successfully created", u.getId());
+		checkEmptyGroup("dao.get()", userDao.get(u.getId()));
+		try {
+			checkEmptyGroup("dao.login()", userDao.login(u.getAddress().getEmail(), getRandomPass(uuid)));
+			fail("User with no Group is unable to login");
+		} catch (OmException e) {
+			assertTrue("Expected Om Exception", "No Group assigned to user".equals(e.getMessage()));
+		}
+		checkEmptyGroup("dao.getByLogin(user)", userDao.getByLogin(u.getLogin(), u.getType(), u.getDomainId()));
+	}
+
+
+	@Test
+	public void addLdapUserWithoutGroup() throws Exception {
+		User u1 = getUser();
+		u1.setType(User.Type.ldap);
+		u1.setDomainId(1L);
+		u1 = userDao.update(u1, null);
+		checkEmptyGroup("dao.getByLogin(ldap)", userDao.getByLogin(u1.getLogin(), u1.getType(), u1.getDomainId()));
+	}
+
+	private void checkEmptyGroup(String prefix, User u) {
+		assertNotNull(prefix + ":: Created user should be available", u);
+		assertNotNull(prefix + ":: List<GroupUser> for newly created user should not be null", u.getGroupUsers());
+		assertTrue(prefix + ":: List<GroupUser> for newly created user should be empty", u.getGroupUsers().isEmpty());
+	}
+
+	@Test
 	@HeavyTests
 	public void add10kUsers() throws Exception {
 		List<Group> groups = groupDao.get(GROUP_NAME, 0, 1, null);
@@ -89,9 +122,8 @@ public class TestUserGroup extends Abstr
 		} else {
 			g = groups.get(0);
 		}
-		Random rnd = new Random();
 		for (int i = 0; i < 10000; ++i) {
-			User u = createUser(rnd.nextInt());
+			User u = createUser();
 			u.getGroupUsers().add(new GroupUser(g, u));
 			userDao.update(u, null);
 		}

Modified: openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/AbstractWebServiceTest.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/AbstractWebServiceTest.java?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/AbstractWebServiceTest.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/AbstractWebServiceTest.java Tue Nov  8 13:09:24 2016
@@ -23,7 +23,7 @@ import static org.junit.Assert.assertEqu
 
 import java.io.File;
 import java.nio.file.Files;
-import java.util.Random;
+import java.util.UUID;
 
 import org.apache.catalina.LifecycleState;
 import org.apache.catalina.startup.Tomcat;
@@ -39,7 +39,6 @@ public class AbstractWebServiceTest exte
 	public final static String CONTEXT = "/openmeetings";
 	public final static String BASE_SERVICES_URL = "http://localhost:8080" + CONTEXT + "/services";
 	public final static String USER_SERVICE_URL = BASE_SERVICES_URL + "/user";
-	protected static final Random rnd = new Random();
 
 	public static WebClient getClient(String url) {
 		return WebClient.create(url).accept("application/json").type("application/json");
@@ -56,7 +55,7 @@ public class AbstractWebServiceTest exte
 	public static void initialize() throws Exception {
 		tomcat = new Tomcat();
 		tomcat.setPort(8080);
-		File wd = Files.createTempDirectory("om" + rnd.nextInt()).toFile();
+		File wd = Files.createTempDirectory("om" + UUID.randomUUID().toString()).toFile();
 		tomcat.setBaseDir(wd.getCanonicalPath());
 		tomcat.getHost().setAppBase(wd.getCanonicalPath());
 		tomcat.getHost().setAutoDeploy(true);

Modified: openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestRecordingService.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestRecordingService.java?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestRecordingService.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestRecordingService.java Tue Nov  8 13:09:24 2016
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertNot
 import static org.junit.Assert.assertTrue;
 
 import java.util.Collection;
+import java.util.UUID;
 
 import org.apache.openmeetings.db.dao.record.RecordingDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
@@ -42,9 +43,10 @@ public class TestRecordingService extend
 	private UserDao userDao;
 
 	private User getExternalUser() throws Exception {
-		User u = getUser(rnd.nextInt());
+		String uuid = UUID.randomUUID().toString();
+		User u = getUser(uuid);
 		u.setExternalType(UNIT_TEST_GROUP);
-		u.setExternalId("" + rnd.nextInt());
+		u.setExternalId(uuid);
 		u = userDao.update(u, null);
 		return u;
 	}

Modified: openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java Tue Nov  8 13:09:24 2016
@@ -375,6 +375,7 @@ public class UserDao implements IDataPro
 					.setParameter("type", type)
 					.setParameter("domainId", domainId == null ? Long.valueOf(0) : domainId)
 					.getSingleResult();
+			u.getGroupUsers().size(); // this will initiate lazy collection
 		} catch (NoResultException ex) {
 		}
 		return u;

Modified: openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java Tue Nov  8 13:09:24 2016
@@ -249,7 +249,7 @@ public class User implements IDataProvid
 	private Address address;
 
 	@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
-	@JoinColumn(name = "user_id", insertable = true, updatable = true)
+	@JoinColumn(name = "user_id", insertable = true, updatable = true, nullable = false)
 	@ElementList(name = "organisations", required = false)
 	@ElementDependent
 	private List<GroupUser> groupUsers = new ArrayList<>();
@@ -481,9 +481,6 @@ public class User implements IDataProvid
 	}
 
 	public List<GroupUser> getGroupUsers() {
-		if (groupUsers == null) {
-			groupUsers = new ArrayList<>();
-		}
 		return groupUsers;
 	}
 

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml Tue Nov  8 13:09:24 2016
@@ -69,13 +69,13 @@
 			<property name="openjpa.ConnectionDriverName" value="org.apache.commons.dbcp2.BasicDataSource" />
 			<property name="openjpa.ConnectionProperties"
 				value="DriverClassName=org.apache.derby.jdbc.EmbeddedDriver,
-                                  Url=jdbc:derby:openmeetings;create=true, 
-                                  create=true,
-                                  MaxActive=100, 
-                                  MaxWait=10000, 
-                                  TestOnBorrow=true, 
-                                  Username=user, 
-                                  Password=secret" />
+						Url=jdbc:derby:openmeetings;create=true,
+						create=true,
+						MaxActive=100,
+						MaxWait=10000,
+						TestOnBorrow=true,
+						Username=user,
+						Password=secret" />
 			<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema" />
 			<property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO" />
 			<property name="openjpa.DataCache" value="true" />

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/AbstractJUnitDefaults.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/AbstractJUnitDefaults.java?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/AbstractJUnitDefaults.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/AbstractJUnitDefaults.java Tue Nov  8 13:09:24 2016
@@ -23,12 +23,14 @@ import static org.apache.openmeetings.ut
 import static org.junit.Assert.assertNotNull;
 
 import java.util.Date;
+import java.util.UUID;
 
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
 import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.user.Address;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.installation.ImportInitvalues;
 import org.apache.openmeetings.installation.InstallationConfig;
@@ -138,19 +140,34 @@ public abstract class AbstractJUnitDefau
 		return ap;
 	}
 
-	public User getUser(int rnd) throws Exception {
+	public User getUser() throws Exception {
+		return getUser(UUID.randomUUID().toString());
+	}
+
+	protected String getRandomPass(String uuid) {
+		return "pass" + uuid;
+	}
+
+	public User getUser(String uuid) throws Exception {
 		User u = new User();
 		// add user
-		u.setFirstname("firstname" + rnd);
-		u.setLastname("lastname" + rnd);
-		u.setLogin("login" + rnd);
-		u.updatePassword(cfgDao, "pass" + rnd);
+		u.setFirstname("firstname" + uuid);
+		u.setLastname("lastname" + uuid);
+		u.setLogin("login" + uuid);
+		u.setAddress(new Address());
+		u.getAddress().setEmail(String.format("email%s@local", uuid));
+		u.setRights(UserDao.getDefaultRights());
+		u.updatePassword(cfgDao, getRandomPass(uuid));
 		u.setLanguageId(1L);
 		return u;
 	}
 
-	public User createUser(int rnd) throws Exception {
-		User u = getUser(rnd);
+	public User createUser() throws Exception {
+		return createUser(UUID.randomUUID().toString());
+	}
+
+	public User createUser(String uuid) throws Exception {
+		User u = getUser(uuid);
 		u = userDao.update(u, null);
 		assertNotNull("Can't add user", u);
 		return u;
@@ -166,8 +183,12 @@ public abstract class AbstractJUnitDefau
 		importInitvalues.loadAll(cfg, false);
 	}
 
-	public User createUserContact(int rnd, Long ownerId) {
-		User user = userDao.getContact("email" + rnd, "firstname" + rnd, "lastname" + rnd, ownerId);
+	public User createUserContact(Long ownerId) {
+		return createUserContact(UUID.randomUUID().toString(), ownerId);
+	}
+
+	public User createUserContact(String uuid, Long ownerId) {
+		User user = userDao.getContact("email" + uuid, "firstname" + uuid, "lastname" + uuid, ownerId);
 		user = userDao.update(user, ownerId);
 		assertNotNull("Cann't add user", user);
 		return user;

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureGetAppointmentByRange.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureGetAppointmentByRange.java?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureGetAppointmentByRange.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureGetAppointmentByRange.java Tue Nov  8 13:09:24 2016
@@ -23,7 +23,6 @@ import static org.junit.Assert.assertEqu
 
 import java.util.ArrayList;
 import java.util.Calendar;
-import java.util.Random;
 
 import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
@@ -45,7 +44,6 @@ public class TestDatabaseStructureGetApp
 		log.debug("Test started");
 		Long userId = 1L;
 		
-		Random rnd = new Random();
 		Calendar now = Calendar.getInstance();
 		Calendar rangeStart = Calendar.getInstance();
 		rangeStart.setTime(now.getTime());
@@ -64,7 +62,7 @@ public class TestDatabaseStructureGetApp
 		a2.setTitle("AppointmentByRange_a2");
 		a2.setMeetingMembers(new ArrayList<MeetingMember>());
 		MeetingMember mm1 = new MeetingMember();
-		mm1.setUser(createUserContact(rnd.nextInt(), userId));
+		mm1.setUser(createUserContact(userId));
 		mm1.setAppointment(a2);
 		a2.getMeetingMembers().add(mm1);
 		
@@ -72,11 +70,11 @@ public class TestDatabaseStructureGetApp
 		a3.setTitle("AppointmentByRange_a3");
 		a3.setMeetingMembers(new ArrayList<MeetingMember>());
 		MeetingMember mm2 = new MeetingMember();
-		mm2.setUser(createUserContact(rnd.nextInt(), userId));
+		mm2.setUser(createUserContact(userId));
 		mm2.setAppointment(a3);
 		a3.getMeetingMembers().add(mm2);
 		MeetingMember mm3 = new MeetingMember();
-		mm3.setUser(createUserContact(rnd.nextInt(), userId));
+		mm3.setUser(createUserContact(userId));
 		mm3.setAppointment(a3);
 		a3.getMeetingMembers().add(mm3);
 		

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserContact.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserContact.java?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserContact.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserContact.java Tue Nov  8 13:09:24 2016
@@ -25,7 +25,7 @@ import static org.junit.Assert.assertNul
 import static org.junit.Assert.assertTrue;
 
 import java.util.List;
-import java.util.Random;
+import java.util.UUID;
 
 import org.apache.openmeetings.db.dao.user.GroupDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
@@ -40,7 +40,6 @@ public class TestUserContact extends Abs
 	private UserDao userDao;
 	@Autowired
 	private GroupDao groupDao;
-	Random random = new Random();
 	
 	@Test
 	public void testGetUser() throws Exception {
@@ -49,11 +48,11 @@ public class TestUserContact extends Abs
 	
 	@Test
 	public void createUserWithGroup() throws Exception {
-		int rnd = random.nextInt();
-		User u = getUser(rnd);
+		String uuid = UUID.randomUUID().toString();
+		User u = getUser(uuid);
 		u.getGroupUsers().add(new GroupUser(groupDao.get(1L), u));
 		u = userDao.update(u, null);
-		assertTrue("Password should be set as expected", userDao.verifyPassword(u.getId(), "pass" + rnd));
+		assertTrue("Password should be set as expected", userDao.verifyPassword(u.getId(), getRandomPass(uuid)));
 		
 		User u1 = userDao.get(u.getId());
 		assertNotNull("Just created user should not be null", u1);
@@ -62,10 +61,10 @@ public class TestUserContact extends Abs
 	}
 	
 	@Test
-	public void createUser() throws Exception {
-		int rnd = random.nextInt();
-		User u = createUser(rnd);
-		assertTrue("Password should be set as expected", userDao.verifyPassword(u.getId(), "pass" + rnd));
+	public void testCreateUser() throws Exception {
+		String uuid = UUID.randomUUID().toString();
+		User u = createUser(uuid);
+		assertTrue("Password should be set as expected", userDao.verifyPassword(u.getId(), getRandomPass(uuid)));
 	}
 	
 	@Test
@@ -76,7 +75,7 @@ public class TestUserContact extends Abs
 		assertNotNull("User list should not be null ", users);
 		assertFalse("User list should not be empty ", users.isEmpty());
 		
-		User contact = createUserContact(random.nextInt(), getUserId());
+		User contact = createUserContact(getUserId());
 		String email = contact.getAddress().getEmail();
 		List<User> l = userDao.get(email, false, 0, 9999);
 		// check that contact is visible for admin
@@ -91,9 +90,9 @@ public class TestUserContact extends Abs
 		l = userDao.get(email, false, 0, 9999);
 		assertTrue("Contact list should be empty after deletion", l.isEmpty());
 
-		User u = createUser(random.nextInt());
-		User u1 = createUser(random.nextInt());
-		contact = createUserContact(random.nextInt(), u.getId());
+		User u = createUser();
+		User u1 = createUser();
+		contact = createUserContact(u.getId());
 		email = contact.getAddress().getEmail();
 		// check that contact is not visible for user that is not owner of this contact
 		l = userDao.get(email, 0, 9999, null, true, u1.getId());

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserCount.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserCount.java?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserCount.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserCount.java Tue Nov  8 13:09:24 2016
@@ -21,8 +21,6 @@ package org.apache.openmeetings.test.use
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
 import static org.junit.Assert.assertTrue;
 
-import java.util.Random;
-
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.test.AbstractWicketTester;
@@ -32,25 +30,24 @@ import org.springframework.beans.factory
 public class TestUserCount extends AbstractWicketTester {
 	@Autowired
 	private UserDao userDao;
-	Random random = new Random();
 
 	@Test
 	public void testCountSearchUsers() throws Exception {
-		User u = createUser(random.nextInt());
+		User u = createUser();
 		assertTrue("Account of search users should be one", userDao.count(u.getFirstname()) == 1);
 	}
 
 	@Test
 	public void testCountFilteredUsers() throws Exception {
-		User u = createUser(random.nextInt());
-		User contact = createUserContact(random.nextInt(), u.getId());
+		User u = createUser();
+		User contact = createUserContact(u.getId());
 		assertTrue("Account of filtered user should be one", userDao.count(contact.getFirstname(), true, u.getId()) == 1);
 	}
 
 	@Test
 	public void testCountUnfilteredUsers() throws Exception {
-		User u = createUser(random.nextInt());
-		createUserContact(random.nextInt(), u.getId());
+		User u = createUser();
+		createUserContact(u.getId());
 		assertTrue("Account of unfiltered should be more then one", userDao.count("firstname", false, getUserId()) > 1);
 	}
 		

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserGroup.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserGroup.java?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserGroup.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserGroup.java Tue Nov  8 13:09:24 2016
@@ -23,7 +23,7 @@ import static org.junit.Assert.assertTru
 import static org.junit.Assert.fail;
 
 import java.util.List;
-import java.util.Random;
+import java.util.UUID;
 
 import org.apache.openmeetings.db.dao.user.GroupDao;
 import org.apache.openmeetings.db.dao.user.GroupUserDao;
@@ -33,6 +33,7 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.test.AbstractJUnitDefaults;
 import org.apache.openmeetings.test.selenium.HeavyTests;
+import org.apache.openmeetings.util.OmException;
 import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
@@ -44,7 +45,7 @@ public class TestUserGroup extends Abstr
 	@Autowired
 	private UserDao userDao;
 	public static final String GROUP_NAME = "Test Group";
-	
+
 	private User getValidUser() {
 		for (User u : userDao.getAllBackupUsers()) {
 			if (!u.isDeleted() && u.getGroupUsers().size() > 0) {
@@ -52,9 +53,9 @@ public class TestUserGroup extends Abstr
 			}
 		}
 		fail("Unable to find valid user");
-		return null;  //unreachable
+		return null; //unreachable
 	}
-	
+
 	@Test
 	public void getUsersByGroupId() {
 		User u = getValidUser();
@@ -63,14 +64,14 @@ public class TestUserGroup extends Abstr
 		assertTrue("Default Group should contain at least 1 user: " + ul.size(), ul.size() > 0);
 		
 		GroupUser ou = groupUserDao.getByGroupAndUser(groupId, u.getId());
-		assertNotNull("Unable to found [group, user] pair - [" + groupId + "," + u.getId() + "]", ou);
+		assertNotNull("Unable to find [group, user] pair - [" + groupId + "," + u.getId() + "]", ou);
 	}
-	
+
 	@Test
 	public void addGroup() {
-		Group o = new Group();
-		o.setName(GROUP_NAME);
-		Long groupId = groupDao.update(o, null).getId(); //inserted by not checked
+		Group g = new Group();
+		g.setName(GROUP_NAME);
+		Long groupId = groupDao.update(g, null).getId(); //inserted by not checked
 		assertNotNull("New Group have valid id", groupId);
 		
 		List<GroupUser> ul = groupUserDao.get(groupId, 0, 9999);
@@ -78,6 +79,38 @@ public class TestUserGroup extends Abstr
 	}
 
 	@Test
+	public void addUserWithoutGroup() throws Exception {
+		String uuid = UUID.randomUUID().toString();
+		User u = getUser(uuid);
+		u = userDao.update(u, null);
+		assertNotNull("User successfully created", u.getId());
+		checkEmptyGroup("dao.get()", userDao.get(u.getId()));
+		try {
+			checkEmptyGroup("dao.login()", userDao.login(u.getAddress().getEmail(), getRandomPass(uuid)));
+			fail("User with no Group is unable to login");
+		} catch (OmException e) {
+			assertTrue("Expected Om Exception", "No Group assigned to user".equals(e.getMessage()));
+		}
+		checkEmptyGroup("dao.getByLogin(user)", userDao.getByLogin(u.getLogin(), u.getType(), u.getDomainId()));
+	}
+
+
+	@Test
+	public void addLdapUserWithoutGroup() throws Exception {
+		User u1 = getUser();
+		u1.setType(User.Type.ldap);
+		u1.setDomainId(1L);
+		u1 = userDao.update(u1, null);
+		checkEmptyGroup("dao.getByLogin(ldap)", userDao.getByLogin(u1.getLogin(), u1.getType(), u1.getDomainId()));
+	}
+
+	private void checkEmptyGroup(String prefix, User u) {
+		assertNotNull(prefix + ":: Created user should be available", u);
+		assertNotNull(prefix + ":: List<GroupUser> for newly created user should not be null", u.getGroupUsers());
+		assertTrue(prefix + ":: List<GroupUser> for newly created user should be empty", u.getGroupUsers().isEmpty());
+	}
+
+	@Test
 	@HeavyTests
 	public void add10kUsers() throws Exception {
 		List<Group> groups = groupDao.get(GROUP_NAME, 0, 1, null);
@@ -89,9 +122,8 @@ public class TestUserGroup extends Abstr
 		} else {
 			g = groups.get(0);
 		}
-		Random rnd = new Random();
 		for (int i = 0; i < 10000; ++i) {
-			User u = createUser(rnd.nextInt());
+			User u = createUser();
 			u.getGroupUsers().add(new GroupUser(g, u));
 			userDao.update(u, null);
 		}

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/AbstractWebServiceTest.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/AbstractWebServiceTest.java?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/AbstractWebServiceTest.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/AbstractWebServiceTest.java Tue Nov  8 13:09:24 2016
@@ -23,7 +23,7 @@ import static org.junit.Assert.assertEqu
 
 import java.io.File;
 import java.nio.file.Files;
-import java.util.Random;
+import java.util.UUID;
 
 import org.apache.catalina.LifecycleState;
 import org.apache.catalina.startup.Tomcat;
@@ -39,7 +39,6 @@ public class AbstractWebServiceTest exte
 	public final static String CONTEXT = "/openmeetings";
 	public final static String BASE_SERVICES_URL = "http://localhost:8080" + CONTEXT + "/services";
 	public final static String USER_SERVICE_URL = BASE_SERVICES_URL + "/user";
-	protected static final Random rnd = new Random();
 
 	public static WebClient getClient(String url) {
 		return WebClient.create(url).accept("application/json").type("application/json");
@@ -56,7 +55,7 @@ public class AbstractWebServiceTest exte
 	public static void initialize() throws Exception {
 		tomcat = new Tomcat();
 		tomcat.setPort(8080);
-		File wd = Files.createTempDirectory("om" + rnd.nextInt()).toFile();
+		File wd = Files.createTempDirectory("om" + UUID.randomUUID().toString()).toFile();
 		tomcat.setBaseDir(wd.getCanonicalPath());
 		tomcat.getHost().setAppBase(wd.getCanonicalPath());
 		tomcat.getHost().setAutoDeploy(true);

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestRecordingService.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestRecordingService.java?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestRecordingService.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestRecordingService.java Tue Nov  8 13:09:24 2016
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertNot
 import static org.junit.Assert.assertTrue;
 
 import java.util.Collection;
+import java.util.UUID;
 
 import org.apache.openmeetings.db.dao.record.RecordingDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
@@ -42,9 +43,10 @@ public class TestRecordingService extend
 	private UserDao userDao;
 
 	private User getExternalUser() throws Exception {
-		User u = getUser(rnd.nextInt());
+		String uuid = UUID.randomUUID().toString();
+		User u = getUser(uuid);
 		u.setExternalType(UNIT_TEST_GROUP);
-		u.setExternalId("" + rnd.nextInt());
+		u.setExternalId(uuid);
 		u = userDao.update(u, null);
 		return u;
 	}

Modified: openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java (original)
+++ openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java Tue Nov  8 13:09:24 2016
@@ -375,6 +375,7 @@ public class UserDao implements IDataPro
 					.setParameter("type", type)
 					.setParameter("domainId", domainId == null ? Long.valueOf(0) : domainId)
 					.getSingleResult();
+			u.getGroupUsers().size(); // this will initiate lazy collection
 		} catch (NoResultException ex) {
 		}
 		return u;

Modified: openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java (original)
+++ openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java Tue Nov  8 13:09:24 2016
@@ -249,7 +249,7 @@ public class User implements IDataProvid
 	private Address address;
 
 	@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
-	@JoinColumn(name = "user_id", insertable = true, updatable = true)
+	@JoinColumn(name = "user_id", insertable = true, updatable = true, nullable = false)
 	@ElementList(name = "organisations", required = false)
 	@ElementDependent
 	private List<GroupUser> groupUsers = new ArrayList<>();
@@ -481,9 +481,6 @@ public class User implements IDataProvid
 	}
 
 	public List<GroupUser> getGroupUsers() {
-		if (groupUsers == null) {
-			groupUsers = new ArrayList<>();
-		}
 		return groupUsers;
 	}
 

Modified: openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml Tue Nov  8 13:09:24 2016
@@ -69,13 +69,13 @@
 			<property name="openjpa.ConnectionDriverName" value="org.apache.commons.dbcp2.BasicDataSource" />
 			<property name="openjpa.ConnectionProperties"
 				value="DriverClassName=org.apache.derby.jdbc.EmbeddedDriver,
-                                  Url=jdbc:derby:openmeetings;create=true, 
-                                  create=true,
-                                  MaxActive=100, 
-                                  MaxWait=10000, 
-                                  TestOnBorrow=true, 
-                                  Username=user, 
-                                  Password=secret" />
+						Url=jdbc:derby:openmeetings;create=true,
+						create=true,
+						MaxActive=100,
+						MaxWait=10000,
+						TestOnBorrow=true,
+						Username=user,
+						Password=secret" />
 			<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema" />
 			<property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO" />
 			<property name="openjpa.DataCache" value="true" />

Modified: openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/AbstractJUnitDefaults.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/AbstractJUnitDefaults.java?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/AbstractJUnitDefaults.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/AbstractJUnitDefaults.java Tue Nov  8 13:09:24 2016
@@ -23,12 +23,14 @@ import static org.apache.openmeetings.ut
 import static org.junit.Assert.assertNotNull;
 
 import java.util.Date;
+import java.util.UUID;
 
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
 import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.user.Address;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.installation.ImportInitvalues;
 import org.apache.openmeetings.installation.InstallationConfig;
@@ -138,19 +140,34 @@ public abstract class AbstractJUnitDefau
 		return ap;
 	}
 
-	public User getUser(int rnd) throws Exception {
+	public User getUser() throws Exception {
+		return getUser(UUID.randomUUID().toString());
+	}
+
+	protected String getRandomPass(String uuid) {
+		return "pass" + uuid;
+	}
+
+	public User getUser(String uuid) throws Exception {
 		User u = new User();
 		// add user
-		u.setFirstname("firstname" + rnd);
-		u.setLastname("lastname" + rnd);
-		u.setLogin("login" + rnd);
-		u.updatePassword(cfgDao, "pass" + rnd);
+		u.setFirstname("firstname" + uuid);
+		u.setLastname("lastname" + uuid);
+		u.setLogin("login" + uuid);
+		u.setAddress(new Address());
+		u.getAddress().setEmail(String.format("email%s@local", uuid));
+		u.setRights(UserDao.getDefaultRights());
+		u.updatePassword(cfgDao, getRandomPass(uuid));
 		u.setLanguageId(1L);
 		return u;
 	}
 
-	public User createUser(int rnd) throws Exception {
-		User u = getUser(rnd);
+	public User createUser() throws Exception {
+		return createUser(UUID.randomUUID().toString());
+	}
+
+	public User createUser(String uuid) throws Exception {
+		User u = getUser(uuid);
 		u = userDao.update(u, null);
 		assertNotNull("Can't add user", u);
 		return u;
@@ -166,8 +183,12 @@ public abstract class AbstractJUnitDefau
 		importInitvalues.loadAll(cfg, false);
 	}
 
-	public User createUserContact(int rnd, Long ownerId) {
-		User user = userDao.getContact("email" + rnd, "firstname" + rnd, "lastname" + rnd, ownerId);
+	public User createUserContact(Long ownerId) {
+		return createUserContact(UUID.randomUUID().toString(), ownerId);
+	}
+
+	public User createUserContact(String uuid, Long ownerId) {
+		User user = userDao.getContact("email" + uuid, "firstname" + uuid, "lastname" + uuid, ownerId);
 		user = userDao.update(user, ownerId);
 		assertNotNull("Cann't add user", user);
 		return user;

Modified: openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureGetAppointmentByRange.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureGetAppointmentByRange.java?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureGetAppointmentByRange.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureGetAppointmentByRange.java Tue Nov  8 13:09:24 2016
@@ -23,7 +23,6 @@ import static org.junit.Assert.assertEqu
 
 import java.util.ArrayList;
 import java.util.Calendar;
-import java.util.Random;
 
 import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
@@ -45,7 +44,6 @@ public class TestDatabaseStructureGetApp
 		log.debug("Test started");
 		Long userId = 1L;
 		
-		Random rnd = new Random();
 		Calendar now = Calendar.getInstance();
 		Calendar rangeStart = Calendar.getInstance();
 		rangeStart.setTime(now.getTime());
@@ -64,7 +62,7 @@ public class TestDatabaseStructureGetApp
 		a2.setTitle("AppointmentByRange_a2");
 		a2.setMeetingMembers(new ArrayList<MeetingMember>());
 		MeetingMember mm1 = new MeetingMember();
-		mm1.setUser(createUserContact(rnd.nextInt(), userId));
+		mm1.setUser(createUserContact(userId));
 		mm1.setAppointment(a2);
 		a2.getMeetingMembers().add(mm1);
 		
@@ -72,11 +70,11 @@ public class TestDatabaseStructureGetApp
 		a3.setTitle("AppointmentByRange_a3");
 		a3.setMeetingMembers(new ArrayList<MeetingMember>());
 		MeetingMember mm2 = new MeetingMember();
-		mm2.setUser(createUserContact(rnd.nextInt(), userId));
+		mm2.setUser(createUserContact(userId));
 		mm2.setAppointment(a3);
 		a3.getMeetingMembers().add(mm2);
 		MeetingMember mm3 = new MeetingMember();
-		mm3.setUser(createUserContact(rnd.nextInt(), userId));
+		mm3.setUser(createUserContact(userId));
 		mm3.setAppointment(a3);
 		a3.getMeetingMembers().add(mm3);
 		

Modified: openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserContact.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserContact.java?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserContact.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserContact.java Tue Nov  8 13:09:24 2016
@@ -25,7 +25,7 @@ import static org.junit.Assert.assertNul
 import static org.junit.Assert.assertTrue;
 
 import java.util.List;
-import java.util.Random;
+import java.util.UUID;
 
 import org.apache.openmeetings.db.dao.user.GroupDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
@@ -40,7 +40,6 @@ public class TestUserContact extends Abs
 	private UserDao userDao;
 	@Autowired
 	private GroupDao groupDao;
-	Random random = new Random();
 	
 	@Test
 	public void testGetUser() throws Exception {
@@ -49,11 +48,11 @@ public class TestUserContact extends Abs
 	
 	@Test
 	public void createUserWithGroup() throws Exception {
-		int rnd = random.nextInt();
-		User u = getUser(rnd);
+		String uuid = UUID.randomUUID().toString();
+		User u = getUser(uuid);
 		u.getGroupUsers().add(new GroupUser(groupDao.get(1L), u));
 		u = userDao.update(u, null);
-		assertTrue("Password should be set as expected", userDao.verifyPassword(u.getId(), "pass" + rnd));
+		assertTrue("Password should be set as expected", userDao.verifyPassword(u.getId(), getRandomPass(uuid)));
 		
 		User u1 = userDao.get(u.getId());
 		assertNotNull("Just created user should not be null", u1);
@@ -62,10 +61,10 @@ public class TestUserContact extends Abs
 	}
 	
 	@Test
-	public void createUser() throws Exception {
-		int rnd = random.nextInt();
-		User u = createUser(rnd);
-		assertTrue("Password should be set as expected", userDao.verifyPassword(u.getId(), "pass" + rnd));
+	public void testCreateUser() throws Exception {
+		String uuid = UUID.randomUUID().toString();
+		User u = createUser(uuid);
+		assertTrue("Password should be set as expected", userDao.verifyPassword(u.getId(), getRandomPass(uuid)));
 	}
 	
 	@Test
@@ -76,7 +75,7 @@ public class TestUserContact extends Abs
 		assertNotNull("User list should not be null ", users);
 		assertFalse("User list should not be empty ", users.isEmpty());
 		
-		User contact = createUserContact(random.nextInt(), getUserId());
+		User contact = createUserContact(getUserId());
 		String email = contact.getAddress().getEmail();
 		List<User> l = userDao.get(email, false, 0, 9999);
 		// check that contact is visible for admin
@@ -91,9 +90,9 @@ public class TestUserContact extends Abs
 		l = userDao.get(email, false, 0, 9999);
 		assertTrue("Contact list should be empty after deletion", l.isEmpty());
 
-		User u = createUser(random.nextInt());
-		User u1 = createUser(random.nextInt());
-		contact = createUserContact(random.nextInt(), u.getId());
+		User u = createUser();
+		User u1 = createUser();
+		contact = createUserContact(u.getId());
 		email = contact.getAddress().getEmail();
 		// check that contact is not visible for user that is not owner of this contact
 		l = userDao.get(email, 0, 9999, null, true, u1.getId());

Modified: openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserCount.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserCount.java?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserCount.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserCount.java Tue Nov  8 13:09:24 2016
@@ -21,8 +21,6 @@ package org.apache.openmeetings.test.use
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
 import static org.junit.Assert.assertTrue;
 
-import java.util.Random;
-
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.test.AbstractWicketTester;
@@ -32,25 +30,24 @@ import org.springframework.beans.factory
 public class TestUserCount extends AbstractWicketTester {
 	@Autowired
 	private UserDao userDao;
-	Random random = new Random();
 
 	@Test
 	public void testCountSearchUsers() throws Exception {
-		User u = createUser(random.nextInt());
+		User u = createUser();
 		assertTrue("Account of search users should be one", userDao.count(u.getFirstname()) == 1);
 	}
 
 	@Test
 	public void testCountFilteredUsers() throws Exception {
-		User u = createUser(random.nextInt());
-		User contact = createUserContact(random.nextInt(), u.getId());
+		User u = createUser();
+		User contact = createUserContact(u.getId());
 		assertTrue("Account of filtered user should be one", userDao.count(contact.getFirstname(), true, u.getId()) == 1);
 	}
 
 	@Test
 	public void testCountUnfilteredUsers() throws Exception {
-		User u = createUser(random.nextInt());
-		createUserContact(random.nextInt(), u.getId());
+		User u = createUser();
+		createUserContact(u.getId());
 		assertTrue("Account of unfiltered should be more then one", userDao.count("firstname", false, getUserId()) > 1);
 	}
 		

Modified: openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserGroup.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserGroup.java?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserGroup.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserGroup.java Tue Nov  8 13:09:24 2016
@@ -23,7 +23,7 @@ import static org.junit.Assert.assertTru
 import static org.junit.Assert.fail;
 
 import java.util.List;
-import java.util.Random;
+import java.util.UUID;
 
 import org.apache.openmeetings.db.dao.user.GroupDao;
 import org.apache.openmeetings.db.dao.user.GroupUserDao;
@@ -33,6 +33,7 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.test.AbstractJUnitDefaults;
 import org.apache.openmeetings.test.selenium.HeavyTests;
+import org.apache.openmeetings.util.OmException;
 import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
@@ -44,7 +45,7 @@ public class TestUserGroup extends Abstr
 	@Autowired
 	private UserDao userDao;
 	public static final String GROUP_NAME = "Test Group";
-	
+
 	private User getValidUser() {
 		for (User u : userDao.getAllBackupUsers()) {
 			if (!u.isDeleted() && u.getGroupUsers().size() > 0) {
@@ -52,9 +53,9 @@ public class TestUserGroup extends Abstr
 			}
 		}
 		fail("Unable to find valid user");
-		return null;  //unreachable
+		return null; //unreachable
 	}
-	
+
 	@Test
 	public void getUsersByGroupId() {
 		User u = getValidUser();
@@ -63,14 +64,14 @@ public class TestUserGroup extends Abstr
 		assertTrue("Default Group should contain at least 1 user: " + ul.size(), ul.size() > 0);
 		
 		GroupUser ou = groupUserDao.getByGroupAndUser(groupId, u.getId());
-		assertNotNull("Unable to found [group, user] pair - [" + groupId + "," + u.getId() + "]", ou);
+		assertNotNull("Unable to find [group, user] pair - [" + groupId + "," + u.getId() + "]", ou);
 	}
-	
+
 	@Test
 	public void addGroup() {
-		Group o = new Group();
-		o.setName(GROUP_NAME);
-		Long groupId = groupDao.update(o, null).getId(); //inserted by not checked
+		Group g = new Group();
+		g.setName(GROUP_NAME);
+		Long groupId = groupDao.update(g, null).getId(); //inserted by not checked
 		assertNotNull("New Group have valid id", groupId);
 		
 		List<GroupUser> ul = groupUserDao.get(groupId, 0, 9999);
@@ -78,6 +79,38 @@ public class TestUserGroup extends Abstr
 	}
 
 	@Test
+	public void addUserWithoutGroup() throws Exception {
+		String uuid = UUID.randomUUID().toString();
+		User u = getUser(uuid);
+		u = userDao.update(u, null);
+		assertNotNull("User successfully created", u.getId());
+		checkEmptyGroup("dao.get()", userDao.get(u.getId()));
+		try {
+			checkEmptyGroup("dao.login()", userDao.login(u.getAddress().getEmail(), getRandomPass(uuid)));
+			fail("User with no Group is unable to login");
+		} catch (OmException e) {
+			assertTrue("Expected Om Exception", "No Group assigned to user".equals(e.getMessage()));
+		}
+		checkEmptyGroup("dao.getByLogin(user)", userDao.getByLogin(u.getLogin(), u.getType(), u.getDomainId()));
+	}
+
+
+	@Test
+	public void addLdapUserWithoutGroup() throws Exception {
+		User u1 = getUser();
+		u1.setType(User.Type.ldap);
+		u1.setDomainId(1L);
+		u1 = userDao.update(u1, null);
+		checkEmptyGroup("dao.getByLogin(ldap)", userDao.getByLogin(u1.getLogin(), u1.getType(), u1.getDomainId()));
+	}
+
+	private void checkEmptyGroup(String prefix, User u) {
+		assertNotNull(prefix + ":: Created user should be available", u);
+		assertNotNull(prefix + ":: List<GroupUser> for newly created user should not be null", u.getGroupUsers());
+		assertTrue(prefix + ":: List<GroupUser> for newly created user should be empty", u.getGroupUsers().isEmpty());
+	}
+
+	@Test
 	@HeavyTests
 	public void add10kUsers() throws Exception {
 		List<Group> groups = groupDao.get(GROUP_NAME, 0, 1, null);
@@ -89,9 +122,8 @@ public class TestUserGroup extends Abstr
 		} else {
 			g = groups.get(0);
 		}
-		Random rnd = new Random();
 		for (int i = 0; i < 10000; ++i) {
-			User u = createUser(rnd.nextInt());
+			User u = createUser();
 			u.getGroupUsers().add(new GroupUser(g, u));
 			userDao.update(u, null);
 		}

Modified: openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/AbstractWebServiceTest.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/AbstractWebServiceTest.java?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/AbstractWebServiceTest.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/AbstractWebServiceTest.java Tue Nov  8 13:09:24 2016
@@ -23,7 +23,7 @@ import static org.junit.Assert.assertEqu
 
 import java.io.File;
 import java.nio.file.Files;
-import java.util.Random;
+import java.util.UUID;
 
 import org.apache.catalina.LifecycleState;
 import org.apache.catalina.startup.Tomcat;
@@ -39,7 +39,6 @@ public class AbstractWebServiceTest exte
 	public final static String CONTEXT = "/openmeetings";
 	public final static String BASE_SERVICES_URL = "http://localhost:8080" + CONTEXT + "/services";
 	public final static String USER_SERVICE_URL = BASE_SERVICES_URL + "/user";
-	protected static final Random rnd = new Random();
 
 	public static WebClient getClient(String url) {
 		return WebClient.create(url).accept("application/json").type("application/json");
@@ -56,7 +55,7 @@ public class AbstractWebServiceTest exte
 	public static void initialize() throws Exception {
 		tomcat = new Tomcat();
 		tomcat.setPort(8080);
-		File wd = Files.createTempDirectory("om" + rnd.nextInt()).toFile();
+		File wd = Files.createTempDirectory("om" + UUID.randomUUID().toString()).toFile();
 		tomcat.setBaseDir(wd.getCanonicalPath());
 		tomcat.getHost().setAppBase(wd.getCanonicalPath());
 		tomcat.getHost().setAutoDeploy(true);

Modified: openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestRecordingService.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestRecordingService.java?rev=1768685&r1=1768684&r2=1768685&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestRecordingService.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestRecordingService.java Tue Nov  8 13:09:24 2016
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertNot
 import static org.junit.Assert.assertTrue;
 
 import java.util.Collection;
+import java.util.UUID;
 
 import org.apache.openmeetings.db.dao.record.RecordingDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
@@ -42,9 +43,10 @@ public class TestRecordingService extend
 	private UserDao userDao;
 
 	private User getExternalUser() throws Exception {
-		User u = getUser(rnd.nextInt());
+		String uuid = UUID.randomUUID().toString();
+		User u = getUser(uuid);
 		u.setExternalType(UNIT_TEST_GROUP);
-		u.setExternalId("" + rnd.nextInt());
+		u.setExternalId(uuid);
 		u = userDao.update(u, null);
 		return u;
 	}