Skip to content
Snippets Groups Projects
Commit 58cbbcc1 authored by Sonia Zorba's avatar Sonia Zorba
Browse files

PutFileController getEmptyFile() bugfix

parent f6c3963e
No related branches found
No related tags found
No related merge requests found
Pipeline #1622 passed
......@@ -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;
......
......@@ -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() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment