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:
Sean Busbey 2019-06-22 00:06:39 -05:00
parent 6d08ffcfc6
commit 9aee88e03a
1 changed files with 12 additions and 10 deletions

View File

@ -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);