Skip to content
AsyncTransferServiceTest.java 3.85 KiB
Newer Older
/*
 * This file is part of vospace-rest
 * Copyright (C) 2021 Istituto Nazionale di Astrofisica
 * SPDX-License-Identifier: GPL-3.0-or-later
 */
package it.inaf.oats.vospace;

import java.util.Arrays;
import java.util.List;
import net.ivoa.xml.uws.v1.JobSummary;
import net.ivoa.xml.vospace.v2.Transfer;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.fail;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import org.mockito.MockedConstruction;
import org.mockito.Mockito;
import static org.mockito.Mockito.doAnswer;
import org.mockito.junit.jupiter.MockitoExtension;
import redis.clients.jedis.Jedis;

@ExtendWith(MockitoExtension.class)
public class AsyncTransferServiceTest {

    private static final String JSON_JOB = "{\"jobId\":\"job_id\",\"runId\":null,\"ownerId\":null,\"phase\":null,\"quote\":null,\"creationTime\":null,\"startTime\":null,\"endTime\":null,\"executionDuration\":0,\"destruction\":null,\"parameters\":null,\"results\":[],\"errorSummary\":null,\"jobInfo\":{\"transfer\":{\"target\":[\"vos://example.com!vospace/my-node\"],\"direction\":\"pullToVoSpace\",\"view\":{\"param\":[{\"value\":\"file1.txt\",\"uri\":\"ivo://ia2.inaf.it/vospace/views#async-recall/include\"},{\"value\":\"file2.txt\",\"uri\":\"ivo://ia2.inaf.it/vospace/views#async-recall/include\"}],\"uri\":\"ivo://ia2.inaf.it/vospace/views#async-recall\",\"original\":true},\"protocols\":[],\"keepBytes\":false,\"version\":null,\"param\":[]}},\"version\":null}";

    @Test
    public void testRedisRpc() {
        try (MockedConstruction<Jedis> staticMock = Mockito.mockConstruction(Jedis.class,
                (mockedJedis, context) -> {
                    doAnswer(invocation -> {
                        String requestId = invocation.getArgument(1);
                        List<String> result = new ArrayList<>();
                        result.add(requestId);
                        result.add(JSON_JOB);
                        return result;
                    }).when(mockedJedis).brpop(anyInt(), anyString());
                })) {
            AsyncTransferService asyncTransferService = new AsyncTransferService("localhost", 6379);
            JobSummary result = asyncTransferService.startJob(getFakeJob());
            assertEquals("job_id", result.getJobId());
        }
    }

    @Test
    public void testRedisError() {
        try (MockedConstruction<Jedis> staticMock = Mockito.mockConstruction(Jedis.class)) {
            AsyncTransferService asyncTransferService = new AsyncTransferService("localhost", 6379);
            try {
                asyncTransferService.startJob(getFakeJob());
                fail();
    private JobSummary getFakeJob() {
        Transfer transfer = new Transfer();
        transfer.setDirection("pullToVoSpace");
        transfer.setTarget(Arrays.asList("vos://example.com!vospace/my-node"));
        View view = new View();
        view.setUri(Views.ASYNC_RECALL_VIEW_URI);

        Param p1 = new Param();
        p1.setUri(Views.ASYNC_RECALL_VIEW_URI + "/include");
        p1.setValue("file1.txt");
        view.getParam().add(p1);

        Param p2 = new Param();
        p2.setUri(Views.ASYNC_RECALL_VIEW_URI + "/include");
        p2.setValue("file2.txt");
        view.getParam().add(p2);

        transfer.setView(view);

        JobSummary job = new JobSummary();
        job.setJobId("job_id");

        JobSummary.JobInfo jobInfo = new JobSummary.JobInfo();
        jobInfo.getAny().add(transfer);

        job.setJobInfo(jobInfo);

        return job;
    }
}