From 02c3a41bec8436fc52615a2860b7bca135c73b5f Mon Sep 17 00:00:00 2001
From: Nicola Fulvio Calabria <nicola.calabria@inaf.it>
Date: Sun, 1 Aug 2021 10:40:22 +0200
Subject: [PATCH] Some minor fixes

---
 .../transfer/controller/PutFileController.java    | 15 ++++-----------
 .../inaf/ia2/transfer/service/PutFileService.java | 11 +++++++++--
 .../controller/PutFileControllerTest.java         |  3 ++-
 3 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/src/main/java/it/inaf/ia2/transfer/controller/PutFileController.java b/src/main/java/it/inaf/ia2/transfer/controller/PutFileController.java
index 86e1092..de1a72c 100644
--- a/src/main/java/it/inaf/ia2/transfer/controller/PutFileController.java
+++ b/src/main/java/it/inaf/ia2/transfer/controller/PutFileController.java
@@ -7,22 +7,15 @@ package it.inaf.ia2.transfer.controller;
 
 import it.inaf.ia2.transfer.persistence.model.FileInfo;
 import it.inaf.ia2.transfer.persistence.FileDAO;
-import it.inaf.ia2.transfer.persistence.JobDAO;
 import it.inaf.ia2.transfer.service.PutFileService;
 import it.inaf.oats.vospace.exception.InvalidArgumentException;
 import it.inaf.oats.vospace.exception.NodeNotFoundException;
 import it.inaf.oats.vospace.exception.QuotaExceededException;
-import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
-import java.nio.file.Files;
-import java.security.MessageDigest;
+import java.io.UncheckedIOException;
 import java.security.NoSuchAlgorithmException;
-import java.util.Optional;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 import javax.servlet.http.HttpServletRequest;
-import javax.xml.bind.DatatypeConverter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -84,7 +77,7 @@ public class PutFileController extends FileController {
                     if (remainingQuota != null && file != null && file.getSize() > remainingQuota) {
                         throw new QuotaExceededException("Path: " + fileInfo.getVirtualPath());
                     }
-
+                    
                     if (file != null) {
                         fileInfo.setContentType(file.getContentType());
                     }
@@ -92,8 +85,8 @@ public class PutFileController extends FileController {
 
                     try (InputStream in = file != null ? file.getInputStream() : request.getInputStream()) {
                         putFileService.storeFileFromInputStream(fileInfo, in, remainingQuota);
-                    } catch (Exception ex) {
-                        throw new RuntimeException(ex);
+                    } catch (IOException ex) {                        
+                        throw new UncheckedIOException(ex);
                     }
 
                 } finally {
diff --git a/src/main/java/it/inaf/ia2/transfer/service/PutFileService.java b/src/main/java/it/inaf/ia2/transfer/service/PutFileService.java
index 60a0782..17e0197 100644
--- a/src/main/java/it/inaf/ia2/transfer/service/PutFileService.java
+++ b/src/main/java/it/inaf/ia2/transfer/service/PutFileService.java
@@ -11,6 +11,7 @@ import it.inaf.oats.vospace.exception.QuotaExceededException;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.UncheckedIOException;
 import java.nio.file.Files;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
@@ -51,8 +52,10 @@ public class PutFileService {
         try {
             Files.copy(sourceFile.toPath(), destinationFile.toPath());
             this.finalizeFile(sourceFileInfo, destinationFileInfo, destinationFile, remainingQuota);
-        } catch (Exception e) {
+        } catch (IOException e) {
             destinationFile.delete();
+            throw new UncheckedIOException(e);
+        } catch (NoSuchAlgorithmException e) {
             throw new RuntimeException(e);
         }
     }
@@ -70,7 +73,10 @@ public class PutFileService {
         try {
             Files.copy(is, destinationFile.toPath());
             this.finalizeFile(sourceFileInfo, destinationFileInfo, destinationFile, remainingQuota);
-        } catch (Exception e) {
+        } catch (IOException e) {
+            destinationFile.delete();
+            throw new UncheckedIOException(e);
+        } catch (NoSuchAlgorithmException e) {
             destinationFile.delete();
             throw new RuntimeException(e);
         }
@@ -114,6 +120,7 @@ public class PutFileService {
 
         String md5Checksum = makeMD5Checksum(destinationFile);
 
+        // TODO: discuss if mismatches lead to taking actions
         if (sourceFileInfo != null) {
             if (!Objects.equals(sourceFileInfo.getContentLength(), fileSize)) {
                 LOG.warn("Destination file size mismatch with source");
diff --git a/src/test/java/it/inaf/ia2/transfer/controller/PutFileControllerTest.java b/src/test/java/it/inaf/ia2/transfer/controller/PutFileControllerTest.java
index 7c29b10..c3e51bd 100644
--- a/src/test/java/it/inaf/ia2/transfer/controller/PutFileControllerTest.java
+++ b/src/test/java/it/inaf/ia2/transfer/controller/PutFileControllerTest.java
@@ -94,7 +94,7 @@ public class PutFileControllerTest {
         assertEquals("content", Files.contentOf(file, StandardCharsets.UTF_8));
         assertTrue(file.delete());
     }
-
+    
     @Test
     public void putGenericFileWithNameConflictExtension() throws Exception {
         putGenericFileWithNameConflict("test.txt", "test-1.txt", "test-2.txt");
@@ -299,6 +299,7 @@ public class PutFileControllerTest {
         fileInfo.setPublic(false);
         
         when(fileDao.getFileInfo(any())).thenReturn(Optional.of(fileInfo));
+        when(fileDao.setBusy(any(), any())).thenReturn(1);
         
         return fileInfo;
     }
-- 
GitLab