From 3d890fb3c109f05b506c67962654df6fce3005e9 Mon Sep 17 00:00:00 2001 From: Nicola Fulvio Calabria <nicola.calabria@inaf.it> Date: Mon, 9 Aug 2021 11:50:59 +0200 Subject: [PATCH] Finished CopyController Test --- .../controller/CopyControllerTest.java | 102 +++---------- .../ia2/transfer/service/CopyServiceTest.java | 140 ++++++++++++++++++ 2 files changed, 163 insertions(+), 79 deletions(-) create mode 100644 src/test/java/it/inaf/ia2/transfer/service/CopyServiceTest.java diff --git a/src/test/java/it/inaf/ia2/transfer/controller/CopyControllerTest.java b/src/test/java/it/inaf/ia2/transfer/controller/CopyControllerTest.java index a9d606e..c084b25 100644 --- a/src/test/java/it/inaf/ia2/transfer/controller/CopyControllerTest.java +++ b/src/test/java/it/inaf/ia2/transfer/controller/CopyControllerTest.java @@ -7,23 +7,11 @@ package it.inaf.ia2.transfer.controller; import com.fasterxml.jackson.databind.ObjectMapper; import it.inaf.ia2.transfer.auth.TokenPrincipal; -import it.inaf.ia2.transfer.persistence.model.FileInfo; -import it.inaf.ia2.transfer.persistence.FileDAO; import it.inaf.ia2.transfer.persistence.JobDAO; -import java.io.File; -import java.util.List; -import org.apache.commons.io.FileUtils; -import org.assertj.core.util.Files; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.AfterEach; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import it.inaf.ia2.transfer.service.FileCopyService; import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import org.springframework.beans.factory.annotation.Autowired; @@ -32,28 +20,24 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -import org.springframework.util.FileSystemUtils; + @SpringBootTest -@AutoConfigureMockMvc +@AutoConfigureMockMvc(addFilters = false) public class CopyControllerTest { @MockBean - private FileDAO fileDao; - - @MockBean - private JobDAO jobDAO; + private JobDAO jobDao; @Autowired private MockMvc mockMvc; - private static File sourceDirectory; - private static File destinationDirectory; - private static File sourceFile; + @MockBean + private FileCopyService fileCopyService; + private static String jobId; private static String sourceVosRootPath; private static String destVosRootPath; @@ -68,68 +52,38 @@ public class CopyControllerTest { sourceVosRootPath = "/source/" + filename; destVosRootPath = "/destination/" + filename; } - - @BeforeEach - public void setUpPerTest() throws Exception { - sourceDirectory = Files.newTemporaryFolder(); - destinationDirectory = Files.newTemporaryFolder(); - sourceFile = this.createFile(sourceDirectory, filename); - } - @AfterEach - public void tearDown() { - FileSystemUtils.deleteRecursively(sourceDirectory); - FileSystemUtils.deleteRecursively(destinationDirectory); - } - - // TODO: complete test @Test - public void testCopyController() throws Exception { + public void testCopyControllerNoJobMatching() throws Exception { CopyRequest copyRequest = this.getCopyRequest(jobId, sourceVosRootPath, destVosRootPath); + + when(jobDao.isJobExisting(eq(jobId))).thenReturn(false); - when(fileDao.getBranchFileInfos(eq(sourceVosRootPath), eq(jobId))) - .thenReturn( - List.of(this.createBaseFileInfo( - filename, sourceDirectory, sourceVosRootPath))); - - when(fileDao.getBranchFileInfos(eq(destVosRootPath), eq(jobId))) - .thenReturn( - List.of(this.createBaseFileInfo( - filename, destinationDirectory, destVosRootPath))); - - when(fileDao.getRemainingQuota(any())).thenReturn(null); - - assertTrue(sourceFile.exists()); - File destinationFile = destinationDirectory.toPath().resolve(filename).toFile(); - assertFalse(destinationFile.exists()); - mockMvc.perform(post("/copy") .principal(fakePrincipal("user_copy")) .contentType(MediaType.APPLICATION_JSON) .content(MAPPER.writeValueAsString(copyRequest))) .andDo(print()) - .andExpect(status().isOk()); - - assertTrue(sourceFile.exists()); - assertTrue(destinationFile.exists()); - - assertTrue(FileUtils.contentEquals(sourceFile, destinationFile)); + .andExpect(status().is4xxClientError()); } + + @Test + public void testCopyControllerAnonymousForbidden() throws Exception { - private FileInfo createBaseFileInfo(String fileName, File directory, String vosPath) { - FileInfo fileInfo = new FileInfo(); - fileInfo.setOsPath(getTestFilePath(fileName, directory)); - fileInfo.setVirtualPath(vosPath); - fileInfo.setPublic(false); + CopyRequest copyRequest = this.getCopyRequest(jobId, + sourceVosRootPath, destVosRootPath); - return fileInfo; - } + when(jobDao.isJobExisting(eq(jobId))).thenReturn(true); - private String getTestFilePath(String fileName, File directory) { - return directory.toPath().resolve("subdir").resolve(fileName).toFile().getAbsolutePath(); + mockMvc.perform(post("/copy") + .principal(fakePrincipal("anonymous")) + .contentType(MediaType.APPLICATION_JSON) + .content(MAPPER.writeValueAsString(copyRequest))) + .andDo(print()) + .andExpect(status().is4xxClientError()); } private CopyRequest getCopyRequest(String jobId, @@ -146,15 +100,5 @@ public class CopyControllerTest { when(principal.getName()).thenReturn(name); return principal; } - - private File createFile(File parent, String filename) throws Exception { - parent.mkdir(); - - File file = parent.toPath().resolve(filename).toFile(); - file.createNewFile(); - java.nio.file.Files.write(file.toPath(), "content_of_file".getBytes()); - - return file; - } } diff --git a/src/test/java/it/inaf/ia2/transfer/service/CopyServiceTest.java b/src/test/java/it/inaf/ia2/transfer/service/CopyServiceTest.java new file mode 100644 index 0000000..5c1c1c3 --- /dev/null +++ b/src/test/java/it/inaf/ia2/transfer/service/CopyServiceTest.java @@ -0,0 +1,140 @@ +/* + * This file is part of vospace-file-service + * Copyright (C) 2021 Istituto Nazionale di Astrofisica + * SPDX-License-Identifier: GPL-3.0-or-later + */ +package it.inaf.ia2.transfer.service; + +import it.inaf.ia2.transfer.auth.TokenPrincipal; +import it.inaf.ia2.transfer.persistence.model.FileInfo; +import it.inaf.ia2.transfer.persistence.FileDAO; +import it.inaf.ia2.transfer.persistence.JobDAO; +import java.io.File; +import java.util.List; +import org.apache.commons.io.FileUtils; +import org.assertj.core.util.Files; +import org.junit.jupiter.api.AfterEach; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.util.FileSystemUtils; + +@SpringBootTest +@AutoConfigureMockMvc(addFilters = false) +public class CopyServiceTest { + + @MockBean + private FileDAO fileDao; + + @MockBean + private JobDAO jobDao; + + @Autowired + private MockMvc mockMvc; + + @Autowired + private FileCopyService fileCopyService; + + private static File sourceDirectory; + private static File destinationDirectory; + private static File sourceFile; + private static String jobId; + private static String sourceVosRootPath; + private static String destVosRootPath; + private static String filename; + private static String userId; + + @BeforeAll + public static void setUp() { + jobId = "pippo_copy"; + userId = "user_copy"; + + filename = "file.txt"; + sourceVosRootPath = "/source/" + filename; + destVosRootPath = "/destination/" + filename; + } + + @BeforeEach + public void setUpPerTest() throws Exception { + sourceDirectory = Files.newTemporaryFolder(); + destinationDirectory = Files.newTemporaryFolder(); + sourceFile = this.createFile(sourceDirectory, filename); + } + + @AfterEach + public void tearDown() { + FileSystemUtils.deleteRecursively(sourceDirectory); + FileSystemUtils.deleteRecursively(destinationDirectory); + } + + @Test + public void testCopyService() throws Exception { + + when(fileDao.getBranchFileInfos(eq(sourceVosRootPath), eq(jobId))) + .thenReturn( + List.of(this.createBaseFileInfo( + filename, sourceDirectory, sourceVosRootPath))); + + when(fileDao.getBranchFileInfos(eq(destVosRootPath), eq(jobId))) + .thenReturn( + List.of(this.createBaseFileInfo( + filename, destinationDirectory, destVosRootPath))); + + when(fileDao.getRemainingQuota(any())).thenReturn(null); + + assertTrue(sourceFile.exists()); + File destinationFile = destinationDirectory.toPath().resolve(filename).toFile(); + assertFalse(destinationFile.exists()); + + fileCopyService.copyFiles( + sourceVosRootPath, destVosRootPath, jobId, fakePrincipal(userId)); + + assertTrue(sourceFile.exists()); + assertTrue(destinationFile.exists()); + + assertTrue(FileUtils.contentEquals(sourceFile, destinationFile)); + + } + + private FileInfo createBaseFileInfo(String fileName, File directory, String vosPath) { + FileInfo fileInfo = new FileInfo(); + fileInfo.setOsPath(getTestFilePath(fileName, directory)); + fileInfo.setVirtualPath(vosPath); + fileInfo.setPublic(false); + fileInfo.setOwnerId("user_copy"); + + return fileInfo; + } + + private String getTestFilePath(String fileName, File directory) { + return directory.toPath().resolve("subdir").resolve(fileName).toFile().getAbsolutePath(); + } + + private File createFile(File parent, String filename) throws Exception { + parent.mkdir(); + + File file = parent.toPath().resolve(filename).toFile(); + file.createNewFile(); + java.nio.file.Files.write(file.toPath(), "content_of_file".getBytes()); + + return file; + } + + private TokenPrincipal fakePrincipal(String name) { + TokenPrincipal principal = mock(TokenPrincipal.class); + when(principal.getName()).thenReturn(name); + return principal; + } + +} -- GitLab