diff --git a/src/main/java/it/inaf/oats/vospace/FileServiceClient.java b/src/main/java/it/inaf/oats/vospace/FileServiceClient.java index d7f085a41f783e656cd268916bc3656efb7ceaff..ed3bf416d82480def75d3663a7bd2ffbbb1e7af3 100644 --- a/src/main/java/it/inaf/oats/vospace/FileServiceClient.java +++ b/src/main/java/it/inaf/oats/vospace/FileServiceClient.java @@ -45,7 +45,8 @@ public class FileServiceClient { throw new IllegalArgumentException("Target size is " + transfer.getTarget().size()); } - String target = transfer.getTarget().get(0); + String target = transfer.getTarget().get(0) + .substring("vos://".length() + authority.length()); String viewUri = transfer.getView().getUri(); @@ -65,7 +66,7 @@ public class FileServiceClient { if (vosPaths.isEmpty()) { // Add target path - vosPaths.add(target.substring("vos://".length() + authority.length())); + vosPaths.add(target); } ArchiveRequest archiveRequest = new ArchiveRequest(); @@ -91,7 +92,7 @@ public class FileServiceClient { }, new Object[]{}); } - private static class ArchiveRequest { + public static class ArchiveRequest { private String type; private String jobId; diff --git a/src/test/java/it/inaf/oats/vospace/FileServiceClientTest.java b/src/test/java/it/inaf/oats/vospace/FileServiceClientTest.java index ae6af0ad77dd6a8d47fd9a91c6ff6ceb231a7ef9..c5c10183d1c2ca8ae6c90a4b0ca6199cf65da559 100644 --- a/src/test/java/it/inaf/oats/vospace/FileServiceClientTest.java +++ b/src/test/java/it/inaf/oats/vospace/FileServiceClientTest.java @@ -5,10 +5,14 @@ */ package it.inaf.oats.vospace; +import com.fasterxml.jackson.databind.ObjectMapper; import it.inaf.ia2.aa.data.User; +import it.inaf.oats.vospace.FileServiceClient.ArchiveRequest; import it.inaf.oats.vospace.datamodel.Views; import it.inaf.oats.vospace.exception.InvalidArgumentException; import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.UncheckedIOException; import java.net.URI; import java.util.Arrays; import javax.servlet.http.HttpServletRequest; @@ -44,6 +48,8 @@ import org.springframework.web.client.RestTemplate; @MockitoSettings(strictness = Strictness.LENIENT) public class FileServiceClientTest { + private static final ObjectMapper MAPPER = new ObjectMapper(); + @Mock private RestTemplate restTemplate; @@ -88,7 +94,10 @@ public class FileServiceClientTest { view.setUri(Views.ZIP_VIEW_URI); transfer.setView(view); - testStartArchiveJob(transfer); + ArchiveRequest archiveRequest = testStartArchiveJob(transfer); + + assertEquals(1, archiveRequest.getPaths().size()); + assertEquals("/mydir", archiveRequest.getPaths().get(0)); } @Test @@ -146,20 +155,26 @@ public class FileServiceClientTest { param2.setValue("file2"); view.getParam().add(param2); - testStartArchiveJob(transfer); + ArchiveRequest archiveRequest = testStartArchiveJob(transfer); + + assertEquals(2, archiveRequest.getPaths().size()); + assertEquals("/parent_dir/file1", archiveRequest.getPaths().get(0)); + assertEquals("/parent_dir/file2", archiveRequest.getPaths().get(1)); } - private void testStartArchiveJob(Transfer transfer) { + private ArchiveRequest testStartArchiveJob(Transfer transfer) { User user = mock(User.class); when(user.getAccessToken()).thenReturn("<token>"); when(request.getUserPrincipal()).thenReturn(user); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + doAnswer(invocation -> { RequestCallback requestCallback = invocation.getArgument(2); ClientHttpRequest mockedRequest = mock(ClientHttpRequest.class); HttpHeaders mockedRequestHeaders = mock(HttpHeaders.class); - when(mockedRequest.getBody()).thenReturn(new ByteArrayOutputStream()); + when(mockedRequest.getBody()).thenReturn(baos); when(mockedRequest.getHeaders()).thenReturn(mockedRequestHeaders); requestCallback.doWithRequest(mockedRequest); @@ -176,5 +191,11 @@ public class FileServiceClientTest { String redirect = fileServiceClient.startArchiveJob(transfer, "job123"); assertEquals("http://file-service/archive/result", redirect); + + try { + return MAPPER.readValue(baos.toByteArray(), ArchiveRequest.class); + } catch (IOException ex) { + throw new UncheckedIOException(ex); + } } }