Loading src/main/java/it/inaf/oats/vospace/persistence/NodeDAO.java +6 −6 Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ package it.inaf.oats.vospace.persistence; import it.inaf.oats.vospace.DeleteNodeController; import it.inaf.oats.vospace.URIUtils; import it.inaf.oats.vospace.datamodel.NodeProperties; import it.inaf.oats.vospace.datamodel.NodeUtils; import it.inaf.oats.vospace.exception.InternalFaultException; Loading Loading @@ -57,9 +58,9 @@ public class NodeDAO { public void createNode(Node myNode, String jobId) { String nodeURI = myNode.getUri(); String nodeVosPath = URIUtils.returnVosPathFromNodeURI(myNode.getUri(), authority); List<NodePaths> paths = getNodePathsFromDB(nodeURI); List<NodePaths> paths = getNodePathsFromDB(nodeVosPath); if (paths.isEmpty()) { throw new IllegalStateException("Unable to find parent node during node creation"); Loading @@ -74,7 +75,7 @@ public class NodeDAO { jdbcTemplate.update(conn -> { PreparedStatement ps = conn.prepareStatement(sb.toString()); int i = 0; ps.setString(++i, NodeUtils.getNodeName(myNode)); ps.setString(++i, NodeUtils.getNodeName(nodeVosPath)); if (jobId == null) { ps.setNull(++i, Types.VARCHAR); } else { Loading Loading @@ -581,9 +582,8 @@ public class NodeDAO { return diff; } private List<NodePaths> getNodePathsFromDB(String nodeURI) { String path = nodeURI.replaceAll("vos://[^/]+", ""); private List<NodePaths> getNodePathsFromDB(String path) { String parentPath = NodeUtils.getParentPath(path); String sql = "SELECT path, relative_path " Loading src/test/java/it/inaf/oats/vospace/URIUtilsTest.java +0 −9 Original line number Diff line number Diff line Loading @@ -6,17 +6,8 @@ package it.inaf.oats.vospace; import it.inaf.oats.vospace.exception.InvalidURIException; import java.util.ArrayList; import java.util.List; import net.ivoa.xml.vospace.v2.DataNode; import net.ivoa.xml.vospace.v2.LinkNode; import net.ivoa.xml.vospace.v2.Node; import net.ivoa.xml.vospace.v2.Property; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; public class URIUtilsTest { Loading src/test/java/it/inaf/oats/vospace/persistence/NodeDAOTest.java +74 −71 Original line number Diff line number Diff line Loading @@ -8,6 +8,7 @@ package it.inaf.oats.vospace.persistence; import it.inaf.oats.vospace.datamodel.NodeProperties; import it.inaf.oats.vospace.exception.InternalFaultException; import it.inaf.oats.vospace.persistence.NodeDAO.ShortNodeDescriptor; import java.lang.reflect.Field; import java.util.HashSet; import java.util.List; import java.util.Optional; Loading @@ -30,12 +31,15 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.util.ReflectionTestUtils; @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = {DataSourceConfig.class}) @TestPropertySource(locations = "classpath:test.properties") public class NodeDAOTest { private static final String AUTHORITY = "example.com!vospace"; @Autowired private DataSource dataSource; private NodeDAO dao; Loading @@ -43,6 +47,7 @@ public class NodeDAOTest { @BeforeEach public void init() { dao = new NodeDAO(dataSource); ReflectionTestUtils.setField(dao, "authority", AUTHORITY); } @Test Loading @@ -53,7 +58,7 @@ public class NodeDAOTest { dataNode.setAccepts(getViews()); dataNode.setProvides(getViews()); dataNode.setBusy(true); dao.createNode(dataNode); DataNode retrievedNode = (DataNode) dao.listNode("/mydata1").get(); Loading @@ -80,150 +85,148 @@ public class NodeDAOTest { @Test public void testGetNodeId() { Optional<Long> id1 = dao.getNodeId("/test1"); assertTrue(id1.isPresent()); assertTrue(id1.isPresent()); assertEquals(2, id1.get()); Optional<Long> id2 = dao.getNodeId("/test1/f1"); assertTrue(id2.isPresent()); assertEquals(3, id2.get()); Optional<Long> id3 = dao.getNodeId("/pippo123123"); assertTrue(id3.isEmpty()); } @Test public void testGetShortNodeDescriptor(){ public void testGetShortNodeDescriptor() { String userName = "user3"; List<String> userGroups = List.of(); Optional<ShortNodeDescriptor> snd1Opt = dao.getShortNodeDescriptor("/test3/mstick", userName, userGroups); Optional<ShortNodeDescriptor> snd1Opt = dao.getShortNodeDescriptor("/test3/mstick", userName, userGroups); assertTrue(snd1Opt.isPresent()); ShortNodeDescriptor snd1 = snd1Opt.get(); assertTrue(snd1.isContainer()); assertFalse(snd1.isPermissionDenied()); assertFalse(snd1.isWritable()); assertFalse(snd1.isBusy()); assertEquals("9.13", snd1.getDestinationNodeLtreePath()); snd1Opt = dao.getShortNodeDescriptor("/test3/mbusy", userName, userGroups); assertFalse(snd1.isBusy()); assertEquals("9.13", snd1.getDestinationNodeLtreePath()); snd1Opt = dao.getShortNodeDescriptor("/test3/mbusy", userName, userGroups); assertTrue(snd1Opt.isPresent()); snd1 = snd1Opt.get(); snd1 = snd1Opt.get(); assertTrue(snd1.isWritable()); assertFalse(snd1.isPermissionDenied()); assertTrue(snd1.isBusy()); snd1Opt = dao.getShortNodeDescriptor("/test3/masynctrans", userName, userGroups); snd1Opt = dao.getShortNodeDescriptor("/test3/masynctrans", userName, userGroups); assertTrue(snd1Opt.isPresent()); snd1 = snd1Opt.get(); snd1 = snd1Opt.get(); assertFalse(snd1.isWritable()); assertFalse(snd1.isBusy()); snd1Opt = dao.getShortNodeDescriptor("/test3/asyncloc", userName, userGroups); snd1Opt = dao.getShortNodeDescriptor("/test3/asyncloc", userName, userGroups); assertTrue(snd1Opt.isPresent()); snd1 = snd1Opt.get(); snd1 = snd1Opt.get(); assertFalse(snd1.isWritable()); assertFalse(snd1.isBusy()); snd1Opt = dao.getShortNodeDescriptor("/test1/f1/f2_renamed/f3", "user1", userGroups); snd1Opt = dao.getShortNodeDescriptor("/test1/f1/f2_renamed/f3", "user1", userGroups); assertTrue(snd1Opt.isPresent()); snd1 = snd1Opt.get(); snd1 = snd1Opt.get(); assertFalse(snd1.isContainer()); assertFalse(snd1.isWritable()); assertFalse(snd1.isPermissionDenied()); assertFalse(snd1.isBusy()); snd1Opt = dao.getShortNodeDescriptor("/test3/group1", "user1", userGroups); snd1Opt = dao.getShortNodeDescriptor("/test3/group1", "user1", userGroups); assertTrue(snd1Opt.isPresent()); snd1 = snd1Opt.get(); snd1 = snd1Opt.get(); assertTrue(snd1.isWritable()); assertTrue(snd1.isPermissionDenied()); snd1Opt = dao.getShortNodeDescriptor("/test3/group1", "user3", List.of("group99")); snd1Opt = dao.getShortNodeDescriptor("/test3/group1", "user3", List.of("group99")); assertTrue(snd1Opt.isPresent()); snd1 = snd1Opt.get(); snd1 = snd1Opt.get(); assertTrue(snd1.isWritable()); assertFalse(snd1.isPermissionDenied()); snd1Opt = dao.getShortNodeDescriptor("/test3/group1", "user1", List.of("group1", "group2")); snd1Opt = dao.getShortNodeDescriptor("/test3/group1", "user1", List.of("group1", "group2")); assertTrue(snd1Opt.isPresent()); snd1 = snd1Opt.get(); assertTrue(snd1.isWritable()); snd1 = snd1Opt.get(); assertTrue(snd1.isWritable()); assertFalse(snd1.isPermissionDenied()); } @Test public void testIsBranchBusy() { Optional<Long> optId = dao.getNodeId("/test3/m1"); assertTrue(optId.isPresent()); assertFalse(dao.isBranchBusy(optId.get())); optId = dao.getNodeId("/test3"); assertTrue(optId.isPresent()); assertTrue(dao.isBranchBusy(optId.get())); } @Test public void testIsBranchWritable() { List<String> userGroups = List.of("group1"); Optional<Long> optId = dao.getNodeId("/test3/m1"); assertTrue(optId.isPresent()); assertTrue(optId.isPresent()); assertTrue(dao.isBranchWritable(optId.get(), "user3", userGroups)); optId = dao.getNodeId("/test3"); assertTrue(optId.isPresent()); assertTrue(optId.isPresent()); assertFalse(dao.isBranchWritable(optId.get(), "user3", userGroups)); optId = dao.getNodeId("/test3/group1"); assertTrue(optId.isPresent()); assertTrue(optId.isPresent()); assertTrue(dao.isBranchWritable(optId.get(), "user3", userGroups)); optId = dao.getNodeId("/test3/group1"); assertTrue(optId.isPresent()); assertFalse(dao.isBranchWritable(optId.get(), "user1", List.of("group99"))); assertTrue(optId.isPresent()); assertFalse(dao.isBranchWritable(optId.get(), "user1", List.of("group99"))); } @Test public void testMoveNodeBranch() { // Let's move /test3/m1 to /test3/group1 Optional<Long> optSourceId = dao.getNodeId("/test3/m1"); assertTrue(optSourceId.isPresent()); Optional<ShortNodeDescriptor> optSnd Optional<ShortNodeDescriptor> optSnd = dao.getShortNodeDescriptor("/test3/group1", "user3", List.of("group1")); assertTrue(optSnd.isPresent()); ShortNodeDescriptor snd = optSnd.get(); assertEquals("9.17", snd.getDestinationNodeLtreePath()); dao.moveNodeBranch(optSourceId.get(), snd.getDestinationNodeLtreePath()); Optional<Long> optResultId = dao.getNodeId("/test3/group1/m1"); Optional<Long> optResultId = dao.getNodeId("/test3/group1/m1"); assertTrue(optSourceId.isPresent()); optSnd = dao.getShortNodeDescriptor("/test3/group1/m1", "user3", List.of("group1")); assertEquals("9.17.10", optSnd.get().getDestinationNodeLtreePath()); Optional<Long> optResultIdChild = dao.getNodeId("/test3/group1/m1/m2"); optSnd = dao.getShortNodeDescriptor("/test3/group1/m1/m2", "user3", List.of("group1")); assertEquals("9.17.10.11", optSnd.get().getDestinationNodeLtreePath()); assertTrue(optResultIdChild.isPresent()); } @Test public void testRenameNode() { Loading @@ -239,12 +242,12 @@ public class NodeDAOTest { assertTrue(rootId.isPresent()); assertEquals("f1", dao.getNodeOsName(oldPath)); dao.renameNode(rootId.get(), "f_pippo"); assertTrue(dao.listNode(oldPath).isEmpty()); assertTrue(dao.listNode(oldPathChild).isEmpty()); // After the first rename the os_name column has to be equal to the old name // to avoid issues with renaming folders where some files have been uploaded assertEquals("f1", dao.getNodeOsName(newPath)); Loading @@ -256,7 +259,7 @@ public class NodeDAOTest { dao.renameNode(rootId.get(), "f_pippo_second_rename"); assertEquals("f1", dao.getNodeOsName("/test1/f_pippo_second_rename")); } @Test public void testCountNodeWithPath() { assertEquals(1, dao.countNodesWithPath("/")); Loading Loading
src/main/java/it/inaf/oats/vospace/persistence/NodeDAO.java +6 −6 Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ package it.inaf.oats.vospace.persistence; import it.inaf.oats.vospace.DeleteNodeController; import it.inaf.oats.vospace.URIUtils; import it.inaf.oats.vospace.datamodel.NodeProperties; import it.inaf.oats.vospace.datamodel.NodeUtils; import it.inaf.oats.vospace.exception.InternalFaultException; Loading Loading @@ -57,9 +58,9 @@ public class NodeDAO { public void createNode(Node myNode, String jobId) { String nodeURI = myNode.getUri(); String nodeVosPath = URIUtils.returnVosPathFromNodeURI(myNode.getUri(), authority); List<NodePaths> paths = getNodePathsFromDB(nodeURI); List<NodePaths> paths = getNodePathsFromDB(nodeVosPath); if (paths.isEmpty()) { throw new IllegalStateException("Unable to find parent node during node creation"); Loading @@ -74,7 +75,7 @@ public class NodeDAO { jdbcTemplate.update(conn -> { PreparedStatement ps = conn.prepareStatement(sb.toString()); int i = 0; ps.setString(++i, NodeUtils.getNodeName(myNode)); ps.setString(++i, NodeUtils.getNodeName(nodeVosPath)); if (jobId == null) { ps.setNull(++i, Types.VARCHAR); } else { Loading Loading @@ -581,9 +582,8 @@ public class NodeDAO { return diff; } private List<NodePaths> getNodePathsFromDB(String nodeURI) { String path = nodeURI.replaceAll("vos://[^/]+", ""); private List<NodePaths> getNodePathsFromDB(String path) { String parentPath = NodeUtils.getParentPath(path); String sql = "SELECT path, relative_path " Loading
src/test/java/it/inaf/oats/vospace/URIUtilsTest.java +0 −9 Original line number Diff line number Diff line Loading @@ -6,17 +6,8 @@ package it.inaf.oats.vospace; import it.inaf.oats.vospace.exception.InvalidURIException; import java.util.ArrayList; import java.util.List; import net.ivoa.xml.vospace.v2.DataNode; import net.ivoa.xml.vospace.v2.LinkNode; import net.ivoa.xml.vospace.v2.Node; import net.ivoa.xml.vospace.v2.Property; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; public class URIUtilsTest { Loading
src/test/java/it/inaf/oats/vospace/persistence/NodeDAOTest.java +74 −71 Original line number Diff line number Diff line Loading @@ -8,6 +8,7 @@ package it.inaf.oats.vospace.persistence; import it.inaf.oats.vospace.datamodel.NodeProperties; import it.inaf.oats.vospace.exception.InternalFaultException; import it.inaf.oats.vospace.persistence.NodeDAO.ShortNodeDescriptor; import java.lang.reflect.Field; import java.util.HashSet; import java.util.List; import java.util.Optional; Loading @@ -30,12 +31,15 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.util.ReflectionTestUtils; @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = {DataSourceConfig.class}) @TestPropertySource(locations = "classpath:test.properties") public class NodeDAOTest { private static final String AUTHORITY = "example.com!vospace"; @Autowired private DataSource dataSource; private NodeDAO dao; Loading @@ -43,6 +47,7 @@ public class NodeDAOTest { @BeforeEach public void init() { dao = new NodeDAO(dataSource); ReflectionTestUtils.setField(dao, "authority", AUTHORITY); } @Test Loading @@ -53,7 +58,7 @@ public class NodeDAOTest { dataNode.setAccepts(getViews()); dataNode.setProvides(getViews()); dataNode.setBusy(true); dao.createNode(dataNode); DataNode retrievedNode = (DataNode) dao.listNode("/mydata1").get(); Loading @@ -80,150 +85,148 @@ public class NodeDAOTest { @Test public void testGetNodeId() { Optional<Long> id1 = dao.getNodeId("/test1"); assertTrue(id1.isPresent()); assertTrue(id1.isPresent()); assertEquals(2, id1.get()); Optional<Long> id2 = dao.getNodeId("/test1/f1"); assertTrue(id2.isPresent()); assertEquals(3, id2.get()); Optional<Long> id3 = dao.getNodeId("/pippo123123"); assertTrue(id3.isEmpty()); } @Test public void testGetShortNodeDescriptor(){ public void testGetShortNodeDescriptor() { String userName = "user3"; List<String> userGroups = List.of(); Optional<ShortNodeDescriptor> snd1Opt = dao.getShortNodeDescriptor("/test3/mstick", userName, userGroups); Optional<ShortNodeDescriptor> snd1Opt = dao.getShortNodeDescriptor("/test3/mstick", userName, userGroups); assertTrue(snd1Opt.isPresent()); ShortNodeDescriptor snd1 = snd1Opt.get(); assertTrue(snd1.isContainer()); assertFalse(snd1.isPermissionDenied()); assertFalse(snd1.isWritable()); assertFalse(snd1.isBusy()); assertEquals("9.13", snd1.getDestinationNodeLtreePath()); snd1Opt = dao.getShortNodeDescriptor("/test3/mbusy", userName, userGroups); assertFalse(snd1.isBusy()); assertEquals("9.13", snd1.getDestinationNodeLtreePath()); snd1Opt = dao.getShortNodeDescriptor("/test3/mbusy", userName, userGroups); assertTrue(snd1Opt.isPresent()); snd1 = snd1Opt.get(); snd1 = snd1Opt.get(); assertTrue(snd1.isWritable()); assertFalse(snd1.isPermissionDenied()); assertTrue(snd1.isBusy()); snd1Opt = dao.getShortNodeDescriptor("/test3/masynctrans", userName, userGroups); snd1Opt = dao.getShortNodeDescriptor("/test3/masynctrans", userName, userGroups); assertTrue(snd1Opt.isPresent()); snd1 = snd1Opt.get(); snd1 = snd1Opt.get(); assertFalse(snd1.isWritable()); assertFalse(snd1.isBusy()); snd1Opt = dao.getShortNodeDescriptor("/test3/asyncloc", userName, userGroups); snd1Opt = dao.getShortNodeDescriptor("/test3/asyncloc", userName, userGroups); assertTrue(snd1Opt.isPresent()); snd1 = snd1Opt.get(); snd1 = snd1Opt.get(); assertFalse(snd1.isWritable()); assertFalse(snd1.isBusy()); snd1Opt = dao.getShortNodeDescriptor("/test1/f1/f2_renamed/f3", "user1", userGroups); snd1Opt = dao.getShortNodeDescriptor("/test1/f1/f2_renamed/f3", "user1", userGroups); assertTrue(snd1Opt.isPresent()); snd1 = snd1Opt.get(); snd1 = snd1Opt.get(); assertFalse(snd1.isContainer()); assertFalse(snd1.isWritable()); assertFalse(snd1.isPermissionDenied()); assertFalse(snd1.isBusy()); snd1Opt = dao.getShortNodeDescriptor("/test3/group1", "user1", userGroups); snd1Opt = dao.getShortNodeDescriptor("/test3/group1", "user1", userGroups); assertTrue(snd1Opt.isPresent()); snd1 = snd1Opt.get(); snd1 = snd1Opt.get(); assertTrue(snd1.isWritable()); assertTrue(snd1.isPermissionDenied()); snd1Opt = dao.getShortNodeDescriptor("/test3/group1", "user3", List.of("group99")); snd1Opt = dao.getShortNodeDescriptor("/test3/group1", "user3", List.of("group99")); assertTrue(snd1Opt.isPresent()); snd1 = snd1Opt.get(); snd1 = snd1Opt.get(); assertTrue(snd1.isWritable()); assertFalse(snd1.isPermissionDenied()); snd1Opt = dao.getShortNodeDescriptor("/test3/group1", "user1", List.of("group1", "group2")); snd1Opt = dao.getShortNodeDescriptor("/test3/group1", "user1", List.of("group1", "group2")); assertTrue(snd1Opt.isPresent()); snd1 = snd1Opt.get(); assertTrue(snd1.isWritable()); snd1 = snd1Opt.get(); assertTrue(snd1.isWritable()); assertFalse(snd1.isPermissionDenied()); } @Test public void testIsBranchBusy() { Optional<Long> optId = dao.getNodeId("/test3/m1"); assertTrue(optId.isPresent()); assertFalse(dao.isBranchBusy(optId.get())); optId = dao.getNodeId("/test3"); assertTrue(optId.isPresent()); assertTrue(dao.isBranchBusy(optId.get())); } @Test public void testIsBranchWritable() { List<String> userGroups = List.of("group1"); Optional<Long> optId = dao.getNodeId("/test3/m1"); assertTrue(optId.isPresent()); assertTrue(optId.isPresent()); assertTrue(dao.isBranchWritable(optId.get(), "user3", userGroups)); optId = dao.getNodeId("/test3"); assertTrue(optId.isPresent()); assertTrue(optId.isPresent()); assertFalse(dao.isBranchWritable(optId.get(), "user3", userGroups)); optId = dao.getNodeId("/test3/group1"); assertTrue(optId.isPresent()); assertTrue(optId.isPresent()); assertTrue(dao.isBranchWritable(optId.get(), "user3", userGroups)); optId = dao.getNodeId("/test3/group1"); assertTrue(optId.isPresent()); assertFalse(dao.isBranchWritable(optId.get(), "user1", List.of("group99"))); assertTrue(optId.isPresent()); assertFalse(dao.isBranchWritable(optId.get(), "user1", List.of("group99"))); } @Test public void testMoveNodeBranch() { // Let's move /test3/m1 to /test3/group1 Optional<Long> optSourceId = dao.getNodeId("/test3/m1"); assertTrue(optSourceId.isPresent()); Optional<ShortNodeDescriptor> optSnd Optional<ShortNodeDescriptor> optSnd = dao.getShortNodeDescriptor("/test3/group1", "user3", List.of("group1")); assertTrue(optSnd.isPresent()); ShortNodeDescriptor snd = optSnd.get(); assertEquals("9.17", snd.getDestinationNodeLtreePath()); dao.moveNodeBranch(optSourceId.get(), snd.getDestinationNodeLtreePath()); Optional<Long> optResultId = dao.getNodeId("/test3/group1/m1"); Optional<Long> optResultId = dao.getNodeId("/test3/group1/m1"); assertTrue(optSourceId.isPresent()); optSnd = dao.getShortNodeDescriptor("/test3/group1/m1", "user3", List.of("group1")); assertEquals("9.17.10", optSnd.get().getDestinationNodeLtreePath()); Optional<Long> optResultIdChild = dao.getNodeId("/test3/group1/m1/m2"); optSnd = dao.getShortNodeDescriptor("/test3/group1/m1/m2", "user3", List.of("group1")); assertEquals("9.17.10.11", optSnd.get().getDestinationNodeLtreePath()); assertTrue(optResultIdChild.isPresent()); } @Test public void testRenameNode() { Loading @@ -239,12 +242,12 @@ public class NodeDAOTest { assertTrue(rootId.isPresent()); assertEquals("f1", dao.getNodeOsName(oldPath)); dao.renameNode(rootId.get(), "f_pippo"); assertTrue(dao.listNode(oldPath).isEmpty()); assertTrue(dao.listNode(oldPathChild).isEmpty()); // After the first rename the os_name column has to be equal to the old name // to avoid issues with renaming folders where some files have been uploaded assertEquals("f1", dao.getNodeOsName(newPath)); Loading @@ -256,7 +259,7 @@ public class NodeDAOTest { dao.renameNode(rootId.get(), "f_pippo_second_rename"); assertEquals("f1", dao.getNodeOsName("/test1/f_pippo_second_rename")); } @Test public void testCountNodeWithPath() { assertEquals(1, dao.countNodesWithPath("/")); Loading