Skip to content
Snippets Groups Projects
Commit 3d890fb3 authored by Nicola Fulvio Calabria's avatar Nicola Fulvio Calabria
Browse files

Finished CopyController Test

parent 5944963e
No related branches found
No related tags found
No related merge requests found
......@@ -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;
......@@ -69,67 +53,37 @@ public class CopyControllerTest {
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(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());
when(jobDao.isJobExisting(eq(jobId))).thenReturn(false);
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());
}
private FileInfo createBaseFileInfo(String fileName, File directory, String vosPath) {
FileInfo fileInfo = new FileInfo();
fileInfo.setOsPath(getTestFilePath(fileName, directory));
fileInfo.setVirtualPath(vosPath);
fileInfo.setPublic(false);
@Test
public void testCopyControllerAnonymousForbidden() throws Exception {
return fileInfo;
}
CopyRequest copyRequest = this.getCopyRequest(jobId,
sourceVosRootPath, destVosRootPath);
private String getTestFilePath(String fileName, File directory) {
return directory.toPath().resolve("subdir").resolve(fileName).toFile().getAbsolutePath();
when(jobDao.isJobExisting(eq(jobId))).thenReturn(true);
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,
......@@ -147,14 +101,4 @@ public class CopyControllerTest {
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;
}
}
/*
* 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;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment