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 Diff line number Diff line
@@ -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<NodePaths> paths = getNodePathsFromDB(nodeURI);
        List<NodePaths> 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<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 "
+0 −9
Original line number Diff line number Diff line
@@ -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 {
+74 −71
Original line number 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.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<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() {
@@ -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("/"));