From 5bd13b153e41afba9dbac9ac70f60a3d801a2583 Mon Sep 17 00:00:00 2001
From: Sonia Zorba <sonia.zorba@inaf.it>
Date: Thu, 24 Jun 2021 10:59:25 +0200
Subject: [PATCH] Added jobId to FileInfo; Added missing tests

---
 .../ia2/transfer/persistence/FileDAO.java     | 10 ++--
 .../transfer/persistence/model/FileInfo.java  |  9 ++++
 .../ia2/transfer/persistence/FileDAOTest.java | 49 +++++++++++++++++++
 3 files changed, 65 insertions(+), 3 deletions(-)

diff --git a/src/main/java/it/inaf/ia2/transfer/persistence/FileDAO.java b/src/main/java/it/inaf/ia2/transfer/persistence/FileDAO.java
index a2227d5..37ff240 100644
--- a/src/main/java/it/inaf/ia2/transfer/persistence/FileDAO.java
+++ b/src/main/java/it/inaf/ia2/transfer/persistence/FileDAO.java
@@ -45,7 +45,7 @@ public class FileDAO {
         String sql = "SELECT n.node_id, is_public, group_read, group_write, creator_id, async_trans,\n"
                 + "content_type, content_encoding, content_length, content_md5, name, n.location_id,\n"
                 + "accept_views, provide_views, l.location_type, n.path <> n.relative_path AS virtual_parent,\n"
-                + "(SELECT user_name FROM users WHERE user_id = creator_id) AS username,\n"
+                + "(SELECT user_name FROM users WHERE user_id = creator_id) AS username, n.job_id,\n"
                 + "base_path, get_os_path(n.node_id) AS os_path, ? AS vos_path, false AS is_directory\n"
                 + "FROM node n\n"
                 + "JOIN location l ON (n.location_id IS NOT NULL AND n.location_id = l.location_id) OR (n.location_id IS NULL AND l.location_id = ?)\n"
@@ -168,7 +168,7 @@ public class FileDAO {
                 + "n.accept_views, n.provide_views, l.location_type, n.path <> n.relative_path AS virtual_parent,\n"
                 + "(SELECT user_name FROM users WHERE user_id = n.creator_id) AS username,\n"
                 + "base_path, get_os_path(n.node_id) AS os_path, get_vos_path(n.node_id) AS vos_path,\n"
-                + "n.type = 'container' AS is_directory, n.name, n.location_id\n"
+                + "n.type = 'container' AS is_directory, n.name, n.location_id, n.job_id\n"
                 + "FROM node n\n"
                 + "JOIN node p ON p.path @> n.path\n"
                 + "LEFT JOIN location l ON l.location_id = n.location_id\n"
@@ -206,10 +206,14 @@ public class FileDAO {
         fi.setVirtualPath(rs.getString("vos_path"));
         fi.setVirtualName(rs.getString("name"));
         fi.setContentEncoding(rs.getString("content_encoding"));
-        fi.setContentLength(rs.getLong("content_length"));
+        long contentLength = rs.getLong("content_length");
+        if (!rs.wasNull()) {
+            fi.setContentLength(contentLength);
+        }
         fi.setContentMd5(rs.getString("content_md5"));
         fi.setContentType(rs.getString("content_type"));
         fi.setDirectory(rs.getBoolean("is_directory"));
+        fi.setJobId(rs.getString("job_id"));
         int locationId = rs.getInt("location_id");
         if (!rs.wasNull()) {
             fi.setLocationId(locationId);
diff --git a/src/main/java/it/inaf/ia2/transfer/persistence/model/FileInfo.java b/src/main/java/it/inaf/ia2/transfer/persistence/model/FileInfo.java
index d9a0e69..f634999 100644
--- a/src/main/java/it/inaf/ia2/transfer/persistence/model/FileInfo.java
+++ b/src/main/java/it/inaf/ia2/transfer/persistence/model/FileInfo.java
@@ -27,6 +27,7 @@ public class FileInfo {
     private Long contentLength;
     private String contentMd5;
     private Integer locationId;
+    private String jobId;
 
     public int getNodeId() {
         return nodeId;
@@ -171,4 +172,12 @@ public class FileInfo {
     public void setLocationId(Integer locationId) {
         this.locationId = locationId;
     }
+
+    public String getJobId() {
+        return jobId;
+    }
+
+    public void setJobId(String jobId) {
+        this.jobId = jobId;
+    }
 }
diff --git a/src/test/java/it/inaf/ia2/transfer/persistence/FileDAOTest.java b/src/test/java/it/inaf/ia2/transfer/persistence/FileDAOTest.java
index 7b8dcc0..4a37a32 100644
--- a/src/test/java/it/inaf/ia2/transfer/persistence/FileDAOTest.java
+++ b/src/test/java/it/inaf/ia2/transfer/persistence/FileDAOTest.java
@@ -17,9 +17,11 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 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})
@@ -29,11 +31,15 @@ public class FileDAOTest {
     @Autowired
     private DataSource dataSource;
 
+    @Value("${upload_location_id}")
+    private int uploadLocationId;
+
     private FileDAO dao;
 
     @BeforeEach
     public void init() {
         dao = new FileDAO(dataSource);
+        ReflectionTestUtils.setField(dao, "uploadLocationId", uploadLocationId);
     }
 
     @Test
@@ -80,4 +86,47 @@ public class FileDAOTest {
 
         assertNull(dao.getRemainingQuota("/"));
     }
+
+    @Test
+    public void testSetBusy() {
+
+        FileInfo fileInfo = dao.getFileInfo("/public/file1").get();
+        assertNull(fileInfo.getJobId());
+
+        dao.setBusy(fileInfo.getNodeId(), "pippo1");
+        assertEquals("pippo1", dao.getFileInfo("/public/file1").get().getJobId());
+
+        dao.setBusy(fileInfo.getNodeId(), null);
+        assertNull(dao.getFileInfo("/public/file1").get().getJobId());
+    }
+
+    @Test
+    public void testSetOsName() {
+
+        FileInfo fileInfo = dao.getFileInfo("/public/file1").get();
+        assertTrue(fileInfo.getOsPath().endsWith("/file1"));
+
+        dao.setOsName(fileInfo.getNodeId(), "file1-renamed");
+        fileInfo = dao.getFileInfo("/public/file1").get();
+        assertTrue(fileInfo.getOsPath().endsWith("/file1-renamed"));
+    }
+
+    @Test
+    public void testUpdateFileAttributes() {
+
+        FileInfo fileInfo = dao.getFileInfo("/public/file1").get();
+
+        assertNull(fileInfo.getContentLength());
+        assertNull(fileInfo.getContentType());
+        assertNull(fileInfo.getContentEncoding());
+        assertNull(fileInfo.getContentMd5());
+
+        dao.updateFileAttributes(fileInfo.getNodeId(), "text/plain", "UTF-8", 50000l, "<md5>");
+
+        fileInfo = dao.getFileInfo("/public/file1").get();
+        assertEquals(50000l, fileInfo.getContentLength());
+        assertEquals("text/plain", fileInfo.getContentType());
+        assertEquals("UTF-8", fileInfo.getContentEncoding());
+        assertEquals("<md5>", fileInfo.getContentMd5());
+    }
 }
-- 
GitLab