package com.breakersoft.plow.test.service;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import javax.annotation.Resource;
import org.junit.Before;
import org.junit.Test;
import com.breakersoft.plow.Task;
import com.breakersoft.plow.dao.TaskDao;
import com.breakersoft.plow.event.EventManager;
import com.breakersoft.plow.event.EventManagerImpl;
import com.breakersoft.plow.event.JobLaunchEvent;
import com.breakersoft.plow.service.StateManager;
import com.breakersoft.plow.test.AbstractTest;
import com.breakersoft.plow.thrift.TaskFilterT;
import com.breakersoft.plow.thrift.TaskState;
import com.google.common.eventbus.Subscribe;
public class StateManagerTests extends AbstractTest {
@Resource
StateManager stateManager;
@Resource
EventManager eventManager;
@Resource
TaskDao taskDao;
private boolean jobShutdownEventHandled;
@Before
public void reset() {
((EventManagerImpl) eventManager).setEnabled(true);
eventManager.register(this);
jobShutdownEventHandled = false;
}
@Test
public void testShutdownJob() {
JobLaunchEvent event = jobService.launch(getTestJobSpec());
stateManager.shutdownJob(event.getJob());
assertTrue(jobShutdownEventHandled);
}
@Test
public void testKillJob() {
JobLaunchEvent event = jobService.launch(getTestJobSpec());
stateManager.killJob(event.getJob(), "unit test kill");
assertTrue(jobShutdownEventHandled);
}
@Test
public void testEatAll() throws InterruptedException {
JobLaunchEvent event = jobService.launch(getTestJobSpec());
TaskFilterT filter = new TaskFilterT();
filter.jobId = event.getJob().getJobId().toString();
stateManager.eatTasks(filter);
Thread.sleep(1000);
assertTrue(jobShutdownEventHandled);
}
@Test
public void testEatSingle() throws InterruptedException {
JobLaunchEvent event = jobService.launch(getTestJobSpec());
TaskFilterT filter = new TaskFilterT();
filter.jobId = event.getJob().getJobId().toString();
filter.limit = 1;
Task t = taskDao.getTasks(filter).get(0);
stateManager.eatTask(t, false);
assertEquals(TaskState.EATEN.ordinal(),
jdbc().queryForInt("SELECT int_state FROM plow.task WHERE pk_task=?", t.getTaskId()));
}
@Subscribe
public void handleJobShutdownEvent(JobLaunchEvent event) {
jobShutdownEventHandled = true;
}
}