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
...@@ -41,6 +41,8 @@ public class CopyController extends AuthenticatedFileController { ...@@ -41,6 +41,8 @@ public class CopyController extends AuthenticatedFileController {
throw new InvalidArgumentException("Job " + jobId + " not found"); throw new InvalidArgumentException("Job " + jobId + " not found");
} }
LOG.debug("copyFiles called from jobId {}", jobId); LOG.debug("copyFiles called from jobId {}", jobId);
TokenPrincipal principal = getPrincipal(); TokenPrincipal principal = getPrincipal();
......
...@@ -5,45 +5,35 @@ ...@@ -5,45 +5,35 @@
*/ */
package it.inaf.ia2.transfer.controller; 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.model.FileInfo;
import it.inaf.ia2.transfer.persistence.FileDAO; import it.inaf.ia2.transfer.persistence.FileDAO;
import it.inaf.ia2.transfer.persistence.JobDAO; 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.File;
import java.io.IOException; import java.util.List;
import java.nio.charset.StandardCharsets; import org.apache.commons.io.FileUtils;
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 org.assertj.core.util.Files; import org.assertj.core.util.Files;
import org.junit.jupiter.api.AfterAll; 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 static org.junit.jupiter.api.Assertions.assertTrue;
import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq; 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.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 static org.mockito.Mockito.when;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.http.MediaType;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import org.springframework.test.web.servlet.request.MockMultipartHttpServletRequestBuilder; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
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.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import org.springframework.util.FileSystemUtils; import org.springframework.util.FileSystemUtils;
...@@ -63,31 +53,76 @@ public class CopyControllerTest { ...@@ -63,31 +53,76 @@ public class CopyControllerTest {
private static File sourceDirectory; private static File sourceDirectory;
private static File destinationDirectory; 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 @BeforeAll
public static void setUp() { 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(); sourceDirectory = Files.newTemporaryFolder();
destinationDirectory = Files.newTemporaryFolder(); destinationDirectory = Files.newTemporaryFolder();
sourceFile = this.createFile(sourceDirectory, filename);
} }
@AfterAll @AfterEach
public static void tearDown() { public void tearDown() {
FileSystemUtils.deleteRecursively(sourceDirectory); FileSystemUtils.deleteRecursively(sourceDirectory);
FileSystemUtils.deleteRecursively(destinationDirectory); FileSystemUtils.deleteRecursively(destinationDirectory);
} }
// TODO: complete test // 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 fileInfo = new FileInfo();
fileInfo.setOsPath(getTestFilePath(fileName, directory)); fileInfo.setOsPath(getTestFilePath(fileName, directory));
String virtualPath = vosPath + "/" + fileName; fileInfo.setVirtualPath(vosPath);
fileInfo.setVirtualPath(vosPath + "/" + fileName);
fileInfo.setPublic(false); fileInfo.setPublic(false);
return fileInfo; return fileInfo;
...@@ -97,4 +132,29 @@ public class CopyControllerTest { ...@@ -97,4 +132,29 @@ public class CopyControllerTest {
return directory.toPath().resolve("subdir").resolve(fileName).toFile().getAbsolutePath(); 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.
Please register or to comment