diff --git a/src/main/java/it/inaf/oats/vospace/JobService.java b/src/main/java/it/inaf/oats/vospace/JobService.java index 938fbee1462b45ddde14206af8663321d47eea69..852b05fb1dc58529a3f1874b9ca792eb88392cab 100644 --- a/src/main/java/it/inaf/oats/vospace/JobService.java +++ b/src/main/java/it/inaf/oats/vospace/JobService.java @@ -203,7 +203,7 @@ public class JobService { List<String> sourceAndDestination = copyService.processCopyNodes(transfer, jobId, user); // Call file service and command copy try{ - fileServiceClient.startFileCopyJob(sourceAndDestination.get(0), sourceAndDestination.get(1), jobId, user); + fileServiceClient.startFileCopyJob(sourceAndDestination.get(0), sourceAndDestination.get(1), jobId, user); } catch (Exception e) { // We decided not to purge metadata in case of failure // just release busy nodes setting job_id = null diff --git a/src/test/java/it/inaf/oats/vospace/JobServiceTest.java b/src/test/java/it/inaf/oats/vospace/JobServiceTest.java index ee017edcda9962af8959c83a3774a482027113a5..7c824f3d789bce4c80b00c008e8a6befd2388b94 100644 --- a/src/test/java/it/inaf/oats/vospace/JobServiceTest.java +++ b/src/test/java/it/inaf/oats/vospace/JobServiceTest.java @@ -55,6 +55,12 @@ public class JobServiceTest { @Mock private MoveService moveService; + + @Mock + private CopyService copyService; + + @Mock + private FileServiceClient fileServiceClient; @InjectMocks private JobService jobService; @@ -217,6 +223,43 @@ public class JobServiceTest { assertEquals(ExecutionPhase.COMPLETED, phases.get(2)); } + @Test + public void testStartJobCopyNode() { + + Transfer copyNode = new Transfer(); + copyNode.setDirection("vos://example.com!vospace/myfile"); + copyNode.setKeepBytes(true); + + JobSummary job = new JobSummary(); + setJobInfo(job, copyNode); + + when(uriService.getTransfer(any())).thenReturn(copyNode); + + List<ExecutionPhase> phases = new ArrayList<>(); + doAnswer(invocation -> { + JobSummary j = invocation.getArgument(0); + phases.add(j.getPhase()); + return null; + }).when(jobDAO).updateJob(any(), any()); + + when(copyService.processCopyNodes(any(), any(), any())).thenReturn(List.of("source", "dest")); + + jobService.setJobPhase(job, "RUN"); + + verify(fileServiceClient, timeout(1000).times(1)).startFileCopyJob(eq("source"), eq("dest"), any(), any()); + + verify(jobDAO, timeout(1000).times(3)).updateJob(any(), any()); + + try { + Thread.sleep(500); + } catch (InterruptedException ex) { + } + + assertEquals(ExecutionPhase.EXECUTING, phases.get(0)); + assertEquals(ExecutionPhase.EXECUTING, phases.get(1)); + assertEquals(ExecutionPhase.EXECUTING, phases.get(2)); + } + private Transfer getPullFromVoSpaceHttpTransfer() { Transfer transfer = new Transfer(); transfer.setTarget("vos://example.com!vospace/myfile");