From 84f6c57ebaf26dfb198475a33825df99cb9118ce Mon Sep 17 00:00:00 2001
From: Nicola Fulvio Calabria <nicola.calabria@inaf.it>
Date: Thu, 15 Apr 2021 18:01:49 +0200
Subject: [PATCH] Added test cases for PermissionDeniedException and
 NodeBusyException in UriServiceTest class

---
 .../it/inaf/oats/vospace/UriServiceTest.java  | 75 ++++++++++++++++++-
 1 file changed, 74 insertions(+), 1 deletion(-)

diff --git a/src/test/java/it/inaf/oats/vospace/UriServiceTest.java b/src/test/java/it/inaf/oats/vospace/UriServiceTest.java
index 9fbe034..10f5423 100644
--- a/src/test/java/it/inaf/oats/vospace/UriServiceTest.java
+++ b/src/test/java/it/inaf/oats/vospace/UriServiceTest.java
@@ -4,6 +4,8 @@ import it.inaf.ia2.aa.ServletRapClient;
 import it.inaf.ia2.aa.data.User;
 import it.inaf.oats.vospace.datamodel.NodeProperties;
 import it.inaf.oats.vospace.exception.InvalidArgumentException;
+import it.inaf.oats.vospace.exception.NodeBusyException;
+import it.inaf.oats.vospace.exception.PermissionDeniedException;
 import it.inaf.oats.vospace.exception.ProtocolNotSupportedException;
 import it.inaf.oats.vospace.persistence.LocationDAO;
 import it.inaf.oats.vospace.persistence.NodeDAO;
@@ -19,6 +21,7 @@ import net.ivoa.xml.vospace.v2.Property;
 import net.ivoa.xml.vospace.v2.Protocol;
 import net.ivoa.xml.vospace.v2.Transfer;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.fail;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -135,6 +138,76 @@ public class UriServiceTest {
 
         assertEquals("http://file-service/mydata1?jobId=job-id&token=<new-token>", job.getResults().get(0).getHref());
     }
+    
+    @Test
+    public void testPrivateUrlPermissionDenied() {
+
+        Node node = new DataNode();
+        Property creator = new Property();
+        creator.setUri(NodeProperties.CREATOR_URI);
+        creator.setValue("user3");
+        node.getProperties().add(creator);
+
+        Property readgroup = new Property();
+        readgroup.setUri(NodeProperties.GROUP_READ_URI);
+        readgroup.setValue("group1000");
+        node.getProperties().add(readgroup);
+
+        when(nodeDAO.listNode(eq("/mydata1"))).thenReturn(Optional.of(node));
+
+        User user = mock(User.class);
+        when(user.getAccessToken()).thenReturn("<token>");
+        when(user.getName()).thenReturn("user1");
+
+        when(servletRequest.getUserPrincipal()).thenReturn(user);
+
+        when(rapClient.exchangeToken(argThat(req -> {
+            assertEquals("<token>", req.getSubjectToken());
+            assertEquals("http://file-service/mydata1", req.getResource());
+            return true;
+        }), any())).thenReturn("<new-token>");
+
+        JobSummary job = getJob();
+        Transfer tr = uriService.getTransfer(job);
+        assertThrows(PermissionDeniedException.class, 
+                ()->{ uriService.setTransferJobResult(job, tr);});        
+    }
+    
+    @Test
+    public void testPrivateUrlNodeBusy() {
+
+        DataNode node = new DataNode();
+        Property creator = new Property();
+        creator.setUri(NodeProperties.CREATOR_URI);
+        creator.setValue("user1");
+        node.getProperties().add(creator);
+
+        Property readgroup = new Property();
+        readgroup.setUri(NodeProperties.GROUP_READ_URI);
+        readgroup.setValue("group1");
+        node.getProperties().add(readgroup);
+        
+        node.setBusy(Boolean.TRUE);        
+
+        when(nodeDAO.listNode(eq("/mydata1"))).thenReturn(Optional.of(node));
+
+        User user = mock(User.class);
+        when(user.getAccessToken()).thenReturn("<token>");
+        when(user.getName()).thenReturn("user1");
+
+        when(servletRequest.getUserPrincipal()).thenReturn(user);
+
+        when(rapClient.exchangeToken(argThat(req -> {
+            assertEquals("<token>", req.getSubjectToken());
+            assertEquals("http://file-service/mydata1", req.getResource());
+            return true;
+        }), any())).thenReturn("<new-token>");
+
+        JobSummary job = getJob();
+        Transfer tr = uriService.getTransfer(job);
+        assertThrows(NodeBusyException.class, 
+                ()->{ uriService.setTransferJobResult(job, tr);});        
+    }
 
     @Test
     public void pushToNonexistentNode() {
@@ -326,7 +399,7 @@ public class UriServiceTest {
         node.getProperties().add(publicProperty);
         when(nodeDAO.listNode(eq("/mydata1"))).thenReturn(Optional.of(node));
         return node;
-    }
+    }       
 
     private JobSummary getJob() {
 
-- 
GitLab