Commit 3d890fb3 authored by Nicola Fulvio Calabria's avatar Nicola Fulvio Calabria
Browse files

Finished CopyController Test

parent 5944963e
Loading
Loading
Loading
Loading
+23 −79
Original line number Diff line number Diff line
@@ -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;
    }

}
+140 −0
Original line number Diff line number Diff line
/*
 * 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;
    }

}