package com.dgrid.test; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.dgrid.gen.Constants; import com.dgrid.gen.Host; import com.dgrid.gen.JOB_CALLBACK_TYPES; import com.dgrid.gen.JOB_STATUS; import com.dgrid.gen.Job; import com.dgrid.gen.Joblet; import com.dgrid.gen.JobletResult; import com.dgrid.handlers.JavaAppJobletTypeHandler; import com.dgrid.handlers.JavaJobletTypeHandler; import com.dgrid.handlers.SystemJobletTypeHandler; import com.dgrid.test.plugins.SimpleJunit3TestCase; import com.dgrid.test.plugins.SimpleJunit4TestCase; import com.dgrid.test.resources.SimpleJavaJob; import com.dgrid.test.resources.SimpleJavaJob2; public class DGridWorkerTestCase extends BaseTestCase { public void testSettings() throws Exception { String setting = "test.setting"; String defaultValue = "default.value"; String s1 = gridClient.getSetting(setting, defaultValue); assertEquals(s1, defaultValue); String hs1 = gridClient.getHostSetting(super.host.getId(), setting, defaultValue); assertEquals(hs1, defaultValue); } public void testJavaJoblet() throws Exception { String msg = "Hello, world"; Map<String, String> params = new HashMap<String, String>(1); params.put(JavaJobletTypeHandler.CLASS_NAME_PARAM, SimpleJavaJob.class .getName()); Joblet joblet = new Joblet(0, 0l, 0, 0, getHostname(), 1, Constants.JAVA_JOBLET, "Joblet 2", params, msg, JOB_STATUS.RECEIVED); int jobletId = gridClient.submitJoblet(joblet, 0).getId(); // work it Thread.sleep(1); super.doWork(); // get it back JobletResult result = gridClient.getJobletResult(jobletId); assertEquals(result.getDetails(), msg); } public void testJob() throws Exception { String msg1 = "hello world"; String msg2 = "goodbye world"; List<Joblet> joblets = new ArrayList<Joblet>(2); Map<String, String> params = new HashMap<String, String>(1); params.put(JavaJobletTypeHandler.CLASS_NAME_PARAM, SimpleJavaJob.class .getName()); Joblet joblet1 = new Joblet(0, 0l, 0, 0, getHostname(), 1, Constants.JAVA_JOBLET, "Joblet 1", params, msg1, JOB_STATUS.RECEIVED); params = new HashMap<String, String>(1); params.put(JavaJobletTypeHandler.CLASS_NAME_PARAM, SimpleJavaJob.class .getName()); Joblet joblet2 = new Joblet(0, 0l, 0, 0, getHostname(), 1, Constants.JAVA_JOBLET, "Joblet 2", params, msg2, JOB_STATUS.RECEIVED); joblets.add(joblet1); joblets.add(joblet2); Job job = new Job(0, 0l, getHostname(), "Test job", joblets, JOB_CALLBACK_TYPES.NONE, "", "", JOB_STATUS.RECEIVED); int jobId = gridClient.submitJob(job).getId(); // submit another joblet to same job params = new HashMap<String, String>(1); params.put(JavaJobletTypeHandler.CLASS_NAME_PARAM, SimpleJavaJob.class .getName()); Joblet joblet3 = new Joblet(0, 0l, jobId, 0, getHostname(), 1, Constants.JAVA_JOBLET, "Joblet 3", params, msg2, JOB_STATUS.RECEIVED); gridClient.submitJoblet(joblet3, jobId); // work 1 JobletResult result1 = super.doWork(); assertEquals(result1.getDetails(), msg1); // work 2 JobletResult result2 = super.doWork(); assertEquals(result2.getDetails(), msg2); // work 3 JobletResult result3 = super.doWork(); assertEquals(result3.getDetails(), msg2); Job result = gridClient.getJob(jobId); assertEquals(result.getStatus(), JOB_STATUS.COMPLETED); assertEquals(gridClient.getJobletQueueSize(), 0); } public void testJavaJoblet2() throws Exception { Map<String, String> params = new HashMap<String, String>(3); params.put(JavaAppJobletTypeHandler.CLASS_NAME_PARAM, SimpleJavaJob2.class.getName()); params.put(JavaAppJobletTypeHandler.METHOD_NAME_PARAM, "main"); params.put(JavaAppJobletTypeHandler.STATIC_PARAM, Boolean .toString(true)); Joblet joblet = new Joblet(0, 0l, 0, 0, getHostname(), 1, Constants.JAVA_APP_JOBLET, "Joblet 2", params, "", JOB_STATUS.RECEIVED); int jobletId = gridClient.submitJoblet(joblet, 0).getId(); // work it Thread.sleep(1); super.doWork(); // get it back JobletResult result = gridClient.getJobletResult(jobletId); assertEquals(result.getJoblet().getStatus(), JOB_STATUS.COMPLETED); } public void testSystemJoblet() throws Exception { String msg = "hello, world"; String command = String.format("echo -n %1$s", msg); Map<String, String> params = new HashMap<String, String>(1); params.put(SystemJobletTypeHandler.SAVE_OUTPUT_PARAM, Boolean .toString(true)); Joblet joblet1 = new Joblet(0, 0l, 0, 0, getHostname(), 1, Constants.SYSTEM_JOBLET, "Simple echo joblet", params, command, JOB_STATUS.RECEIVED); int jobletId = gridClient.submitJoblet(joblet1, 0).getId(); // work it Thread.sleep(1); super.doWork(); // get it back JobletResult result = gridClient.getJobletResult(jobletId); assertEquals(result.getDetails(), msg); params = new HashMap<String, String>(1); // again but without wanting standard out params.put(SystemJobletTypeHandler.SAVE_OUTPUT_PARAM, Boolean .toString(false)); Joblet joblet2 = new Joblet(0, 0l, 0, 0, getHostname(), 1, Constants.SYSTEM_JOBLET, "Simple echo joblet", params, command, JOB_STATUS.RECEIVED); jobletId = gridClient.submitJoblet(joblet2, 0).getId(); // work it Thread.sleep(1); super.doWork(); // get it back JobletResult result2 = gridClient.getJobletResult(jobletId); assertEquals(result2.getDetails(), ""); } public void testJunit3Joblet() throws Exception { Map<String, String> params = new HashMap<String, String>(1); params.put("class", SimpleJunit3TestCase.class.getName()); Joblet joblet = new Joblet(0, 0l, 0, 0, getHostname(), 1, "junit", "Junit3 test case", params, "", JOB_STATUS.RECEIVED); int jobletId = gridClient.submitJoblet(joblet, 0).getId(); // work it Thread.sleep(1); super.doWork(); // should have two new joblets in the queue int queueSize = gridClient.getJobletQueueSize(); assertEquals(queueSize, 2); List<Joblet> active = gridClient.listActiveJoblets(null, 0, 10); assertNotNull(active); assertEquals(active.size(), 2); super.doWork(); super.doWork(); JobletResult result1 = gridClient.getJobletResult(jobletId); Job job = gridClient.getJob(result1.getJoblet().getJobId()); assertEquals(job.getStatus(), JOB_STATUS.COMPLETED); } public void testJunit4Joblet() throws Exception { Map<String, String> params = new HashMap<String, String>(1); params.put("class", SimpleJunit4TestCase.class.getName()); Joblet joblet = new Joblet(0, 0l, 0, 0, getHostname(), 1, "junit", "Junit4 test case", params, "", JOB_STATUS.RECEIVED); int jobletId = gridClient.submitJoblet(joblet, 0).getId(); // work it Thread.sleep(1); super.doWork(); // should have two new joblets in the queue int queueSize = gridClient.getJobletQueueSize(); assertEquals(queueSize, 2); super.doWork(); super.doWork(); JobletResult result1 = gridClient.getJobletResult(jobletId); Job job = gridClient.getJob(result1.getJoblet().getJobId()); assertEquals(job.getStatus(), JOB_STATUS.FAILED); } public void testSubmitHostJoblet() throws Exception { String msg = "Hello, world"; Host host = gridClient.getHost(); Map<String, String> params = new HashMap<String, String>(1); params.put(JavaJobletTypeHandler.CLASS_NAME_PARAM, SimpleJavaJob.class .getName()); Joblet joblet = new Joblet(0, 0l, 0, 0, getHostname(), 1, Constants.JAVA_JOBLET, "Joblet 2", params, msg, JOB_STATUS.RECEIVED); int jobletId = gridClient.submitHostJoblet(host.getHostname(), joblet, 0).getId(); // work it Thread.sleep(1); super.doWork(); // get it back System.err.println("Got joblet id: " + jobletId); JobletResult result = gridClient.getJobletResult(jobletId); assertEquals(result.getJoblet().getStatus(), JOB_STATUS.COMPLETED); assertEquals(result.getDetails(), msg); } public void testEmailCallback() throws Exception { String msg = "Hello, world"; Map<String, String> params = new HashMap<String, String>(1); params.put(JavaJobletTypeHandler.CLASS_NAME_PARAM, SimpleJavaJob.class .getName()); Joblet joblet = new Joblet(0, 0l, 0, 0, getHostname(), 1, Constants.JAVA_JOBLET, "Joblet 2", params, msg, JOB_STATUS.RECEIVED); List<Joblet> joblets = new ArrayList<Joblet>(1); joblets.add(joblet); Job job = new Job(0, 0l, getHostname(), "Callback test", joblets, JOB_CALLBACK_TYPES.EMAIL, "sam@stevie.samnbree.net", "Callback test contents", JOB_STATUS.RECEIVED); int jobId = gridClient.submitJob(job).getId(); assertEquals(gridClient.getJobletQueueSize(), 1); super.doWork(); // our callback should be at the top of the queue Joblet callbackJoblet = gridClient.getWork(); assertEquals(callbackJoblet.getJobletType(), "callback"); assertEquals(callbackJoblet.getParameters().get("jobId"), Integer .toString(jobId)); gridClient.executeJoblet(callbackJoblet); } public void testSyncJobService() throws Exception { String msg = "Hello, world"; Map<String, String> params = new HashMap<String, String>(1); params.put(JavaJobletTypeHandler.CLASS_NAME_PARAM, SimpleJavaJob.class .getName()); Joblet joblet = new Joblet(0, 0l, 0, 0, getHostname(), 1, Constants.JAVA_JOBLET, "Joblet 2", params, msg, JOB_STATUS.RECEIVED); JobletResult result = gridClient.gridExecute(joblet, 1); assertEquals(result.getStatus(), JOB_STATUS.COMPLETED); } public void testShutdownJoblet() throws Exception { Joblet joblet = new Joblet(0, 0l, 0, 0, getHostname(), 1, Constants.AGENT_SHUTDOWN_JOBLET, "Shut down agent", new HashMap<String, String>(0), "", JOB_STATUS.RECEIVED); int jobletId = gridClient.submitHostJoblet(getHostname(), joblet, 0) .getId(); // work it Thread.sleep(1); super.doWork(); // get it back JobletResult result = gridClient.getJobletResult(jobletId); assertEquals(result.getDetails(), Integer.toString(0)); } }