HBASE-22615 Make TestChoreService more robust to timing
* phrase fudge factor "deltas" in terms of the original period * increase the delta allowed for chore timing from 5% to 20% * improve some assertions Closes #328 Signed-off-by: Reid Chan <reidchan@apache.org> Signed-off-by: Sakthi <sakthivel.azhaku@gmail.com>
This commit is contained in:
parent
6d08ffcfc6
commit
9aee88e03a
|
@ -354,17 +354,17 @@ public class TestChoreService {
|
||||||
public void testFrequencyOfChores() throws InterruptedException {
|
public void testFrequencyOfChores() throws InterruptedException {
|
||||||
final int period = 100;
|
final int period = 100;
|
||||||
// Small delta that acts as time buffer (allowing chores to complete if running slowly)
|
// Small delta that acts as time buffer (allowing chores to complete if running slowly)
|
||||||
final int delta = 5;
|
final int delta = period/5;
|
||||||
ChoreService service = new ChoreService("testFrequencyOfChores");
|
ChoreService service = new ChoreService("testFrequencyOfChores");
|
||||||
CountingChore chore = new CountingChore("countingChore", period);
|
CountingChore chore = new CountingChore("countingChore", period);
|
||||||
try {
|
try {
|
||||||
service.scheduleChore(chore);
|
service.scheduleChore(chore);
|
||||||
|
|
||||||
Thread.sleep(10 * period + delta);
|
Thread.sleep(10 * period + delta);
|
||||||
assertTrue(chore.getCountOfChoreCalls() == 11);
|
assertEquals("10 periods have elapsed.", 11, chore.getCountOfChoreCalls());
|
||||||
|
|
||||||
Thread.sleep(10 * period);
|
Thread.sleep(10 * period + delta);
|
||||||
assertTrue(chore.getCountOfChoreCalls() == 21);
|
assertEquals("20 periods have elapsed.", 21, chore.getCountOfChoreCalls());
|
||||||
} finally {
|
} finally {
|
||||||
shutdownService(service);
|
shutdownService(service);
|
||||||
}
|
}
|
||||||
|
@ -380,14 +380,14 @@ public class TestChoreService {
|
||||||
@Test
|
@Test
|
||||||
public void testForceTrigger() throws InterruptedException {
|
public void testForceTrigger() throws InterruptedException {
|
||||||
final int period = 100;
|
final int period = 100;
|
||||||
final int delta = 10;
|
final int delta = period/10;
|
||||||
ChoreService service = new ChoreService("testForceTrigger");
|
ChoreService service = new ChoreService("testForceTrigger");
|
||||||
final CountingChore chore = new CountingChore("countingChore", period);
|
final CountingChore chore = new CountingChore("countingChore", period);
|
||||||
try {
|
try {
|
||||||
service.scheduleChore(chore);
|
service.scheduleChore(chore);
|
||||||
Thread.sleep(10 * period + delta);
|
Thread.sleep(10 * period + delta);
|
||||||
|
|
||||||
assertTrue(chore.getCountOfChoreCalls() == 11);
|
assertEquals("10 periods have elapsed.", 11, chore.getCountOfChoreCalls());
|
||||||
|
|
||||||
// Force five runs of the chore to occur, sleeping between triggers to ensure the
|
// Force five runs of the chore to occur, sleeping between triggers to ensure the
|
||||||
// chore has time to run
|
// chore has time to run
|
||||||
|
@ -402,12 +402,14 @@ public class TestChoreService {
|
||||||
chore.triggerNow();
|
chore.triggerNow();
|
||||||
Thread.sleep(delta);
|
Thread.sleep(delta);
|
||||||
|
|
||||||
assertTrue("" + chore.getCountOfChoreCalls(), chore.getCountOfChoreCalls() == 16);
|
assertEquals("Trigger was called 5 times after 10 periods.", 16,
|
||||||
|
chore.getCountOfChoreCalls());
|
||||||
|
|
||||||
Thread.sleep(10 * period + delta);
|
Thread.sleep(10 * period + delta);
|
||||||
|
|
||||||
// Be loosey-goosey. It used to be '26' but it was a big flakey relying on timing.
|
// Be loosey-goosey. It used to be '26' but it was a big flakey relying on timing.
|
||||||
assertTrue("" + chore.getCountOfChoreCalls(), chore.getCountOfChoreCalls() > 16);
|
assertTrue("Expected at least 16 invocations, instead got " + chore.getCountOfChoreCalls(),
|
||||||
|
chore.getCountOfChoreCalls() > 16);
|
||||||
} finally {
|
} finally {
|
||||||
shutdownService(service);
|
shutdownService(service);
|
||||||
}
|
}
|
||||||
|
@ -419,7 +421,7 @@ public class TestChoreService {
|
||||||
ChoreService service = new ChoreService("testCorePoolIncrease", initialCorePoolSize, false);
|
ChoreService service = new ChoreService("testCorePoolIncrease", initialCorePoolSize, false);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
assertEquals("Should have a core pool of size: " + initialCorePoolSize, initialCorePoolSize,
|
assertEquals("Setting core pool size gave unexpected results.", initialCorePoolSize,
|
||||||
service.getCorePoolSize());
|
service.getCorePoolSize());
|
||||||
|
|
||||||
final int slowChorePeriod = 100;
|
final int slowChorePeriod = 100;
|
||||||
|
@ -703,7 +705,7 @@ public class TestChoreService {
|
||||||
Stoppable stopperForGroup1 = new SampleStopper();
|
Stoppable stopperForGroup1 = new SampleStopper();
|
||||||
Stoppable stopperForGroup2 = new SampleStopper();
|
Stoppable stopperForGroup2 = new SampleStopper();
|
||||||
final int period = 100;
|
final int period = 100;
|
||||||
final int delta = 10;
|
final int delta = period/10;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
ScheduledChore chore1_group1 = new DoNothingChore("c1g1", stopperForGroup1, period);
|
ScheduledChore chore1_group1 = new DoNothingChore("c1g1", stopperForGroup1, period);
|
||||||
|
|
Loading…
Reference in New Issue