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

Added CopyController Test

parent 7ba05398
No related branches found
No related tags found
No related merge requests found
......@@ -40,6 +40,8 @@ public class CopyController extends AuthenticatedFileController {
} else if (!jobDAO.isJobExisting(jobId)) {
throw new InvalidArgumentException("Job " + jobId + " not found");
}
LOG.debug("copyFiles called from jobId {}", jobId);
......
......@@ -5,45 +5,35 @@
*/
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 it.inaf.oats.vospace.exception.QuotaExceededException;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.util.Optional;
import java.util.UUID;
import javax.servlet.ServletInputStream;
import net.ivoa.xml.uws.v1.ExecutionPhase;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.assertj.core.util.Files;
import org.junit.jupiter.api.AfterAll;
import static org.junit.jupiter.api.Assertions.assertEquals;
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 org.mockito.Mockito;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
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.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
import org.springframework.test.web.servlet.request.MockMultipartHttpServletRequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.request.RequestPostProcessor;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put;
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;
......@@ -63,33 +53,78 @@ public class CopyControllerTest {
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 final ObjectMapper MAPPER = new ObjectMapper();
@BeforeAll
public static void setUp() {
jobId = "pippo_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);
}
@AfterAll
public static void tearDown() {
@AfterEach
public void tearDown() {
FileSystemUtils.deleteRecursively(sourceDirectory);
FileSystemUtils.deleteRecursively(destinationDirectory);
}
// TODO: complete test
@Test
public void testCopyController() 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());
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));
private FileInfo createBaseFileInfo() {
String randomFileName = UUID.randomUUID().toString();
return createBaseFileInfo(randomFileName);
}
private FileInfo createBaseFileInfo(String fileName, File directory, String vosPath) {
private FileInfo createBaseFileInfo(String fileName, File directory, String vosPath) {
FileInfo fileInfo = new FileInfo();
fileInfo.setOsPath(getTestFilePath(fileName, directory));
String virtualPath = vosPath + "/" + fileName;
fileInfo.setVirtualPath(vosPath + "/" + fileName);
fileInfo.setVirtualPath(vosPath);
fileInfo.setPublic(false);
return fileInfo;
}
......@@ -97,4 +132,29 @@ public class CopyControllerTest {
return directory.toPath().resolve("subdir").resolve(fileName).toFile().getAbsolutePath();
}
private CopyRequest getCopyRequest(String jobId,
String sourceRootVosPath, String destinationRootVosPath) {
CopyRequest result = new CopyRequest();
result.setJobId(jobId);
result.setSourceRootVosPath(sourceRootVosPath);
result.setDestinationRootVosPath(destinationRootVosPath);
return result;
}
private TokenPrincipal fakePrincipal(String name) {
TokenPrincipal principal = mock(TokenPrincipal.class);
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;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment