@Override public Integer enqueue(String applicationName, String user, String mail, String sessionId, String application, String module, String keyword1, String keyword2, String keyword3, Map<String, String> parameters) { JobRequest jr = new JobRequest(applicationName, user, mail); jr.setApplicationName(applicationName); jr.setUser(user == null ? ji.getUserName() : user); jr.setEmail(mail); jr.setSessionID(sessionId == null ? this.ji.getSessionID() : sessionId); jr.setApplication(application == null ? this.ji.getJD().getApplication() : application); jr.setModule(module == null ? this.ji.getJD().getModule() : module); jr.setKeyword1(keyword1); jr.setKeyword2(keyword2); jr.setKeyword3(keyword3); jr.setParentID(this.ji.getId()); if (parameters != null) { jr.setParameters(parameters); } return getJqmClient().enqueue(jr); }
@Override public void run() { System.out.println("PARAMETRE FIBO 2: " + jm.parameters().get("p2")); if (Integer.parseInt(jm.parameters().get("p1")) <= 100) { System.out.println("BEFORE ENQUEUE"); JobRequest.create(jm.applicationName(), jm.userName()).addParameter("p1", jm.parameters().get("p2")) .addParameter("p2", "" + (Integer.parseInt(jm.parameters().get("p2")) + Integer.parseInt(jm.parameters().get("p1")))) .submit(); } System.out.println("QUIT FIBO"); } }
@Override public void execute(TaskExecutionContext context) throws RuntimeException { JobRequest jr = JobRequest.create("", "cron").setScheduleId(sj.getId()); JqmClientFactory.getClient().enqueue(jr); }
/** * Create JobDef corresponding to TestCLIsolation.TestSet and submit it to queue */ void createSubmitSetJob(String specificIsolationContext) { CreationTools.createJobDef(null, true, "com.enioka.jqm.TestCLIsolation.TestSet", null, "jqm-tests/jqm-test-cl-isolation/target/test.jar", TestHelpers.qVip, -1, "TestSet", null, null, null, null, null, false, cnx, specificIsolationContext); JobRequest.create("TestSet", null).submit(); }
/** * Public constructor for fluid API. * * @param applicationName * name (key) of the job to launch * @param user * name of the human user that is at the origin of the request. If no user (e.g. inside an automated system), * the application module name should be used. */ public static JobRequest create(String applicationName, String user) { return new JobRequest(applicationName, user); }
@Test(expected = JqmInvalidRequestException.class) public void testPriorityLimits() { int qId = Queue.create(cnx, "testqueue", " ", false); DeploymentParameter.create(cnx, TestHelpers.node.getId(), 1, 1, qId); CreationTools.createJobDef(null, true, "pyl.Wait", null, "jqm-tests/jqm-test-pyl-nodep/target/test.jar", qId, 42, "jqm-test-wait", null, "Franquin", "ModuleMachin", "other", "other", false, cnx); cnx.commit(); // No priority = FIFO queue. JobRequest.create("jqm-test-wait", "test").addParameter("ms", "100").setPriority(Integer.MAX_VALUE).submit(); }
@Test public void testHistoryFields() throws Exception { CreationTools.createJobDef(null, true, "App", null, "jqm-tests/jqm-test-datetimemaven/target/test.jar", TestHelpers.qVip, 42, "MarsuApplication", null, "Franquin", "ModuleMachin", "other", "other2", true, cnx); int i = JobRequest.create("MarsuApplication", "TestUser").setSessionID("session42").setKeyword1("k1").setKeyword2("k2").submit(); addAndStartEngine(); TestHelpers.waitFor(1, 10000, cnx); Assert.assertEquals(1, TestHelpers.getOkCount(cnx)); JobInstance h = JqmClientFactory.getClient().getJob(i); SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm"); jqmlogger.debug("enqueueDate: " + df.format(h.getEnqueueDate().getTime())); jqmlogger.debug("ExecutionDate: " + df.format(h.getBeganRunningDate().getTime())); jqmlogger.debug("EndDate: " + df.format(h.getEndDate().getTime())); Assert.assertTrue(h.getEnqueueDate() != null); Assert.assertTrue(h.getUser() != null); Assert.assertTrue(h.getEndDate() != null); Assert.assertTrue(h.getBeganRunningDate() != null); Assert.assertTrue(h.getSessionID() != null); Assert.assertEquals("session42", h.getSessionID()); JobInstance ji = Query.create().setApplicationName("MarsuApplication").run().get(0); Assert.assertEquals("ModuleMachin", ji.getDefinitionKeyword1()); Assert.assertEquals("other", ji.getDefinitionKeyword2()); Assert.assertEquals("other2", ji.getDefinitionKeyword3()); Assert.assertEquals("k1", ji.getKeyword1()); Assert.assertEquals("k2", ji.getKeyword2()); Assert.assertEquals(null, ji.getKeyword3()); }
@Override public void start() { log.info("Starting payload"); EntityManagerFactory emf = Persistence.createEntityManagerFactory("marsu-pu"); EntityManager em = emf.createEntityManager(); log.info("Running query"); em.createQuery("SELECT e from Entity e"); if (this.getParameters().size() == 0) { log.info("Queuing again - with parameter and through the full API"); JobRequest jd = new JobRequest("jqm-test-em", "marsu"); jd.addParameter("stop", "1"); JqmClientFactory.getClient().enqueue(jd); } log.info("End of payload"); } }
public Integer run(JqmBaseTest test) { int nbExpected = expectedNonOk + expectedOk; for (String nodeName : nodeNames) { test.addAndStartEngine(nodeName); } Integer i = JobRequest.create("TestJqmApplication", "TestUser").setSessionID(sessionId).setParameters(runtimePrms).submit(); TestHelpers.waitFor(nbExpected, 9000 + waitMarginMs + nbExpected * 2000, cnx); if (waitMsMin > 0) { try { Thread.sleep(waitMsMin); } catch (InterruptedException e) { // not an issue during tests. } } Assert.assertEquals(expectedOk, TestHelpers.getOkCount(cnx)); Assert.assertEquals(expectedNonOk, TestHelpers.getNonOkCount(cnx)); return i; } }
@Test public void testTags() throws Exception { CreationTools.createJobDef(null, true, "pyl.EngineApiTags", null, "jqm-tests/jqm-test-pyl/target/test.jar", TestHelpers.qVip, 42, "MarsuApplication", null, "Franquin", "keyword1", null, "keyword3", false, cnx); JobRequest.create("MarsuApplication", "TestUser").setKeyword1("Houba").setKeyword3("Meuh").submit(); addAndStartEngine(); TestHelpers.waitFor(1, 10000, cnx); Assert.assertEquals(1, TestHelpers.getOkCount(cnx)); List<JobInstance> res = Query.create().run(); Assert.assertEquals(1, res.size()); JobInstance h = res.get(0); Assert.assertEquals("Houba", h.getKeyword1()); Assert.assertEquals(null, h.getKeyword2()); Assert.assertEquals("Meuh", h.getKeyword3()); Assert.assertEquals("keyword1", h.getDefinitionKeyword1()); Assert.assertEquals(null, h.getDefinitionKeyword2()); Assert.assertEquals("keyword3", h.getDefinitionKeyword3()); }
@Test // Commented - waiting for one minute is long. public void testSimpleSchedule() { int id = CreationTools.createJobDef(null, true, "pyl.EngineApiSendMsg", null, "jqm-tests/jqm-test-pyl/target/test.jar", TestHelpers.qVip, 42, "MarsuApplication", null, "Franquin", "ModuleMachin", "other", "other", true, cnx); int scheduleId = JobRequest.create("MarsuApplication", "test user").setRecurrence("* * * * *").addParameter("key1", "value1") .submit(); JobDef jd_client = JqmClientFactory.getClient().getJobDefinition("MarsuApplication"); Assert.assertEquals(id, (int) jd_client.getId()); Assert.assertEquals(1, jd_client.getSchedules().size()); Assert.assertEquals(scheduleId, jd_client.getSchedules().get(0).getId()); Assert.assertEquals("* * * * *", jd_client.getSchedules().get(0).getCronExpression()); addAndStartEngine(); TestHelpers.waitFor(1, 150000, cnx); Assert.assertEquals(1, TestHelpers.getOkCount(cnx)); JobDefDto jd = MetaService.getJobDef(cnx, id); Assert.assertEquals(1, jd.getSchedules().size()); JqmClientFactory.getClient().removeRecurrence(scheduleId); jd = MetaService.getJobDef(cnx, id); Assert.assertEquals(0, jd.getSchedules().size()); Assert.assertTrue(Query.create().run().get(0).isFromSchedule()); }
@Test public void testTakingMultipleResources() throws Exception { // Single thread available. int qId = Queue.create(cnx, "testqueue", " ", false); DeploymentParameter.create(cnx, TestHelpers.node.getId(), 2, 1, qId); // 2 slots Map<String, String> prms = new HashMap<>(1); prms.put("com.enioka.jqm.rm.quantity.thread.consumption", "2"); // using fully qualified RM with RM name 'thread' - not the generic // key CreationTools.createJobDef(null, true, "pyl.Wait", prms, "jqm-tests/jqm-test-pyl-nodep/target/test.jar", qId, 42, "jqm-test-wait-dual", null, "Franquin", "ModuleMachin", "other", "other", false, cnx); CreationTools.createJobDef(null, true, "pyl.Wait", null, "jqm-tests/jqm-test-pyl-nodep/target/test.jar", qId, 42, "jqm-test-wait-single", null, "Franquin", "ModuleMachin", "other", "other", false, cnx); cnx.commit(); int i1 = JobRequest.create("jqm-test-wait-single", "test").setPriority(null).submit(); int i2 = JobRequest.create("jqm-test-wait-dual", "test").setPriority(null).submit(); addAndStartEngine(); TestHelpers.waitForRunning(1, 60000, cnx); sleep(1); // Time to start another if case of bug... // Check only one of the two JI has started (asking for total 3 slots, only 2 available) Assert.assertEquals(0, TestHelpers.getOkCount(cnx)); Assert.assertEquals(0, TestHelpers.getNonOkCount(cnx)); Assert.assertEquals(1, TestHelpers.getQueueRunningCount(cnx)); Assert.assertEquals(2, TestHelpers.getQueueAllCount(cnx)); // Cleanup JqmClientFactory.getClient().killJob(i1); JqmClientFactory.getClient().killJob(i2); TestHelpers.waitFor(2, 1000, cnx); }
@Test public void testEmail() throws Exception { // Do not run in Eclipse, as it does not support the SMTP Maven plugin. Assume.assumeTrue(!System.getProperty("java.class.path").contains("eclipse")); CreationTools.createJobDef(null, true, "App", null, "jqm-tests/jqm-test-datetimemaven/target/test.jar", TestHelpers.qVip, 42, "MarsuApplication", null, "Franquin", "ModuleMachin", "other", "other", true, cnx); JobRequest.create("MarsuApplication", "TestUser").setEmail("test@jqm.com").submit(); addAndStartEngine(); TestHelpers.waitFor(1, 20000, cnx); // Need time for async mail sending. Assert.assertEquals(1, TestHelpers.getOkCount(cnx)); Assert.assertEquals(0, TestHelpers.getNonOkCount(cnx)); Properties props = new Properties(); props.setProperty("mail.store.protocol", "imap"); int nbMail = 0; try { Session session = Session.getInstance(props, null); Store store = session.getStore(); store.connect("localhost", 10143, "testlogin", "testpassword"); Folder inbox = store.getFolder("INBOX"); nbMail = inbox.getMessageCount(); } catch (Exception mex) { mex.printStackTrace(); } Assert.assertEquals(1, nbMail); }
@Test public void testStartHeld() { CreationTools.createJobDef(null, true, "pyl.EngineApiSendMsg", null, "jqm-tests/jqm-test-pyl/target/test.jar", TestHelpers.qVip, 42, "MarsuApplication", null, "Franquin", "ModuleMachin", "other", "other", true, cnx); int i = JobRequest.create("MarsuApplication", "testuser").startHeld().submit(); addAndStartEngine(); // Should not run. sleepms(1000); Assert.assertEquals(1, TestHelpers.getQueueAllCount(cnx)); Assert.assertEquals(State.HOLDED, Query.create().setQueryLiveInstances(true).run().get(0).getState()); // Resume at will. JqmClientFactory.getClient().resumeQueuedJob(i); TestHelpers.waitFor(1, 10000, cnx); Assert.assertEquals(1, TestHelpers.getOkCount(cnx)); } }
TestHelpers.qVip, 42, "MarsuApplication", null, "Franquin", "ModuleMachin", "other", "other", false, cnx); int i = JobRequest.create("MarsuApplication", "TestUser").submit(); int i2 = JobRequest.create("MarsuApplication", "TestUser").setRunAfter(after).submit(); Assert.assertTrue(com.enioka.jqm.model.JobInstance.select_id(cnx, i2).getNotBefore().before(Calendar.getInstance())); int i4 = JobRequest.create("MarsuApplication", "TestUser").submit(); Assert.assertNull(com.enioka.jqm.model.JobInstance.select_id(cnx, i4).getNotBefore()); JqmClientFactory.getClient().setJobRunAfter(i4, after); int i3 = JobRequest.create("MarsuApplication", "TestUser").setPriority(3).setRecurrence("* * * * *").submit();
@Test public void testEnqueueWithQueue() throws Exception { CreationTools.createJobDef(null, true, "App", null, "jqm-tests/jqm-test-datetimemaven/target/test.jar", TestHelpers.qVip, 42, "MarsuApplication", null, "Franquin", "ModuleMachin", "other", "other", false, cnx); int i = JobRequest.create("MarsuApplication", "TestUser").setQueueName("NormalQueue").submit(); addAndStartEngine(); TestHelpers.waitFor(1, 10000, cnx); JobInstance ji = JqmClientFactory.getClient().getJob(i); Assert.assertEquals("NormalQueue", ji.getQueue().getName()); }
@Test // Commented - waiting for one minute is long. public void testDelayedJob() { CreationTools.createJobDef(null, true, "pyl.EngineApiSendMsg", null, "jqm-tests/jqm-test-pyl/target/test.jar", TestHelpers.qVip, 42, "MarsuApplication", null, "Franquin", "ModuleMachin", "other", "other", true, cnx); Calendar runAt = Calendar.getInstance(); runAt.set(Calendar.MILLISECOND, 0); // Not needed in normal operations, but we will compare at the end. runAt.set(Calendar.SECOND, 0); runAt.add(Calendar.MINUTE, 1); JobRequest.create("MarsuApplication", "testuser").setRunAfter(runAt).submit(); Assert.assertEquals(1, TestHelpers.getQueueAllCount(cnx)); Assert.assertEquals(State.SCHEDULED, Query.create().setQueryLiveInstances(true).run().get(0).getState()); Assert.assertTrue(Query.create().setQueryLiveInstances(true).run().get(0).isFromSchedule()); Assert.assertEquals(runAt, Query.create().setQueryLiveInstances(true).run().get(0).getRunAfter()); addAndStartEngine(); TestHelpers.waitFor(1, 150000, cnx); Assert.assertEquals(1, TestHelpers.getOkCount(cnx)); Assert.assertTrue(Query.create().run().get(0).isFromSchedule()); Assert.assertTrue(Query.create().run().get(0).getBeganRunningDate().after(runAt)); }
Assert.assertEquals(1, jds.size()); int i = JobRequest.create("MarsuApplication", "TestUser").submit(); addAndStartEngine(); TestHelpers.waitFor(1, 5000, cnx); TestHelpers.waitFor(2, 5000, cnx); int idRec = JobRequest.create("MarsuApplication", "TestUser").setRecurrence("* * * * *").submit(); Assert.assertEquals(1, MetaService.getJobDef(cnx, idJobDef1).getSchedules().size()); JqmClientFactory.getClient().removeRecurrence(idRec); Assert.assertEquals(0, MetaService.getJobDef(cnx, idJobDef1).getSchedules().size()); i = JobRequest.create("Dies", "TestUser").submit(); TestHelpers.waitFor(3, 5000, cnx); Assert.assertEquals(1, TestHelpers.getNonOkCount(cnx)); Assert.assertEquals(0, JqmClientFactory.getClient().getUserActiveJobs("TestUser").size()); i = JobRequest.create("Message", "TestUser").submit(); TestHelpers.waitFor(4, 5000, cnx); Assert.assertEquals(1, JqmClientFactory.getClient().getJobMessages(i).size());
/** * Helper method to enqueue a new launch request. Simple JqmClientFactory.getClient().enqueue wrapper. * * @return the request ID. */ public int enqueue(String name) { return JqmClientFactory.getClient().enqueue(JobRequest.create(name, "test")); }
/** * Create JobDef corresponding to TestCLIsolation.TestGet and submit it to queue */ void createSubmitGetJob(String specificIsolationContext) { CreationTools.createJobDef(null, true, "com.enioka.jqm.TestCLIsolation.TestGet", null, "jqm-tests/jqm-test-cl-isolation/target/test.jar", TestHelpers.qVip, -1, "TestGet", null, null, null, null, null, false, cnx, specificIsolationContext); JobRequest.create("TestGet", null).submit(); }