package com.breakersoft.plow.test.service; import static org.junit.Assert.assertEquals; import javax.annotation.Resource; import org.junit.Test; import com.breakersoft.plow.Depend; import com.breakersoft.plow.Layer; import com.breakersoft.plow.Task; import com.breakersoft.plow.event.JobLaunchEvent; import com.breakersoft.plow.service.DependService; import com.breakersoft.plow.service.StateManager; import com.breakersoft.plow.test.AbstractTest; import com.breakersoft.plow.thrift.DependSpecT; import com.breakersoft.plow.thrift.DependType; import com.breakersoft.plow.thrift.JobSpecT; import com.breakersoft.plow.thrift.TaskState; public class DependServiceTests extends AbstractTest { @Resource DependService dependService; @Resource StateManager jobStateManager; @Test public void testSatisfyDepend() { JobSpecT spec1 = getTestJobSpec("depend_test_1"); JobSpecT spec2 = getTestJobSpec("depend_test_2"); JobLaunchEvent event1 = jobService.launch(spec1); JobLaunchEvent event2 = jobService.launch(spec2); DependSpecT dspec = new DependSpecT(); dspec.type = DependType.JOB_ON_JOB; dspec.dependentJob = event1.getJob().getJobId().toString(); dspec.dependOnJob = event2.getJob().getJobId().toString(); Depend depend = dependService.createDepend(dspec); assertEquals(10, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event1.getJob().getJobId())); assertEquals(0, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event2.getJob().getJobId())); dependService.satisfyDepend(depend); assertEquals(0, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event1.getJob().getJobId())); } @Test public void testUnsatisfyDepend() { JobSpecT spec1 = getTestJobSpec("depend_test_1"); JobSpecT spec2 = getTestJobSpec("depend_test_2"); JobLaunchEvent event1 = jobService.launch(spec1); JobLaunchEvent event2 = jobService.launch(spec2); DependSpecT dspec = new DependSpecT(); dspec.type = DependType.JOB_ON_JOB; dspec.dependentJob = event1.getJob().getJobId().toString(); dspec.dependOnJob = event2.getJob().getJobId().toString(); Depend depend = dependService.createDepend(dspec); assertEquals(10, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event1.getJob().getJobId())); assertEquals(0, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event2.getJob().getJobId())); dependService.satisfyDepend(depend); assertEquals(0, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event1.getJob().getJobId())); dependService.unsatisfyDepend(depend); assertEquals(10, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event1.getJob().getJobId())); assertEquals(0, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event2.getJob().getJobId())); } @Test public void testJobOnJob() { JobSpecT spec1 = getTestJobSpec("depend_test_1"); JobSpecT spec2 = getTestJobSpec("depend_test_2"); JobLaunchEvent event1 = jobService.launch(spec1); JobLaunchEvent event2 = jobService.launch(spec2); DependSpecT dspec = new DependSpecT(); dspec.type = DependType.JOB_ON_JOB; dspec.dependentJob = event1.getJob().getJobId().toString(); dspec.dependOnJob = event2.getJob().getJobId().toString(); dependService.createDepend(dspec); assertEquals(10, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event1.getJob().getJobId())); assertEquals(0, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event2.getJob().getJobId())); jobStateManager.satisfyDependsOn(event2.getJob()); assertEquals(0, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event1.getJob().getJobId())); } @Test public void testLayerOnLayer() { JobSpecT spec1 = getTestJobSpec("depend_test_1"); JobSpecT spec2 = getTestJobSpec("depend_test_2"); JobLaunchEvent event1 = jobService.launch(spec1); JobLaunchEvent event2 = jobService.launch(spec2); Layer dependentLayer = jobService.getLayer(event1.getJob(), 0); Layer dependOnLayer = jobService.getLayer(event2.getJob(), 0); DependSpecT dspec = new DependSpecT(); dspec.type = DependType.LAYER_ON_LAYER; dspec.dependentJob = event1.getJob().getJobId().toString(); dspec.dependOnJob = event2.getJob().getJobId().toString(); dspec.dependentLayer = dependentLayer.getLayerId().toString(); dspec.dependOnLayer = dependOnLayer.getLayerId().toString(); dependService.createDepend(dspec); assertEquals(10, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event1.getJob().getJobId())); assertEquals(0, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event2.getJob().getJobId())); jobStateManager.satisfyDependsOn(dependOnLayer); assertEquals(0, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event1.getJob().getJobId())); } @Test public void testLayerOnTask() { JobSpecT spec1 = getTestJobSpec("depend_test_1"); JobSpecT spec2 = getTestJobSpec("depend_test_2"); JobLaunchEvent event1 = jobService.launch(spec1); JobLaunchEvent event2 = jobService.launch(spec2); Layer dependentLayer = jobService.getLayer(event1.getJob(), 0); Layer dependOnLayer = jobService.getLayer(event2.getJob(), 0); Task dependOnTask = jobService.getTask(dependOnLayer, 1); DependSpecT dspec = new DependSpecT(); dspec.type = DependType.LAYER_ON_TASK; dspec.dependentJob = event1.getJob().getJobId().toString(); dspec.dependOnJob = event2.getJob().getJobId().toString(); dspec.dependentLayer = dependentLayer.getLayerId().toString(); dspec.dependOnLayer = dependOnLayer.getLayerId().toString(); dspec.dependOnTask = dependOnTask.getTaskId().toString(); dependService.createDepend(dspec); assertEquals(10, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event1.getJob().getJobId())); assertEquals(0, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event2.getJob().getJobId())); jobStateManager.satisfyDependsOn(dependOnTask); assertEquals(0, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event1.getJob().getJobId())); } @Test public void testTaskOnLayer() { JobSpecT spec1 = getTestJobSpec("depend_test_1"); JobSpecT spec2 = getTestJobSpec("depend_test_2"); JobLaunchEvent event1 = jobService.launch(spec1); JobLaunchEvent event2 = jobService.launch(spec2); Layer dependentLayer = jobService.getLayer(event1.getJob(), 0); Layer dependOnLayer = jobService.getLayer(event2.getJob(), 0); Task dependentTask = jobService.getTask(dependentLayer, 1); DependSpecT dspec = new DependSpecT(); dspec.type = DependType.TASK_ON_LAYER; dspec.dependentJob = event1.getJob().getJobId().toString(); dspec.dependOnJob = event2.getJob().getJobId().toString(); dspec.dependentLayer = dependentLayer.getLayerId().toString(); dspec.dependOnLayer = dependOnLayer.getLayerId().toString(); dspec.dependentTask = dependentTask.getTaskId().toString(); dependService.createDepend(dspec); assertEquals(1, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event1.getJob().getJobId())); assertEquals(0, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event2.getJob().getJobId())); jobStateManager.satisfyDependsOn(dependOnLayer); assertEquals(0, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event1.getJob().getJobId())); } @Test public void testTaskOnTask() { JobSpecT spec1 = getTestJobSpec("depend_test_1"); JobSpecT spec2 = getTestJobSpec("depend_test_2"); JobLaunchEvent event1 = jobService.launch(spec1); JobLaunchEvent event2 = jobService.launch(spec2); Layer dependentLayer = jobService.getLayer(event1.getJob(), 0); Layer dependOnLayer = jobService.getLayer(event2.getJob(), 0); Task dependentTask = jobService.getTask(dependentLayer, 1); Task dependOnTask = jobService.getTask(dependOnLayer, 1); DependSpecT dspec = new DependSpecT(); dspec.type = DependType.TASK_ON_TASK; dspec.dependentJob = event1.getJob().getJobId().toString(); dspec.dependOnJob = event2.getJob().getJobId().toString(); dspec.dependentLayer = dependentLayer.getLayerId().toString(); dspec.dependOnLayer = dependOnLayer.getLayerId().toString(); dspec.dependentTask = dependentTask.getTaskId().toString(); dspec.dependOnTask = dependOnTask.getTaskId().toString(); dependService.createDepend(dspec); assertEquals(1, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event1.getJob().getJobId())); assertEquals(0, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event2.getJob().getJobId())); jobStateManager.satisfyDependsOn(dependOnTask); assertEquals(0, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event1.getJob().getJobId())); assertEquals(0, simpleJdbcTemplate.queryForInt("SELECT COUNT(1) FROM task WHERE int_state=?", TaskState.DEPEND.ordinal())); } @Test public void testTaskByTask() { JobSpecT spec1 = getTestJobSpec("depend_test_1"); JobSpecT spec2 = getTestJobSpec("depend_test_2"); JobLaunchEvent event1 = jobService.launch(spec1); JobLaunchEvent event2 = jobService.launch(spec2); Layer dependentLayer = jobService.getLayer(event1.getJob(), 0); Layer dependOnLayer = jobService.getLayer(event2.getJob(), 0); DependSpecT dspec = new DependSpecT(); dspec.type = DependType.TASK_BY_TASK; dspec.dependentJob = event1.getJob().getJobId().toString(); dspec.dependOnJob = event2.getJob().getJobId().toString(); dspec.dependentLayer = dependentLayer.getLayerId().toString(); dspec.dependOnLayer = dependOnLayer.getLayerId().toString(); dependService.createDepend(dspec); assertEquals(10, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event1.getJob().getJobId())); assertEquals(0, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event2.getJob().getJobId())); // Satisifed handled by satisfyDependsOn(task) } @Test public void testTaskByTaskChunkedOnNonChunked() { JobSpecT spec1 = getTestJobSpec("depend_test_1", "1-10", 5); JobSpecT spec2 = getTestJobSpec("depend_test_2", "1-10", 1); JobLaunchEvent event1 = jobService.launch(spec1); JobLaunchEvent event2 = jobService.launch(spec2); Layer dependentLayer = jobService.getLayer(event1.getJob(), 0); Layer dependOnLayer = jobService.getLayer(event2.getJob(), 0); DependSpecT dspec = new DependSpecT(); dspec.type = DependType.TASK_BY_TASK; dspec.dependentJob = event1.getJob().getJobId().toString(); dspec.dependOnJob = event2.getJob().getJobId().toString(); dspec.dependentLayer = dependentLayer.getLayerId().toString(); dspec.dependOnLayer = dependOnLayer.getLayerId().toString(); dependService.createDepend(dspec); assertEquals(10, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event1.getJob().getJobId())); assertEquals(0, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event2.getJob().getJobId())); assertEquals(10, simpleJdbcTemplate.queryForInt("SELECT COUNT(1) FROM plow.depend")); } @Test public void testTaskByTaskNonChunkedOnChunked() { JobSpecT spec1 = getTestJobSpec("depend_test_1", "1-10", 1); JobSpecT spec2 = getTestJobSpec("depend_test_2", "1-10", 5); JobLaunchEvent event1 = jobService.launch(spec1); JobLaunchEvent event2 = jobService.launch(spec2); Layer dependentLayer = jobService.getLayer(event1.getJob(), 0); Layer dependOnLayer = jobService.getLayer(event2.getJob(), 0); DependSpecT dspec = new DependSpecT(); dspec.type = DependType.TASK_BY_TASK; dspec.dependentJob = event1.getJob().getJobId().toString(); dspec.dependOnJob = event2.getJob().getJobId().toString(); dspec.dependentLayer = dependentLayer.getLayerId().toString(); dspec.dependOnLayer = dependOnLayer.getLayerId().toString(); dependService.createDepend(dspec); assertEquals(10, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event1.getJob().getJobId())); assertEquals(0, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event2.getJob().getJobId())); assertEquals(10, simpleJdbcTemplate.queryForInt("SELECT COUNT(1) FROM plow.depend")); } @Test public void testTaskByTaskChunkedOnChunked() { JobSpecT spec1 = getTestJobSpec("depend_test_1", "1-10", 5); JobSpecT spec2 = getTestJobSpec("depend_test_2", "1-10", 5); JobLaunchEvent event1 = jobService.launch(spec1); JobLaunchEvent event2 = jobService.launch(spec2); Layer dependentLayer = jobService.getLayer(event1.getJob(), 0); Layer dependOnLayer = jobService.getLayer(event2.getJob(), 0); DependSpecT dspec = new DependSpecT(); dspec.type = DependType.TASK_BY_TASK; dspec.dependentJob = event1.getJob().getJobId().toString(); dspec.dependOnJob = event2.getJob().getJobId().toString(); dspec.dependentLayer = dependentLayer.getLayerId().toString(); dspec.dependOnLayer = dependOnLayer.getLayerId().toString(); dependService.createDepend(dspec); assertEquals(2, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event1.getJob().getJobId())); assertEquals(0, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event2.getJob().getJobId())); assertEquals(2, simpleJdbcTemplate.queryForInt("SELECT COUNT(1) FROM plow.depend")); } @Test public void testTaskByTaskChunked2OnChunked5() { JobSpecT spec1 = getTestJobSpec("depend_test_1", "1-10", 2); JobSpecT spec2 = getTestJobSpec("depend_test_2", "1-10", 5); JobLaunchEvent event1 = jobService.launch(spec1); JobLaunchEvent event2 = jobService.launch(spec2); Layer dependentLayer = jobService.getLayer(event1.getJob(), 0); Layer dependOnLayer = jobService.getLayer(event2.getJob(), 0); DependSpecT dspec = new DependSpecT(); dspec.type = DependType.TASK_BY_TASK; dspec.dependentJob = event1.getJob().getJobId().toString(); dspec.dependOnJob = event2.getJob().getJobId().toString(); dspec.dependentLayer = dependentLayer.getLayerId().toString(); dspec.dependOnLayer = dependOnLayer.getLayerId().toString(); dependService.createDepend(dspec); assertEquals(6, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event1.getJob().getJobId())); assertEquals(0, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event2.getJob().getJobId())); assertEquals(6, simpleJdbcTemplate.queryForInt("SELECT COUNT(1) FROM plow.depend")); } @Test public void testTaskByTaskChunked5OnChunked2() { JobSpecT spec1 = getTestJobSpec("depend_test_1", "1-10", 2); JobSpecT spec2 = getTestJobSpec("depend_test_2", "1-10", 5); JobLaunchEvent event1 = jobService.launch(spec1); JobLaunchEvent event2 = jobService.launch(spec2); Layer dependentLayer = jobService.getLayer(event1.getJob(), 0); Layer dependOnLayer = jobService.getLayer(event2.getJob(), 0); DependSpecT dspec = new DependSpecT(); dspec.type = DependType.TASK_BY_TASK; dspec.dependentJob = event1.getJob().getJobId().toString(); dspec.dependOnJob = event2.getJob().getJobId().toString(); dspec.dependentLayer = dependentLayer.getLayerId().toString(); dspec.dependOnLayer = dependOnLayer.getLayerId().toString(); dependService.createDepend(dspec); assertEquals(6, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event1.getJob().getJobId())); assertEquals(0, simpleJdbcTemplate.queryForInt("SELECT SUM(int_depend_count) FROM task WHERE pk_job=?", event2.getJob().getJobId())); assertEquals(6, simpleJdbcTemplate.queryForInt("SELECT COUNT(1) FROM plow.depend")); } }