package com.stacksync.syncservice.test.dao; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.io.IOException; import java.math.BigInteger; import java.net.URL; import java.security.SecureRandom; import java.sql.Connection; import java.sql.SQLException; import java.util.List; import java.util.UUID; import org.apache.log4j.xml.DOMConfigurator; import org.junit.BeforeClass; import org.junit.Test; import com.stacksync.commons.models.Chunk; import com.stacksync.commons.models.Item; import com.stacksync.commons.models.ItemMetadata; import com.stacksync.commons.models.ItemVersion; import com.stacksync.commons.models.User; import com.stacksync.commons.models.Workspace; import com.stacksync.syncservice.db.ConnectionPoolFactory; import com.stacksync.syncservice.db.DAOFactory; import com.stacksync.syncservice.db.ItemDAO; import com.stacksync.syncservice.db.ItemVersionDAO; import com.stacksync.syncservice.db.UserDAO; import com.stacksync.syncservice.db.WorkspaceDAO; import com.stacksync.syncservice.exceptions.dao.DAOConfigurationException; import com.stacksync.syncservice.exceptions.dao.DAOException; import com.stacksync.syncservice.util.Config; public class PostgresqlDAOTest { private static Connection connection; private static WorkspaceDAO workspaceDAO; private static UserDAO userDao; private static ItemDAO objectDao; private static ItemVersionDAO oversionDao; private static SecureRandom random = new SecureRandom(); @BeforeClass public static void testSetup() throws IOException, SQLException, DAOConfigurationException { URL configFileResource = PostgresqlDAOTest.class.getResource("/com/ast/processserver/resources/log4j.xml"); DOMConfigurator.configure(configFileResource); Config.loadProperties(); String dataSource = "postgresql"; DAOFactory factory = new DAOFactory(dataSource); connection = ConnectionPoolFactory.getConnectionPool(dataSource).getConnection(); workspaceDAO = factory.getWorkspaceDao(connection); userDao = factory.getUserDao(connection); objectDao = factory.getItemDAO(connection); oversionDao = factory.getItemVersionDAO(connection); } protected String nextString() { return new BigInteger(130, random).toString(32); } @Test public void testCreateNewValidUser() throws IllegalArgumentException, DAOException { User user = new User(); user.setName(nextString()); user.setId(UUID.randomUUID()); user.setEmail(nextString()); user.setQuotaLimit(2048L); user.setQuotaUsedLogical(1403L); user.setQuotaUsedReal(1024L); userDao.add(user); if (user.getId() == null) { assertTrue("Could not retrieve the User ID", false); } else { assertTrue(true); } } @Test public void testCreateNewUserSameId() throws IllegalArgumentException, DAOException { UUID userId = UUID.randomUUID(); User user = new User(); user.setName(nextString()); user.setId(userId); user.setEmail(nextString()); user.setQuotaLimit(2048L); user.setQuotaUsedLogical(1403L); user.setQuotaUsedReal(1024L); userDao.add(user); if (user.getId() == null) { assertTrue("Could not retrieve the User ID", false); } else { User user2 = new User(); user2.setName(nextString()); user2.setId(userId); user2.setEmail(nextString()); user2.setQuotaLimit(2048L); user2.setQuotaUsedLogical(1403L); user2.setQuotaUsedReal(1024L); try { userDao.add(user2); assertTrue("User should not have been created", false); } catch (DAOException e) { assertTrue(e.toString(), true); } } } @Test public void testUpdateExistingUserOk() throws IllegalArgumentException, DAOException { User user = new User(); user.setName(nextString()); user.setId(UUID.randomUUID()); user.setEmail(nextString()); user.setQuotaLimit(2048L); user.setQuotaUsedLogical(1403L); user.setQuotaUsedReal(1024L); userDao.add(user); if (user.getId() == null) { assertTrue("Could not retrieve the User ID", false); } else { UUID id = user.getId(); String newName = nextString(); UUID newUserId = UUID.randomUUID(); String newEmail = nextString(); Integer newQuotaLimit = 123; Integer newQuotaUsed = 321; user.setName(newName); user.setId(newUserId); user.setEmail(newEmail); user.setQuotaLimit(2048L); user.setQuotaUsedLogical(1403L); user.setQuotaUsedReal(1024L); try { userDao.add(user); User user2 = userDao.findById(id); assertEquals(user, user2); } catch (DAOException e) { assertTrue(e.toString(), false); } } } @Test public void testGetNonExistingUserById() { try { User user = userDao.findById(UUID.randomUUID()); if (user == null) { assertTrue(true); } else { assertTrue("User should not exist", false); } } catch (DAOException e) { assertTrue(e.toString(), false); } } @Test public void testGetExistingUserById() throws IllegalArgumentException, DAOException { User user = new User(); user.setName(nextString()); user.setId(UUID.randomUUID()); user.setEmail(nextString()); user.setQuotaLimit(2048L); user.setQuotaUsedLogical(1403L); user.setQuotaUsedReal(1024L); userDao.add(user); if (user.getId() == null) { assertTrue("Could not retrieve the User ID", false); } else { try { User user2 = userDao.findById(user.getId()); if (user2 == null) { assertTrue("User should exist", false); } else { if (user2.getId() != null && user2.isValid()) { assertTrue(true); } else { assertTrue("User is not valid", false); } } } catch (DAOException e) { assertTrue(e.toString(), false); } } } @Test public void testCreateNewWorkspaceInvalidOwner() { User user = new User(UUID.randomUUID()); Workspace workspace = new Workspace(); workspace.setOwner(user); try { workspaceDAO.add(workspace); assertTrue("User should not have been created", false); } catch (DAOException e) { assertTrue(e.toString(), true); } } @Test public void testCreateNewWorkspaceValidOwner() throws IllegalArgumentException, DAOException { User user = new User(); user.setName(nextString()); user.setId(UUID.randomUUID()); user.setEmail(nextString()); user.setQuotaLimit(2048L); user.setQuotaUsedLogical(1403L); user.setQuotaUsedReal(1024L); userDao.add(user); Workspace workspace = new Workspace(); workspace.setLatestRevision(0); workspace.setOwner(user); try { workspaceDAO.add(workspace); assertTrue(true); } catch (DAOException e) { assertTrue(e.toString(), false); } } @Test public void testCreateObjectInvalidWorkspace() throws IllegalArgumentException, DAOException { User user = new User(); user.setName(nextString()); user.setId(UUID.randomUUID()); user.setEmail(nextString()); user.setQuotaLimit(2048L); user.setQuotaUsedLogical(1403L); user.setQuotaUsedReal(1024L); userDao.add(user); Workspace workspace = new Workspace(); workspace.setOwner(user); workspace.setLatestRevision(0); Item object = new Item(); object.setWorkspace(workspace); object.setLatestVersion(1L); object.setParent(null); object.setId(1331432L); object.setFilename(nextString()); object.setMimetype("image/jpeg"); object.setIsFolder(false); object.setClientParentFileVersion(1L); try { objectDao.put(object); assertTrue("Object should not have been created", false); } catch (DAOException e) { assertTrue(e.toString(), true); } } @Test public void testGetObjectByClientFileIdAndWorkspace() throws DAOException { long fileId = 4852407995043916970L; objectDao.findById(fileId); // TODO Check if the returned obj is correct } @Test public void testGetWorkspaceById() { } @Test public void testGetObjectMetadataByWorkspaceName() throws DAOException { List<ItemMetadata> objects = objectDao.getItemsByWorkspaceId(UUID.randomUUID()); if (objects != null && !objects.isEmpty()) { for (ItemMetadata object : objects) { System.out.println(object.toString()); } assertTrue(true); } else { assertTrue(false); } } @Test public void testGetObjectMetadataByClientFileIdWithoutChunks() throws DAOException { Long fileId = 538757639L; boolean includeDeleted = false; boolean includeChunks = false; Long version = 1L; boolean list = true; ItemMetadata object = objectDao.findById(fileId, list, version, includeDeleted, includeChunks); if (object != null) { System.out.println(object.toString()); if (object.getChildren() != null) { for (ItemMetadata child : object.getChildren()) { System.out.println(child.toString()); } } assertTrue(true); } else { assertTrue(false); } } @Test public void testGetObjectMetadataByClientFileIdWithChunks() throws DAOException { Long fileId = 538757639L; boolean includeDeleted = false; boolean includeChunks = true; Long version = 1L; boolean list = true; ItemMetadata object = objectDao.findById(fileId, list, version, includeDeleted, includeChunks); if (object != null) { System.out.println(object.toString()); if (object.getChildren() != null) { for (ItemMetadata child : object.getChildren()) { System.out.println(child.toString()); } } assertTrue(true); } else { assertTrue(false); } } @Test public void testGetObjectMetadataByServerUserId() throws DAOException { UUID userId = UUID.randomUUID(); boolean includeDeleted = false; ItemMetadata object = objectDao.findByUserId(userId, includeDeleted); if (object != null) { System.out.println(object.toString()); if (object.getChildren() != null) { for (ItemMetadata child : object.getChildren()) { System.out.println(child.toString()); } } assertTrue(true); } else { assertTrue(false); } } }