Commit bd99db9a authored by Nicola Fulvio Calabria's avatar Nicola Fulvio Calabria
Browse files

Restored URI percent decoding for create node + fixed tests

parent 216a3cd9
Loading
Loading
Loading
Loading
Loading
+6 −6
Original line number Original line Diff line number Diff line
@@ -6,6 +6,7 @@
package it.inaf.oats.vospace.persistence;
package it.inaf.oats.vospace.persistence;


import it.inaf.oats.vospace.DeleteNodeController;
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.NodeProperties;
import it.inaf.oats.vospace.datamodel.NodeUtils;
import it.inaf.oats.vospace.datamodel.NodeUtils;
import it.inaf.oats.vospace.exception.InternalFaultException;
import it.inaf.oats.vospace.exception.InternalFaultException;
@@ -57,9 +58,9 @@ public class NodeDAO {


    public void createNode(Node myNode, String jobId) {
    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()) {
        if (paths.isEmpty()) {
            throw new IllegalStateException("Unable to find parent node during node creation");
            throw new IllegalStateException("Unable to find parent node during node creation");
@@ -74,7 +75,7 @@ public class NodeDAO {
        jdbcTemplate.update(conn -> {
        jdbcTemplate.update(conn -> {
            PreparedStatement ps = conn.prepareStatement(sb.toString());
            PreparedStatement ps = conn.prepareStatement(sb.toString());
            int i = 0;
            int i = 0;
            ps.setString(++i, NodeUtils.getNodeName(myNode));
            ps.setString(++i, NodeUtils.getNodeName(nodeVosPath));
            if (jobId == null) {
            if (jobId == null) {
                ps.setNull(++i, Types.VARCHAR);
                ps.setNull(++i, Types.VARCHAR);
            } else {
            } else {
@@ -581,9 +582,8 @@ public class NodeDAO {
        return diff;
        return diff;
    }
    }


    private List<NodePaths> getNodePathsFromDB(String nodeURI) {
    private List<NodePaths> getNodePathsFromDB(String path) {
        
        
        String path = nodeURI.replaceAll("vos://[^/]+", "");
        String parentPath = NodeUtils.getParentPath(path);
        String parentPath = NodeUtils.getParentPath(path);


        String sql = "SELECT path, relative_path "
        String sql = "SELECT path, relative_path "
+0 −9
Original line number Original line Diff line number Diff line
@@ -6,17 +6,8 @@
package it.inaf.oats.vospace;
package it.inaf.oats.vospace;


import it.inaf.oats.vospace.exception.InvalidURIException;
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.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Test;


public class URIUtilsTest {
public class URIUtilsTest {
+74 −71
Original line number Original line Diff line number Diff line
@@ -8,6 +8,7 @@ package it.inaf.oats.vospace.persistence;
import it.inaf.oats.vospace.datamodel.NodeProperties;
import it.inaf.oats.vospace.datamodel.NodeProperties;
import it.inaf.oats.vospace.exception.InternalFaultException;
import it.inaf.oats.vospace.exception.InternalFaultException;
import it.inaf.oats.vospace.persistence.NodeDAO.ShortNodeDescriptor;
import it.inaf.oats.vospace.persistence.NodeDAO.ShortNodeDescriptor;
import java.lang.reflect.Field;
import java.util.HashSet;
import java.util.HashSet;
import java.util.List;
import java.util.List;
import java.util.Optional;
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.ContextConfiguration;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.util.ReflectionTestUtils;


@ExtendWith(SpringExtension.class)
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = {DataSourceConfig.class})
@ContextConfiguration(classes = {DataSourceConfig.class})
@TestPropertySource(locations = "classpath:test.properties")
@TestPropertySource(locations = "classpath:test.properties")
public class NodeDAOTest {
public class NodeDAOTest {


    private static final String AUTHORITY = "example.com!vospace";

    @Autowired
    @Autowired
    private DataSource dataSource;
    private DataSource dataSource;
    private NodeDAO dao;
    private NodeDAO dao;
@@ -43,6 +47,7 @@ public class NodeDAOTest {
    @BeforeEach
    @BeforeEach
    public void init() {
    public void init() {
        dao = new NodeDAO(dataSource);
        dao = new NodeDAO(dataSource);
        ReflectionTestUtils.setField(dao, "authority", AUTHORITY);       
    }
    }


    @Test
    @Test
@@ -96,8 +101,8 @@ public class NodeDAOTest {
        String userName = "user3";
        String userName = "user3";
        List<String> userGroups = List.of();
        List<String> userGroups = List.of();


        Optional<ShortNodeDescriptor> snd1Opt = 
        Optional<ShortNodeDescriptor> snd1Opt
                dao.getShortNodeDescriptor("/test3/mstick", userName, userGroups);
                = dao.getShortNodeDescriptor("/test3/mstick", userName, userGroups);


        assertTrue(snd1Opt.isPresent());
        assertTrue(snd1Opt.isPresent());
        ShortNodeDescriptor snd1 = snd1Opt.get();
        ShortNodeDescriptor snd1 = snd1Opt.get();
@@ -108,30 +113,30 @@ public class NodeDAOTest {


        assertEquals("9.13", snd1.getDestinationNodeLtreePath());
        assertEquals("9.13", snd1.getDestinationNodeLtreePath());


        snd1Opt = 
        snd1Opt
                dao.getShortNodeDescriptor("/test3/mbusy", userName, userGroups);
                = dao.getShortNodeDescriptor("/test3/mbusy", userName, userGroups);
        assertTrue(snd1Opt.isPresent());
        assertTrue(snd1Opt.isPresent());
        snd1 = snd1Opt.get();
        snd1 = snd1Opt.get();
        assertTrue(snd1.isWritable());
        assertTrue(snd1.isWritable());
        assertFalse(snd1.isPermissionDenied());
        assertFalse(snd1.isPermissionDenied());
        assertTrue(snd1.isBusy());
        assertTrue(snd1.isBusy());


        snd1Opt = 
        snd1Opt
                dao.getShortNodeDescriptor("/test3/masynctrans", userName, userGroups);
                = dao.getShortNodeDescriptor("/test3/masynctrans", userName, userGroups);
        assertTrue(snd1Opt.isPresent());
        assertTrue(snd1Opt.isPresent());
        snd1 = snd1Opt.get();
        snd1 = snd1Opt.get();
        assertFalse(snd1.isWritable());
        assertFalse(snd1.isWritable());
        assertFalse(snd1.isBusy());
        assertFalse(snd1.isBusy());


        snd1Opt = 
        snd1Opt
                dao.getShortNodeDescriptor("/test3/asyncloc", userName, userGroups);
                = dao.getShortNodeDescriptor("/test3/asyncloc", userName, userGroups);
        assertTrue(snd1Opt.isPresent());
        assertTrue(snd1Opt.isPresent());
        snd1 = snd1Opt.get();
        snd1 = snd1Opt.get();
        assertFalse(snd1.isWritable());
        assertFalse(snd1.isWritable());
        assertFalse(snd1.isBusy());
        assertFalse(snd1.isBusy());


        snd1Opt = 
        snd1Opt
                dao.getShortNodeDescriptor("/test1/f1/f2_renamed/f3", "user1", userGroups);
                = dao.getShortNodeDescriptor("/test1/f1/f2_renamed/f3", "user1", userGroups);
        assertTrue(snd1Opt.isPresent());
        assertTrue(snd1Opt.isPresent());
        snd1 = snd1Opt.get();
        snd1 = snd1Opt.get();
        assertFalse(snd1.isContainer());
        assertFalse(snd1.isContainer());
@@ -139,22 +144,22 @@ public class NodeDAOTest {
        assertFalse(snd1.isPermissionDenied());
        assertFalse(snd1.isPermissionDenied());
        assertFalse(snd1.isBusy());
        assertFalse(snd1.isBusy());


        snd1Opt = 
        snd1Opt
                dao.getShortNodeDescriptor("/test3/group1", "user1", userGroups);
                = dao.getShortNodeDescriptor("/test3/group1", "user1", userGroups);
        assertTrue(snd1Opt.isPresent());
        assertTrue(snd1Opt.isPresent());
        snd1 = snd1Opt.get();
        snd1 = snd1Opt.get();
        assertTrue(snd1.isWritable());
        assertTrue(snd1.isWritable());
        assertTrue(snd1.isPermissionDenied());
        assertTrue(snd1.isPermissionDenied());


        snd1Opt = 
        snd1Opt
                dao.getShortNodeDescriptor("/test3/group1", "user3", List.of("group99"));
                = dao.getShortNodeDescriptor("/test3/group1", "user3", List.of("group99"));
        assertTrue(snd1Opt.isPresent());
        assertTrue(snd1Opt.isPresent());
        snd1 = snd1Opt.get();
        snd1 = snd1Opt.get();
        assertTrue(snd1.isWritable());
        assertTrue(snd1.isWritable());
        assertFalse(snd1.isPermissionDenied());
        assertFalse(snd1.isPermissionDenied());


        snd1Opt = 
        snd1Opt
                dao.getShortNodeDescriptor("/test3/group1", "user1", List.of("group1", "group2"));
                = dao.getShortNodeDescriptor("/test3/group1", "user1", List.of("group1", "group2"));
        assertTrue(snd1Opt.isPresent());
        assertTrue(snd1Opt.isPresent());
        snd1 = snd1Opt.get();
        snd1 = snd1Opt.get();
        assertTrue(snd1.isWritable());
        assertTrue(snd1.isWritable());
@@ -216,7 +221,6 @@ public class NodeDAOTest {
        optSnd = dao.getShortNodeDescriptor("/test3/group1/m1", "user3", List.of("group1"));
        optSnd = dao.getShortNodeDescriptor("/test3/group1/m1", "user3", List.of("group1"));
        assertEquals("9.17.10", optSnd.get().getDestinationNodeLtreePath());
        assertEquals("9.17.10", optSnd.get().getDestinationNodeLtreePath());


        
        Optional<Long> optResultIdChild = dao.getNodeId("/test3/group1/m1/m2");
        Optional<Long> optResultIdChild = dao.getNodeId("/test3/group1/m1/m2");
        optSnd = dao.getShortNodeDescriptor("/test3/group1/m1/m2", "user3", List.of("group1"));
        optSnd = dao.getShortNodeDescriptor("/test3/group1/m1/m2", "user3", List.of("group1"));
        assertEquals("9.17.10.11", optSnd.get().getDestinationNodeLtreePath());
        assertEquals("9.17.10.11", optSnd.get().getDestinationNodeLtreePath());
@@ -224,7 +228,6 @@ public class NodeDAOTest {


    }
    }



    @Test
    @Test
    public void testRenameNode() {
    public void testRenameNode() {
        String oldPath = "/test1/f1";
        String oldPath = "/test1/f1";