Skip to content

Commit

Permalink
Fix flaky tests: use nanoseconds instead of milliseconds
Browse files Browse the repository at this point in the history
Operations may take less than 1 millisecond at powerful machines, so rounding to milliseconds
results to 0 time duration. Usage of nanoseconds allows to make tests more stable
  • Loading branch information
valfirst authored and jekh committed Jul 16, 2017
1 parent c4cb0fe commit 5d7f789
Showing 1 changed file with 17 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ public void testCanClearDNSCache() {
resolver.resolve("www.msn.com");
long finish = System.nanoTime();

assertNotEquals("Expected non-zero DNS lookup time for www.msn.com after clearing DNS cache", 0, TimeUnit.MILLISECONDS.convert(finish - start, TimeUnit.NANOSECONDS));
assertNotEquals("Expected non-zero DNS lookup time for www.msn.com after clearing DNS cache", 0, finish - start);
}

@Test
Expand All @@ -80,17 +80,17 @@ public void testCachedPositiveLookup() {
resolver.resolve("news.bing.com");
long finish = System.nanoTime();

long uncachedLookupMs = TimeUnit.MILLISECONDS.convert(finish - start, TimeUnit.NANOSECONDS);
long uncachedLookupNs = finish - start;

assertNotEquals("Expected non-zero DNS lookup time for news.bing.com on first lookup", 0, uncachedLookupMs);
assertNotEquals("Expected non-zero DNS lookup time for news.bing.com on first lookup", 0, uncachedLookupNs);

start = System.nanoTime();
resolver.resolve("news.bing.com");
finish = System.nanoTime();

long cachedLookupMs = TimeUnit.MILLISECONDS.convert(finish - start, TimeUnit.NANOSECONDS);
long cachedLookupNs = finish - start;

assertTrue("Expected extremely fast DNS lookup time for news.bing.com on second (cached) lookup. Uncached: " + uncachedLookupMs + "ms; cached: " + cachedLookupMs + "ms.", cachedLookupMs <= uncachedLookupMs / 2);
assertTrue("Expected extremely fast DNS lookup time for news.bing.com on second (cached) lookup. Uncached: " + uncachedLookupNs + "ns; cached: " + cachedLookupNs + "ns.", cachedLookupNs <= uncachedLookupNs / 2);
}

@Test
Expand All @@ -99,17 +99,17 @@ public void testCachedNegativeLookup() {
resolver.resolve("fake.notarealaddress");
long finish = System.nanoTime();

long uncachedLookupMs = TimeUnit.MILLISECONDS.convert(finish - start, TimeUnit.NANOSECONDS);
long uncachedLookupNs = finish - start;

assertNotEquals("Expected non-zero DNS lookup time for fake.notarealaddress on first lookup", 0, uncachedLookupMs);
assertNotEquals("Expected non-zero DNS lookup time for fake.notarealaddress on first lookup", 0, uncachedLookupNs);

start = System.nanoTime();
resolver.resolve("fake.notarealaddress");
finish = System.nanoTime();

long cachedLookupMs = TimeUnit.MILLISECONDS.convert(finish - start, TimeUnit.NANOSECONDS);
long cachedLookupNs = finish - start;

assertTrue("Expected extremely fast DNS lookup time for fake.notarealaddress on second (cached) lookup. Uncached: " + uncachedLookupMs + "ms; cached: " + cachedLookupMs + "ms.", cachedLookupMs <= uncachedLookupMs / 2);
assertTrue("Expected extremely fast DNS lookup time for fake.notarealaddress on second (cached) lookup. Uncached: " + uncachedLookupNs + "ns; cached: " + cachedLookupNs + "ns.", cachedLookupNs <= uncachedLookupNs / 2);
}

