Commit 8151219a authored by Jeremy Mikola's avatar Jeremy Mikola

Use approximate pivot for maxAwaitTimeMS assertions

Since maxAwaitTimeMS is not a hard limit (the server may reply sooner), this will help avoid fragile test failures.
parent a46774d1
...@@ -154,7 +154,12 @@ class FindFunctionalTest extends FunctionalTestCase ...@@ -154,7 +154,12 @@ class FindFunctionalTest extends FunctionalTestCase
$this->markTestSkipped('maxAwaitTimeMS option is not supported'); $this->markTestSkipped('maxAwaitTimeMS option is not supported');
} }
$maxAwaitTimeMS = 10; $maxAwaitTimeMS = 100;
/* Calculate an approximate pivot to use for time assertions. We will
* assert that the duration of blocking responses is greater than this
* value, and vice versa. */
$pivot = ($maxAwaitTimeMS * 0.001) * 0.9;
// Create a capped collection. // Create a capped collection.
$databaseName = $this->getDatabaseName(); $databaseName = $this->getDatabaseName();
...@@ -183,7 +188,7 @@ class FindFunctionalTest extends FunctionalTestCase ...@@ -183,7 +188,7 @@ class FindFunctionalTest extends FunctionalTestCase
$startTime = microtime(true); $startTime = microtime(true);
$it->rewind(); $it->rewind();
$duration = microtime(true) - $startTime; $duration = microtime(true) - $startTime;
$this->assertLessThan($maxAwaitTimeMS * 0.001, $duration); $this->assertLessThan($pivot, $duration);
$this->assertTrue($it->valid()); $this->assertTrue($it->valid());
$this->assertSameDocument(['_id' => 1], $it->current()); $this->assertSameDocument(['_id' => 1], $it->current());
...@@ -193,7 +198,7 @@ class FindFunctionalTest extends FunctionalTestCase ...@@ -193,7 +198,7 @@ class FindFunctionalTest extends FunctionalTestCase
$startTime = microtime(true); $startTime = microtime(true);
$it->next(); $it->next();
$duration = microtime(true) - $startTime; $duration = microtime(true) - $startTime;
$this->assertLessThan($maxAwaitTimeMS * 0.001, $duration); $this->assertLessThan($pivot, $duration);
$this->assertTrue($it->valid()); $this->assertTrue($it->valid());
$this->assertSameDocument(['_id' => 2], $it->current()); $this->assertSameDocument(['_id' => 2], $it->current());
...@@ -206,7 +211,7 @@ class FindFunctionalTest extends FunctionalTestCase ...@@ -206,7 +211,7 @@ class FindFunctionalTest extends FunctionalTestCase
$startTime = microtime(true); $startTime = microtime(true);
$it->next(); $it->next();
$duration = microtime(true) - $startTime; $duration = microtime(true) - $startTime;
$this->assertGreaterThanOrEqual($maxAwaitTimeMS * 0.001, $duration); $this->assertGreaterThan($pivot, $duration);
$this->assertLessThan(0.5, $duration); $this->assertLessThan(0.5, $duration);
$this->assertFalse($it->valid()); $this->assertFalse($it->valid());
......
...@@ -380,6 +380,11 @@ class WatchFunctionalTest extends FunctionalTestCase ...@@ -380,6 +380,11 @@ class WatchFunctionalTest extends FunctionalTestCase
* ensure we see the write. */ * ensure we see the write. */
$maxAwaitTimeMS = 100; $maxAwaitTimeMS = 100;
/* Calculate an approximate pivot to use for time assertions. We will
* assert that the duration of blocking responses is greater than this
* value, and vice versa. */
$pivot = ($maxAwaitTimeMS * 0.001) * 0.9;
$operation = new Watch($this->manager, $this->getDatabaseName(), $this->getCollectionName(), [], ['maxAwaitTimeMS' => $maxAwaitTimeMS]); $operation = new Watch($this->manager, $this->getDatabaseName(), $this->getCollectionName(), [], ['maxAwaitTimeMS' => $maxAwaitTimeMS]);
$changeStream = $operation->execute($this->getPrimaryServer()); $changeStream = $operation->execute($this->getPrimaryServer());
...@@ -391,7 +396,7 @@ class WatchFunctionalTest extends FunctionalTestCase ...@@ -391,7 +396,7 @@ class WatchFunctionalTest extends FunctionalTestCase
$startTime = microtime(true); $startTime = microtime(true);
$changeStream->rewind(); $changeStream->rewind();
$duration = microtime(true) - $startTime; $duration = microtime(true) - $startTime;
$this->assertGreaterThanOrEqual($maxAwaitTimeMS * 0.001, $duration); $this->assertGreaterThan($pivot, $duration);
$this->assertLessThan(0.5, $duration); $this->assertLessThan(0.5, $duration);
$this->assertFalse($changeStream->valid()); $this->assertFalse($changeStream->valid());
...@@ -401,7 +406,7 @@ class WatchFunctionalTest extends FunctionalTestCase ...@@ -401,7 +406,7 @@ class WatchFunctionalTest extends FunctionalTestCase
$startTime = microtime(true); $startTime = microtime(true);
$changeStream->next(); $changeStream->next();
$duration = microtime(true) - $startTime; $duration = microtime(true) - $startTime;
$this->assertGreaterThanOrEqual($maxAwaitTimeMS * 0.001, $duration); $this->assertGreaterThan($pivot, $duration);
$this->assertLessThan(0.5, $duration); $this->assertLessThan(0.5, $duration);
$this->assertFalse($changeStream->valid()); $this->assertFalse($changeStream->valid());
...@@ -413,7 +418,7 @@ class WatchFunctionalTest extends FunctionalTestCase ...@@ -413,7 +418,7 @@ class WatchFunctionalTest extends FunctionalTestCase
$startTime = microtime(true); $startTime = microtime(true);
$changeStream->next(); $changeStream->next();
$duration = microtime(true) - $startTime; $duration = microtime(true) - $startTime;
$this->assertLessThan($maxAwaitTimeMS * 0.001, $duration); $this->assertLessThan($pivot, $duration);
$this->assertTrue($changeStream->valid()); $this->assertTrue($changeStream->valid());
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment