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:[email protected]";));

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;
        }


Reply via email to