Commit 58cbbcc1 authored by Sonia Zorba's avatar Sonia Zorba
Browse files

PutFileController getEmptyFile() bugfix

parent f6c3963e
Loading
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -14,6 +14,8 @@ import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.http.HttpServletRequest;
import javax.xml.bind.DatatypeConverter;
import net.ivoa.xml.uws.v1.ExecutionPhase;
@@ -176,6 +178,14 @@ public class PutFileController extends FileController {
                nameWithoutExtension = fileName;
            }

            Pattern pattern = Pattern.compile("(.*?)-(\\d+)");
            Matcher matcher = pattern.matcher(nameWithoutExtension);
            if (matcher.matches()) {
                nameWithoutExtension = matcher.group(1);
                int fileIndex = Integer.parseInt(matcher.group(2));
                index = fileIndex + 1;
            }

            String newName = nameWithoutExtension + "-" + index;
            if (extension != null) {
                newName += "." + extension;
+64 −25
Original line number Diff line number Diff line
@@ -11,8 +11,10 @@ import java.util.Optional;
import java.util.UUID;
import net.ivoa.xml.uws.v1.ExecutionPhase;
import org.assertj.core.util.Files;
import org.junit.jupiter.api.AfterAll;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
@@ -32,6 +34,7 @@ import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.request.RequestPostProcessor;
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
@@ -49,6 +52,18 @@ public class PutFileControllerTest {
    @Autowired
    private MockMvc mockMvc;

    private static File temporaryDirectory;

    @BeforeAll
    public static void setUp() {
        temporaryDirectory = Files.newTemporaryFolder();
    }

    @AfterAll
    public static void tearDown() {
        FileSystemUtils.deleteRecursively(temporaryDirectory);
    }

    @Test
    public void putGenericFile() throws Exception {

@@ -62,7 +77,7 @@ public class PutFileControllerTest {
                .andDo(print())
                .andExpect(status().isOk());

        File file = Path.of("/tmp", randomFileName).toFile();
        File file = Path.of(getTestFilePath(randomFileName)).toFile();

        assertTrue(file.exists());
        assertEquals("content", Files.contentOf(file, StandardCharsets.UTF_8));
@@ -70,10 +85,18 @@ public class PutFileControllerTest {
    }

    @Test
    public void putGenericFileWithNameConflict() throws Exception {
    public void putGenericFileWithNameConflictExtension() throws Exception {
        putGenericFileWithNameConflict("test.txt", "test-1.txt", "test-2.txt");
    }

        String fileName = "pippoFile";
        createBaseFileInfo(fileName);
    @Test
    public void putGenericFileWithNameConflictNoExtension() throws Exception {
        putGenericFileWithNameConflict("test", "test-1", "test-2");
    }

    public void putGenericFileWithNameConflict(String name1, String name2, String name3) throws Exception {

        createBaseFileInfo(name1);

        MockMultipartFile fakeFile = new MockMultipartFile("file", "test.txt", "text/plain", "content".getBytes());

@@ -82,7 +105,7 @@ public class PutFileControllerTest {
                .andDo(print())
                .andExpect(status().isOk());

        File file = Path.of("/tmp", fileName).toFile();
        File file = Path.of(getTestFilePath(name1)).toFile();

        assertTrue(file.exists());
        assertEquals("content", Files.contentOf(file, StandardCharsets.UTF_8));
@@ -94,14 +117,26 @@ public class PutFileControllerTest {
                .andDo(print())
                .andExpect(status().isOk());

        File file2 = Path.of("/tmp", fileName+"-1").toFile();
        assertTrue(file.exists());
        File file2 = Path.of(getTestFilePath(name2)).toFile();
        assertTrue(file2.exists());
        assertEquals("content2", Files.contentOf(file2, StandardCharsets.UTF_8));

        MockMultipartFile fakeFile3 = new MockMultipartFile("file", "test.txt", "text/plain", "content3".getBytes());

        mockMvc.perform(putMultipart("/path/to/test.txt")
                .file(fakeFile3))
                .andDo(print())
                .andExpect(status().isOk());

        File file3 = Path.of(getTestFilePath(name3)).toFile();
        assertTrue(file3.exists());
        assertEquals("content3", Files.contentOf(file3, StandardCharsets.UTF_8));

        assertTrue(file.delete());
        assertTrue(file2.delete());
        assertTrue(file3.delete());
    }


    @Test
    public void putGenericFileWithJobId() throws Exception {

@@ -130,7 +165,7 @@ public class PutFileControllerTest {
        verify(jobDAO, times(1)).isJobExisting(eq("pippo5"));
        verify(jobDAO, times(1)).updateJobPhase(eq(ExecutionPhase.COMPLETED), any());

        File file = Path.of("/tmp", randomFileName).toFile();
        File file = Path.of(getTestFilePath(randomFileName)).toFile();

        assertTrue(file.exists());
        assertEquals("content", Files.contentOf(file, StandardCharsets.UTF_8));
@@ -158,7 +193,7 @@ public class PutFileControllerTest {

    private FileInfo createBaseFileInfo(String fileName) {
        FileInfo fileInfo = new FileInfo();
        fileInfo.setOsPath("/tmp/" + fileName);
        fileInfo.setOsPath(getTestFilePath(fileName));
        fileInfo.setIsPublic(false);

        when(fileDao.getFileInfo(any())).thenReturn(Optional.of(fileInfo));
@@ -166,6 +201,10 @@ public class PutFileControllerTest {
        return fileInfo;
    }

    private String getTestFilePath(String fileName) {
        return temporaryDirectory.toPath().resolve(fileName).toFile().getAbsolutePath();
    }

    private MockMultipartHttpServletRequestBuilder putMultipart(String uri) {
        MockMultipartHttpServletRequestBuilder builder = MockMvcRequestBuilders.multipart(uri);
        builder.with(new RequestPostProcessor() {