diff --git a/src/main/java/it/inaf/oats/vospace/persistence/NodeDAO.java b/src/main/java/it/inaf/oats/vospace/persistence/NodeDAO.java index 001b466be8be846d0a0c6cee54e4f19595710b0a..f194e026f190f3eb2321afcf4a863bb17c3c6f0c 100644 --- a/src/main/java/it/inaf/oats/vospace/persistence/NodeDAO.java +++ b/src/main/java/it/inaf/oats/vospace/persistence/NodeDAO.java @@ -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; @@ -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 paths = getNodePathsFromDB(nodeURI); + List paths = getNodePathsFromDB(nodeVosPath); if (paths.isEmpty()) { throw new IllegalStateException("Unable to find parent node during node creation"); @@ -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 { @@ -581,9 +582,8 @@ public class NodeDAO { return diff; } - private List getNodePathsFromDB(String nodeURI) { - - String path = nodeURI.replaceAll("vos://[^/]+", ""); + private List getNodePathsFromDB(String path) { + String parentPath = NodeUtils.getParentPath(path); String sql = "SELECT path, relative_path " diff --git a/src/test/java/it/inaf/oats/vospace/URIUtilsTest.java b/src/test/java/it/inaf/oats/vospace/URIUtilsTest.java index 98dcb6fbd4733fe8df9f38ab5c9c358238c836f1..b3e3733105fc3654b8739dfd37f7b8c9cb0a0917 100644 --- a/src/test/java/it/inaf/oats/vospace/URIUtilsTest.java +++ b/src/test/java/it/inaf/oats/vospace/URIUtilsTest.java @@ -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 { diff --git a/src/test/java/it/inaf/oats/vospace/persistence/NodeDAOTest.java b/src/test/java/it/inaf/oats/vospace/persistence/NodeDAOTest.java index cd7cb0d62e771195fe46e82fb9eb374f32f9d412..43846f1586bdb7b572899905dde87a9726c8d748 100644 --- a/src/test/java/it/inaf/oats/vospace/persistence/NodeDAOTest.java +++ b/src/test/java/it/inaf/oats/vospace/persistence/NodeDAOTest.java @@ -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; @@ -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; @@ -43,6 +47,7 @@ public class NodeDAOTest { @BeforeEach public void init() { dao = new NodeDAO(dataSource); + ReflectionTestUtils.setField(dao, "authority", AUTHORITY); } @Test @@ -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(); @@ -80,150 +85,148 @@ public class NodeDAOTest { @Test public void testGetNodeId() { Optional id1 = dao.getNodeId("/test1"); - assertTrue(id1.isPresent()); + assertTrue(id1.isPresent()); assertEquals(2, id1.get()); - + Optional id2 = dao.getNodeId("/test1/f1"); assertTrue(id2.isPresent()); assertEquals(3, id2.get()); - + Optional id3 = dao.getNodeId("/pippo123123"); assertTrue(id3.isEmpty()); } - + @Test - public void testGetShortNodeDescriptor(){ + public void testGetShortNodeDescriptor() { String userName = "user3"; List userGroups = List.of(); - - Optional snd1Opt = - dao.getShortNodeDescriptor("/test3/mstick", userName, userGroups); - + + Optional 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 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 userGroups = List.of("group1"); Optional 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 optSourceId = dao.getNodeId("/test3/m1"); assertTrue(optSourceId.isPresent()); - - Optional optSnd + + Optional 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 optResultId = dao.getNodeId("/test3/group1/m1"); + + Optional 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 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() { @@ -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)); @@ -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("/"));