Commit d9a1f20e authored by Nicola Fulvio Calabria's avatar Nicola Fulvio Calabria
Browse files

Bugfix: new syntax in JobDAO.updateJob doesn't require explicit

typecast
parent af113ab6
Loading
Loading
Loading
Loading
+12 −5
Original line number Diff line number Diff line
@@ -253,27 +253,34 @@ public class JobDAO {

    public void updateJob(JobSummary job) {

        String sql = "UPDATE job SET phase = ?, results = ? ";
        String sql = "UPDATE job SET (phase, results";
        
        ErrorSummary errorSummary = job.getErrorSummary();
        if(errorSummary != null)
        {
            sql += ", error_message = ?, error_type = ?, error_has_detail = ? ";
            sql += ", error_message, error_type, error_has_detail";
        }                
       
        sql += "WHERE job_id = ?";
        sql += ") = (?, ?";
        
        if(errorSummary != null)
        {
            sql += ", ?, ?, ?";
        }
        
        sql += ") WHERE job_id = ?";

        jdbcTemplate.update(sql, ps -> {
            int i = 0;
            ps.setObject(++i, job.getPhase().name(), Types.OTHER);
            ps.setObject(++i, toJson(job.getResults()), Types.OTHER);
            ps.setString(++i, job.getJobId());
            if(errorSummary != null)
            {
                ps.setString(++i, errorSummary.getMessage());
                ps.setObject(++i, errorSummary.getType().name(), Types.OTHER);
                ps.setObject(++i, errorSummary.getType().value(), Types.OTHER);                
                ps.setBoolean(++i, errorSummary.isHasDetail());
            }
            ps.setString(++i, job.getJobId());
        });
    }

+71 −6
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@ import org.springframework.test.context.junit.jupiter.SpringExtension;
import java.util.Optional;
import java.time.LocalDateTime;
import java.time.Month;
import net.ivoa.xml.uws.v1.ErrorSummary;
import net.ivoa.xml.uws.v1.ErrorSummaryFactory;
import net.ivoa.xml.uws.v1.Jobs;

@ExtendWith(SpringExtension.class)
@@ -35,9 +37,7 @@ public class JobDAOTest {
        dao = new JobDAO(dataSource);
    }

    @Test
    public void testJob() {

    private JobSummary getJob() {
        Transfer transfer = new Transfer();
        transfer.setDirection("pushToVoSpace");
        transfer.setTarget("vos://example.com!vospace/mynode");
@@ -50,6 +50,21 @@ public class JobDAOTest {
        jobInfo.getAny().add(transfer);
        job.setJobInfo(jobInfo);

        return job;
    }

    // don't want to override equals method just for testing without a use case
    private boolean areEqual(ErrorSummary a, ErrorSummary b) {
        return (a.getMessage().equals(b.getMessage())
                && a.getType().equals(b.getType())
                && a.isHasDetail() == b.isHasDetail());
    }

    @Test
    public void testJob() {

        JobSummary job = getJob();

        dao.createJob(job);

        assertTrue(dao.getJob("123").isPresent());
@@ -61,6 +76,56 @@ public class JobDAOTest {
        assertEquals(ExecutionPhase.EXECUTING, dao.getJob("123").get().getPhase());
    }

    @Test
    public void testCreateJobWithError() {
        JobSummary job = getJob();

        job.setPhase(ExecutionPhase.ERROR);

        // A generic picked randomly
        ErrorSummary errorSummary
                = ErrorSummaryFactory.newErrorSummary(
                        ErrorSummaryFactory.VOSpaceFault.PERMISSION_DENIED);

        job.setErrorSummary(errorSummary);

        dao.createJob(job);

        // Retrieve it back        
        Optional<JobSummary> retrievedJobOpt = dao.getJob(job.getJobId());
        assertTrue(retrievedJobOpt.isPresent());

        JobSummary retrievedJob = retrievedJobOpt.get();
        assertEquals(ExecutionPhase.ERROR, retrievedJob.getPhase());
        assertTrue(areEqual(job.getErrorSummary(), retrievedJob.getErrorSummary()));

    }

    @Test
    public void testUpdateJobWithError() {
        JobSummary job = getJob();

        dao.createJob(job);

        job.setPhase(ExecutionPhase.ERROR);
        // A generic picked randomly
        ErrorSummary errorSummary
                = ErrorSummaryFactory.newErrorSummary(
                        ErrorSummaryFactory.VOSpaceFault.PERMISSION_DENIED);

        job.setErrorSummary(errorSummary);

        dao.updateJob(job);

        // Retrieve it back        
        Optional<JobSummary> retrievedJobOpt = dao.getJob(job.getJobId());
        assertTrue(retrievedJobOpt.isPresent());

        JobSummary retrievedJob = retrievedJobOpt.get();
        assertEquals(ExecutionPhase.ERROR, retrievedJob.getPhase());
        assertTrue(areEqual(job.getErrorSummary(), retrievedJob.getErrorSummary()));
    }

    @Test
    public void testJobsList() {
        // Check no arguments
@@ -161,8 +226,8 @@ public class JobDAOTest {
        String user = "user1";
        List<ExecutionPhase> phaseList = List.of(ExecutionPhase.QUEUED,
                ExecutionPhase.PENDING);
        List<JobService.JobType> directionList =
                List.of(JobService.JobType.pullFromVoSpace,
        List<JobService.JobType> directionList
                = List.of(JobService.JobType.pullFromVoSpace,
                        JobService.JobType.pullToVoSpace);

        LocalDateTime ldt