package com.dgrid.test; import java.util.HashMap; import java.util.Map; import com.dgrid.gen.Constants; 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.GroovyJobletTypeHandler; public class ScriptJobletsTestCase extends BaseTestCase { public void testGroovyJoblet() throws Exception { String testValue = "testValue"; String code = "SimpleGroovyJoblet.groovy"; Map<String, String> params = new HashMap<String, String>(2); params.put("testKey", testValue); params.put(GroovyJobletTypeHandler.SCRIPT_PARAM, code); Joblet joblet = new Joblet(0, 0l, 0, 0, getHostname(), 1, Constants.GROOVY_JOBLET, "Sample groovy joblet", params, "", JOB_STATUS.RECEIVED); int jobletId = gridClient.submitJoblet(joblet, 0).getId(); // work it Thread.sleep(1); JobletResult result1 = super.doWork(); // get it back JobletResult result = gridClient.getJobletResult(jobletId); assertEquals(result.getJoblet().getStatus(), JOB_STATUS.COMPLETED); assertEquals(result.getDetails(), testValue); } public void testGroovyJobletCodeAsData() throws Exception { String testValue = "testValue"; // test sending code as data String code = "package groovy.joblets;\n" + "import com.dgrid.api.SimpleJoblet;\n" + "import com.dgrid.api.SimpleJobletResult;\n" + "import com.dgrid.gen.Joblet;\n" + "import com.dgrid.gen.JOB_STATUS;\n" + "import com.dgrid.gen.JobletResult;\n" + "import com.dgrid.service.DGridClient;\n" + "class MySimpleJoblet implements SimpleJoblet {\n" + "public SimpleJobletResult execute(Joblet joblet, DGridClient gridClient) {\n" + " return new SimpleJobletResult(0, JOB_STATUS.COMPLETED, joblet.parameters.get(\"testKey\"));\n" + " }\n" + "}"; Map<String, String> params = new HashMap<String, String>(2); params.put("testKey", testValue); Joblet joblet = new Joblet(0, 0l, 0, 0, getHostname(), 1, Constants.GROOVY_JOBLET, "Sample groovy joblet", params, code, JOB_STATUS.RECEIVED); int jobletId = gridClient.submitJoblet(joblet, 0).getId(); // work it Thread.sleep(1); JobletResult result2 = super.doWork(); // get it back JobletResult result3 = gridClient.getJobletResult(jobletId); assertEquals(result3.getJoblet().getStatus(), JOB_STATUS.COMPLETED); assertEquals(result3.getDetails(), testValue); } public void testGroovyCodeAsData() throws Exception { // test sending code as data String code = "def add = { x,y -> x + y }\n def a = add(1, 2);\nassert a == 3; \nreturn a;"; Joblet joblet = new Joblet(0, 0l, 0, 0, getHostname(), 1, Constants.GROOVY_JOBLET, "Sample groovy joblet", new HashMap<String, String>(0), code, JOB_STATUS.RECEIVED); int jobletId = gridClient.submitJoblet(joblet, 0).getId(); // work it Thread.sleep(1); JobletResult result2 = super.doWork(); // get it back JobletResult result3 = gridClient.getJobletResult(jobletId); assertEquals(result3.getJoblet().getStatus(), JOB_STATUS.COMPLETED); assertEquals(result3.getDetails(), Integer.toString(3)); // test that we can compile without execution Map<String, String> params = new HashMap<String, String>(1); params.put("execute", "false"); joblet = new Joblet(0, 0l, 0, 0, getHostname(), 1, Constants.GROOVY_JOBLET, "Sample groovy joblet", params, code, JOB_STATUS.RECEIVED); jobletId = gridClient.submitJoblet(joblet, 0).getId(); JobletResult result4 = super.doWork(); // get it back JobletResult result5 = gridClient.getJobletResult(jobletId); assertEquals(result5.getJoblet().getStatus(), JOB_STATUS.COMPLETED); assertEquals(result5.getDetails(), ""); // send a syntax error joblet = new Joblet(0, 0l, 0, 0, getHostname(), 1, Constants.GROOVY_JOBLET, "Sample groovy joblet", params, code + "jasdfsdfasdf {} (([[[", JOB_STATUS.RECEIVED); jobletId = gridClient.submitJoblet(joblet, 0).getId(); JobletResult result6 = super.doWork(); // get it back JobletResult result7 = gridClient.getJobletResult(jobletId); assertEquals(result7.getJoblet().getStatus(), JOB_STATUS.FAILED); } public void testSimpleJavascriptJoblet() throws Exception { int x = 10; int y = 91; String code = "testjoblet.js"; Map<String, String> params = new HashMap<String, String>(2); params.put("x", Integer.toString(x)); params.put("y", Integer.toString(y)); params.put(GroovyJobletTypeHandler.SCRIPT_PARAM, code); Joblet joblet = new Joblet(0, 0l, 0, 0, getHostname(), 1, Constants.JAVASCRIPT_JOBLET, "Sample javascript joblet", params, "", JOB_STATUS.RECEIVED); int jobletId = gridClient.submitJoblet(joblet, 0).getId(); // work it Thread.sleep(1); JobletResult result1 = super.doWork(); // get it back JobletResult result = gridClient.getJobletResult(jobletId); assertEquals(result.getJoblet().getStatus(), JOB_STATUS.COMPLETED); assertEquals(result.getDetails(), Integer.toString(x + y)); Job job = gridClient.getJob(result.getJoblet().getJobId()); assertEquals(job.getStatus(), JOB_STATUS.COMPLETED); } public void testSimpleJavascriptJobletAsData() throws Exception { String testValue = "hello, world"; // test sending code as data String code = "grid = Packages.com.dgrid.api;\n" + "thrift = Packages.com.dgrid.gen;\n" + "function execute(joblet, gridClient) {\n" + " return grid.SimpleJobletResult(0, thrift.JOB_STATUS.COMPLETED,\n" + " joblet.parameters.get('testKey'));\n" + "}"; Map<String, String> params = new HashMap<String, String>(2); params.put("testKey", testValue); Joblet joblet = new Joblet(0, 0l, 0, 0, getHostname(), 1, Constants.JAVASCRIPT_JOBLET, "Sample javascript joblet", params, code, JOB_STATUS.RECEIVED); int jobletId = gridClient.submitJoblet(joblet, 0).getId(); // work it Thread.sleep(1); JobletResult result3 = super.doWork(); // get it back result3 = gridClient.getJobletResult(jobletId); assertEquals(result3.getJoblet().getStatus(), JOB_STATUS.COMPLETED); assertEquals(result3.getDetails(), testValue); } public void testSimpleJavascriptCodeAsData() throws Exception { // test sending code as data String code = "function add(x, y) { return x + y; }\nz = add(1,2);"; Map<String, String> params = new HashMap<String, String>(1); Joblet joblet = new Joblet(0, 0l, 0, 0, getHostname(), 1, Constants.JAVASCRIPT_JOBLET, "Sample javascript joblet", params, code, JOB_STATUS.RECEIVED); int jobletId = gridClient.submitJoblet(joblet, 0).getId(); // work it Thread.sleep(1); JobletResult result3 = super.doWork(); // get it back result3 = gridClient.getJobletResult(jobletId); assertEquals(result3.getJoblet().getStatus(), JOB_STATUS.COMPLETED); assertEquals(result3.getDetails(), Double.toString(3.0d)); } }