@Test
Expand All @@ -134,7 +134,7 @@ public void testSetPositiveCacheTtl() throws InterruptedException {
assertNotNull("Collection of resolved addresses should never be null", addresses);
assertNotEquals("Expected to find addresses for www.msn.com", 0, addresses.size());

assertNotEquals("Expected non-zero DNS lookup time for www.msn.com after setting positive cache TTL", 0, TimeUnit.MILLISECONDS.convert(finish - start, TimeUnit.NANOSECONDS));
assertNotEquals("Expected non-zero DNS lookup time for www.msn.com after setting positive cache TTL", 0, finish - start);
}

@Test
Expand Down Expand Up @@ -162,7 +162,7 @@ public void testSetNegativeCacheTtl() throws InterruptedException {
assertNotNull("Collection of resolved addresses should never be null", addresses);
assertEquals("Expected to find no addresses for " + fakeAddress, 0, addresses.size());

assertNotEquals("Expected non-zero DNS lookup time for " + fakeAddress + " after setting negative cache TTL", 0, TimeUnit.MILLISECONDS.convert(finish - start, TimeUnit.NANOSECONDS));
assertNotEquals("Expected non-zero DNS lookup time for " + fakeAddress + " after setting negative cache TTL", 0, finish - start);
}

@Test
Expand All @@ -184,12 +184,12 @@ public void testSetEternalNegativeCacheTtl() {
addresses = resolver.resolve(fakeAddress);
long finish = System.nanoTime();

long cachedLookupMs = TimeUnit.MILLISECONDS.convert(finish - start, TimeUnit.NANOSECONDS);
long cachedLookupNs = finish - start;

assertNotNull("Collection of resolved addresses should never be null", addresses);
assertEquals("Expected to find no addresses for " + fakeAddress, 0, addresses.size());

assertTrue("Expected extremely fast DNS lookup time for " + fakeAddress + " after setting eternal negative cache TTL. Cached lookup time: " + cachedLookupMs + "ms.", cachedLookupMs <= 10);
assertTrue("Expected extremely fast DNS lookup time for " + fakeAddress + " after setting eternal negative cache TTL. Cached lookup time: " + cachedLookupNs + "ns.", cachedLookupNs <= TimeUnit.NANOSECONDS.convert(10, TimeUnit.MILLISECONDS));
}

@Test
Expand All @@ -203,7 +203,7 @@ public void testSetEternalPositiveCacheTtl() {
long one = System.nanoTime();
Collection<InetAddress> addresses = resolver.resolve("www.msn.com");
long two = System.nanoTime();
log.info("Time to resolve address without cache: {}ms", TimeUnit.MILLISECONDS.convert(two - one, TimeUnit.NANOSECONDS));
log.info("Time to resolve address without cache: {}ns", two - one);

// make sure there are addresses, since this is a *positive* TTL test
assertNotNull("Collection of resolved addresses should never be null", addresses);
Expand All @@ -213,13 +213,13 @@ public void testSetEternalPositiveCacheTtl() {
addresses = resolver.resolve("www.msn.com");
long finish = System.nanoTime();

long cachedLookupMs = TimeUnit.MILLISECONDS.convert(finish - start, TimeUnit.NANOSECONDS);
long cachedLookupNs = finish - start;

log.info("Time to resolve address with cache: {}ms", TimeUnit.MILLISECONDS.convert(finish - start, TimeUnit.NANOSECONDS));
log.info("Time to resolve address with cache: {}ns", cachedLookupNs);

assertNotNull("Collection of resolved addresses should never be null", addresses);
assertNotEquals("Expected to find addresses for www.msn.com", 0, addresses.size());

assertTrue("Expected extremely fast DNS lookup time for www.msn.com after setting eternal negative cache TTL. Cached lookup time: " + cachedLookupMs + "ms.", cachedLookupMs <= 10);
assertTrue("Expected extremely fast DNS lookup time for www.msn.com after setting eternal negative cache TTL. Cached lookup time: " + cachedLookupNs + "ns.", cachedLookupNs <= TimeUnit.NANOSECONDS.convert(10, TimeUnit.MILLISECONDS));
}
}

0 comments on commit 5d7f789

Please sign in to comment.