Loading src/main/java/it/inaf/ia2/transfer/controller/PutFileController.java +10 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading src/test/java/it/inaf/ia2/transfer/controller/PutFileControllerTest.java +64 −25 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading @@ -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 { Loading @@ -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)); Loading @@ -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()); Loading @@ -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)); Loading @@ -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 { Loading Loading @@ -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)); Loading Loading @@ -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)); Loading @@ -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() { Loading Loading
src/main/java/it/inaf/ia2/transfer/controller/PutFileController.java +10 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading
src/test/java/it/inaf/ia2/transfer/controller/PutFileControllerTest.java +64 −25 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading @@ -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 { Loading @@ -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)); Loading @@ -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()); Loading @@ -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)); Loading @@ -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 { Loading Loading @@ -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)); Loading Loading @@ -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)); Loading @@ -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() { Loading