|
14 | 14 | import org.junit.Before; |
15 | 15 | import org.junit.Test; |
16 | 16 | import org.threadly.ThreadlyTester; |
| 17 | +import org.threadly.concurrent.CentralThreadlyPool; |
17 | 18 | import org.threadly.concurrent.DoNothingRunnable; |
| 19 | +import org.threadly.concurrent.TaskPriority; |
18 | 20 | import org.threadly.util.Clock; |
19 | 21 | import org.threadly.util.ExceptionHandler; |
20 | 22 | import org.threadly.util.StackSuppressedRuntimeException; |
@@ -56,6 +58,66 @@ public void isShutdownTest() { |
56 | 58 | assertFalse(scheduler.isShutdown()); |
57 | 59 | } |
58 | 60 |
|
| 61 | + @Test |
| 62 | + public void getDefaultPriorityTest() { |
| 63 | + assertEquals(TaskPriority.High, scheduler.getDefaultPriority()); |
| 64 | + assertEquals(TaskPriority.Low, new TestableScheduler(TaskPriority.Low, 100).getDefaultPriority()); |
| 65 | + } |
| 66 | + |
| 67 | + @Test |
| 68 | + public void getMaxWaitForLowPriorityTest() { |
| 69 | + assertEquals(100, new TestableScheduler(TaskPriority.Low, 100).getMaxWaitForLowPriority()); |
| 70 | + } |
| 71 | + |
| 72 | + @Test |
| 73 | + public void getQueuedTaskCountTest() { |
| 74 | + for (int i = 0; i < TEST_QTY; i++) { |
| 75 | + TaskPriority priority = i % 2 == 0 ? TaskPriority.High : TaskPriority.Low; |
| 76 | + |
| 77 | + assertEquals(i, scheduler.getQueuedTaskCount()); |
| 78 | + assertEquals(i / 2, scheduler.getQueuedTaskCount(priority)); |
| 79 | + |
| 80 | + if (i <= 5) { |
| 81 | + scheduler.schedule(DoNothingRunnable.instance(), 100, priority); |
| 82 | + } else { |
| 83 | + scheduler.submitScheduled(new TestCallable(), 100, priority); |
| 84 | + } |
| 85 | + } |
| 86 | + } |
| 87 | + |
| 88 | + @Test |
| 89 | + public void getWaitingForExecutionTaskCountTest() { |
| 90 | + for (int i = 0; i < TEST_QTY; i++) { |
| 91 | + TaskPriority priority = i % 2 == 0 ? TaskPriority.High : TaskPriority.Low; |
| 92 | + |
| 93 | + assertEquals(i, scheduler.getWaitingForExecutionTaskCount()); |
| 94 | + assertEquals(i / 2, scheduler.getWaitingForExecutionTaskCount(priority)); |
| 95 | + |
| 96 | + if (i <= 5) { |
| 97 | + scheduler.submit(DoNothingRunnable.instance(), priority); |
| 98 | + } else { |
| 99 | + scheduler.submit(new TestCallable(), priority); |
| 100 | + } |
| 101 | + scheduler.submitScheduled(DoNothingRunnable.instance(), 10_000, priority); // task should be ignored |
| 102 | + } |
| 103 | + } |
| 104 | + |
| 105 | + @Test |
| 106 | + public void getActiveTaskCountTest() { |
| 107 | + BlockingTestRunnable btr = new BlockingTestRunnable(); |
| 108 | + try { |
| 109 | + scheduler.execute(btr); |
| 110 | + |
| 111 | + assertEquals(0, scheduler.getActiveTaskCount()); |
| 112 | + |
| 113 | + CentralThreadlyPool.isolatedTaskPool().execute(() -> scheduler.tick()); |
| 114 | + |
| 115 | + new TestCondition(() -> scheduler.getActiveTaskCount() == 1).blockTillTrue(); |
| 116 | + } finally { |
| 117 | + btr.unblock(); |
| 118 | + } |
| 119 | + } |
| 120 | + |
59 | 121 | @Test |
60 | 122 | public void lastTickTimeTest() { |
61 | 123 | long now = Clock.lastKnownTimeMillis(); |
@@ -149,6 +211,7 @@ public void advanceThenTickTest() { |
149 | 211 | public void executeTest() { |
150 | 212 | List<TestRunnable> runnables = getRunnableList(); |
151 | 213 | Iterator<TestRunnable> it = runnables.iterator(); |
| 214 | + scheduler.execute(it.next(), TaskPriority.Low); // even low priority should finish in tick |
152 | 215 | while (it.hasNext()) { |
153 | 216 | scheduler.execute(it.next()); |
154 | 217 | } |
@@ -441,7 +504,7 @@ public void removeRunnableTest() { |
441 | 504 |
|
442 | 505 | assertFalse(scheduler.remove(immediateRun)); |
443 | 506 |
|
444 | | - scheduler.scheduleWithFixedDelay(immediateRun, 0, delay); |
| 507 | + scheduler.scheduleWithFixedDelay(immediateRun, 0, delay, TaskPriority.High); |
445 | 508 | assertTrue(scheduler.remove(immediateRun)); |
446 | 509 |
|
447 | 510 | scheduler.scheduleWithFixedDelay(immediateRun, 0, delay); |
@@ -508,7 +571,7 @@ public void handleRunStart() { |
508 | 571 | } |
509 | 572 | }; |
510 | 573 |
|
511 | | - scheduler.scheduleWithFixedDelay(tr, 0, 0); |
| 574 | + scheduler.scheduleWithFixedDelay(tr, 0, 0, TaskPriority.High); |
512 | 575 |
|
513 | 576 | assertEquals(1, scheduler.tick()); |
514 | 577 |
|
|
0 commit comments