diff options
author | Matthias Nick | 2013-11-06 12:00:35 +0000 |
---|---|---|
committer | Judith Gull | 2013-11-11 08:27:19 +0000 |
commit | 96a3bcac2d010764a2eafe99f8cf8a49766f0e14 (patch) | |
tree | 82d2ee573955e549c1f005f345991d753a44c9f6 | |
parent | d52a606c0ad8a00c21d0bb3b78027232a35d77f9 (diff) | |
download | org.eclipse.scout.rt-96a3bcac2d010764a2eafe99f8cf8a49766f0e14.tar.gz org.eclipse.scout.rt-96a3bcac2d010764a2eafe99f8cf8a49766f0e14.tar.xz org.eclipse.scout.rt-96a3bcac2d010764a2eafe99f8cf8a49766f0e14.zip |
bug 420783: Scheduler.getRunningJobs() returns all jobs instead of only the running ones
https://bugs.eclipse.org/bugs/show_bug.cgi?id=420783
m_runningJobs is used instead of m_availableJobs
Change-Id: Iaef60e251b5b7f10c5d37cb39b39f6c61c4ec4ee
Signed-off-by: Matthias Nick <Matthias.Nick@bsiag.com>
Reviewed-on: https://git.eclipse.org/r/18128
Tested-by: Hudson CI
Reviewed-by: Judith Gull <jgu@bsiag.com>
IP-Clean: Judith Gull <jgu@bsiag.com>
3 files changed, 88 insertions, 3 deletions
diff --git a/org.eclipse.scout.commons/src/org/eclipse/scout/commons/StoppableThread.java b/org.eclipse.scout.commons/src/org/eclipse/scout/commons/StoppableThread.java index aefa8742c8..5a6531fe16 100644 --- a/org.eclipse.scout.commons/src/org/eclipse/scout/commons/StoppableThread.java +++ b/org.eclipse.scout.commons/src/org/eclipse/scout/commons/StoppableThread.java @@ -4,7 +4,7 @@ * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html - * + * * Contributors: * BSI Business Systems Integration AG - initial API and implementation ******************************************************************************/ @@ -40,7 +40,7 @@ public class StoppableThread extends Thread { } public void setStopSignal() { - m_stopSignal = true;// cannot be set back agoin once it is set + m_stopSignal = true;// cannot be set back again once it is set interrupt(); } diff --git a/org.eclipse.scout.rt.server.test/src/org/eclipse/scout/rt/server/scheduler/SchedulerTest.java b/org.eclipse.scout.rt.server.test/src/org/eclipse/scout/rt/server/scheduler/SchedulerTest.java new file mode 100644 index 0000000000..fa4378e1eb --- /dev/null +++ b/org.eclipse.scout.rt.server.test/src/org/eclipse/scout/rt/server/scheduler/SchedulerTest.java @@ -0,0 +1,85 @@ +/******************************************************************************* + * Copyright (c) 2013 BSI Business Systems Integration AG. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * BSI Business Systems Integration AG - initial API and implementation + ******************************************************************************/ +package org.eclipse.scout.rt.server.scheduler; + +import java.util.Calendar; + +import javax.security.auth.Subject; + +import org.eclipse.scout.commons.exception.ProcessingException; +import org.eclipse.scout.rt.server.testenvironment.TestEnvironmentServerSession; +import org.eclipse.scout.rt.testing.server.runner.ScoutServerTestRunner; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; + +/** + * Tests for IScheduler + */ +@RunWith(ScoutServerTestRunner.class) +public class SchedulerTest { + @Test + public void testRunningJobCount() throws ProcessingException, InterruptedException { + IScheduler scheduler = new Scheduler(new Subject(), TestEnvironmentServerSession.class, new Ticker(Calendar.SECOND)); + scheduler.addJob(new JobAcceptTick("groupId", "jobIdAccept")); + scheduler.addJob(new JobDontAcceptTick("groupId", "jobIdDontAccept")); + Assert.assertEquals("JobCount must be 2", 2, scheduler.getJobCount()); + scheduler.start(); + + Thread.sleep(1500); //now, JobAcceptTick should be running + Assert.assertEquals("JobAcceptTick should be running only", 1, scheduler.getRunningJobCount()); + Assert.assertEquals("JobAcceptTick should be running only", 1, scheduler.getRunningJobs(null, null).size()); + Assert.assertEquals("2 Jobs should be in the Scheduler", 2, scheduler.getAllJobs().size()); + Assert.assertEquals("2 Jobs should be in the Scheduler", 2, scheduler.getJobCount()); + + Thread.sleep(1000); //now JobAcceptTick should be finished + Assert.assertEquals("No running job left", 0, scheduler.getRunningJobCount()); + Assert.assertEquals("No running job left", 0, scheduler.getRunningJobs(null, null).size()); + Assert.assertEquals("jobDontAccept should be in the Scheduler", 1, scheduler.getAllJobs().size()); + Assert.assertEquals("jobDontAccept should be in the Scheduler", 1, scheduler.getJobCount()); + scheduler.stop(); + } +} + +class JobAcceptTick extends AbstractSchedulerJob { + + public JobAcceptTick(String groupId, String jobId) { + super(groupId, jobId); + } + + @Override + public void run(IScheduler scheduler, TickSignal signal) throws ProcessingException { + try { + //wait 2 seconds + Thread.sleep(2000); + } + catch (InterruptedException e) { + e.printStackTrace(); + } + setDisposed(true); + } + + @Override + public boolean acceptTick(TickSignal signal) { + return true; + } +} + +class JobDontAcceptTick extends AbstractSchedulerJob { + public JobDontAcceptTick(String groupId, String jobId) { + super(groupId, jobId); + } + + @Override + public boolean acceptTick(TickSignal signal) { + return false; + } +} diff --git a/org.eclipse.scout.rt.server/src/org/eclipse/scout/rt/server/scheduler/AbstractScheduler.java b/org.eclipse.scout.rt.server/src/org/eclipse/scout/rt/server/scheduler/AbstractScheduler.java index af800939df..f7f12114e5 100644 --- a/org.eclipse.scout.rt.server/src/org/eclipse/scout/rt/server/scheduler/AbstractScheduler.java +++ b/org.eclipse.scout.rt.server/src/org/eclipse/scout/rt/server/scheduler/AbstractScheduler.java @@ -248,7 +248,7 @@ public abstract class AbstractScheduler implements IScheduler { public Collection<ISchedulerJob> getRunningJobs(String groupId, String jobId) { synchronized (m_queueLock) { ArrayList<ISchedulerJob> jobs = new ArrayList<ISchedulerJob>(); - for (ISchedulerJob job : m_availableJobs) { + for (ISchedulerJob job : m_runningJobs) { if (matches(job, groupId, jobId)) { jobs.add(job); } |