org.geoserver.taskmanager.schedule.BatchJobServiceTest.java Source code

Java tutorial

Introduction

Here is the source code for org.geoserver.taskmanager.schedule.BatchJobServiceTest.java

Source

/* (c) 2017-2018 Open Source Geospatial Foundation - all rights reserved
 * This code is licensed under the GPL 2.0 license, available at the root
 * application directory.
 */
package org.geoserver.taskmanager.schedule;

import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertEquals;
import java.util.Date;
import java.util.Calendar;

import org.apache.commons.lang.time.DateUtils;
import org.geoserver.taskmanager.AbstractTaskManagerTest;
import org.geoserver.taskmanager.beans.TestTaskTypeImpl;
import org.geoserver.taskmanager.data.Batch;
import org.geoserver.taskmanager.data.Configuration;
import org.geoserver.taskmanager.data.Task;
import org.geoserver.taskmanager.data.TaskManagerDao;
import org.geoserver.taskmanager.data.TaskManagerFactory;
import org.geoserver.taskmanager.schedule.BatchJobService;
import org.geoserver.taskmanager.util.TaskManagerDataUtil;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.TriggerKey;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * Tests the batch job service.
 * 
 * @author Niels Charlier
 *
 */
public class BatchJobServiceTest extends AbstractTaskManagerTest {

    @Autowired
    private TaskManagerDao dao;

    @Autowired
    private TaskManagerFactory fac;

    @Autowired
    private TaskManagerDataUtil util;

    @Autowired
    private BatchJobService bjService;

    @Autowired
    private Scheduler scheduler;

    private Configuration config;

    private Batch batch;

    @Before
    public void setupBatch() {
        config = fac.createConfiguration();
        config.setName("my_config");
        config.setWorkspace("some_ws");

        Task task1 = fac.createTask();
        task1.setName("task1");
        task1.setType(TestTaskTypeImpl.NAME);
        util.addTaskToConfiguration(config, task1);

        config = dao.save(config);
        task1 = config.getTasks().get("task1");

        batch = fac.createBatch();

        batch.setName("my_batch");
        util.addBatchElement(batch, task1);

        batch = bjService.saveAndSchedule(batch);
    }

    @After
    public void clearDataFromDatabase() {
        dao.delete(batch);
        dao.delete(config);
    }

    @Test
    public void testBatchJobService() throws SchedulerException {
        JobKey jobKey = new JobKey(batch.getFullName());
        TriggerKey triggerKey = new TriggerKey(batch.getFullName());

        //not scheduled yet        
        assertTrue(scheduler.checkExists(jobKey));
        assertFalse(scheduler.checkExists(triggerKey));

        //give it a frequency
        batch.setFrequency("0 0 * * * ?");
        batch.setEnabled(true);
        bjService.saveAndSchedule(batch);

        assertTrue(scheduler.checkExists(jobKey));
        assertTrue(scheduler.checkExists(triggerKey));
        Trigger trigger = scheduler.getTrigger(triggerKey);
        Date nextFireTime = DateUtils.ceiling(new Date(), Calendar.HOUR);
        assertEquals(nextFireTime, trigger.getNextFireTime());

        //change the frequency
        batch.setFrequency("0 30 * * * ?");
        bjService.saveAndSchedule(batch);

        assertTrue(scheduler.checkExists(jobKey));
        assertTrue(scheduler.checkExists(triggerKey));
        trigger = scheduler.getTrigger(triggerKey);
        nextFireTime = DateUtils.addMinutes(DateUtils.round(new Date(), Calendar.HOUR), 30);
        assertEquals(nextFireTime, trigger.getNextFireTime());

        //de-activate it
        batch.setEnabled(false);
        bjService.saveAndSchedule(batch);

        assertTrue(scheduler.checkExists(jobKey));
        assertFalse(scheduler.checkExists(triggerKey));

        //delete it
        batch.setActive(false);
        bjService.saveAndSchedule(batch);

        assertFalse(scheduler.checkExists(jobKey));
        assertFalse(scheduler.checkExists(triggerKey));
    }

}