Skip to content

Commit b142235

Browse files
jmikolaalcaeus
authored andcommitted
Extract fail point management to a trait used by Context
1 parent 63d8d4f commit b142235

File tree

4 files changed

+47
-39
lines changed

4 files changed

+47
-39
lines changed

tests/UnifiedSpecTests/Context.php

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
use LogicException;
66
use MongoDB\Client;
77
use MongoDB\Driver\ClientEncryption;
8-
use MongoDB\Driver\Server;
98
use MongoDB\Driver\ServerApi;
109
use MongoDB\Model\BSONArray;
1110
use MongoDB\Tests\FunctionalTestCase;
@@ -39,6 +38,8 @@
3938
*/
4039
final class Context
4140
{
41+
use ManagesFailPointsTrait;
42+
4243
private ?string $activeClient = null;
4344

4445
private EntityMap $entityMap;
@@ -61,9 +62,6 @@ final class Context
6162

6263
private ?object $advanceClusterTime = null;
6364

64-
/** @var list<array{failPoint: stdClass, server: Server}> */
65-
private array $failPoints = [];
66-
6765
public function __construct(Client $internalClient, string $uri)
6866
{
6967
$this->entityMap = new EntityMap();
@@ -236,20 +234,6 @@ public function stopEventCollectors(): void
236234
}
237235
}
238236

239-
public function registerFailPoint(stdClass $failPoint, Server $server): void
240-
{
241-
$this->failPoints[] = [
242-
'failPoint' => $failPoint,
243-
'server' => $server,
244-
];
245-
}
246-
247-
/** @return list<array{failPoint: stdClass, server: Server}> */
248-
public function getFailPoints(): array
249-
{
250-
return $this->failPoints;
251-
}
252-
253237
/** @param string|array $readPreferenceTags */
254238
private function convertReadPreferenceTags($readPreferenceTags): array
255239
{
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
3+
namespace MongoDB\Tests\UnifiedSpecTests;
4+
5+
use MongoDB\Driver\Server;
6+
use MongoDB\Operation\DatabaseCommand;
7+
use stdClass;
8+
9+
use function PHPUnit\Framework\assertIsString;
10+
use function PHPUnit\Framework\assertObjectHasAttribute;
11+
12+
trait ManagesFailPointsTrait
13+
{
14+
/** @var list<list{string, Server}> */
15+
private array $failPointsAndServers = [];
16+
17+
public function configureFailPoint(stdClass $failPoint, Server $server): void
18+
{
19+
assertObjectHasAttribute('configureFailPoint', $failPoint);
20+
assertIsString($failPoint->configureFailPoint);
21+
assertObjectHasAttribute('mode', $failPoint);
22+
23+
$operation = new DatabaseCommand('admin', $failPoint);
24+
$operation->execute($server);
25+
26+
if ($failPoint->mode !== 'off') {
27+
$this->failPointsAndServers[] = [$failPoint->configureFailPoint, $server];
28+
}
29+
}
30+
31+
public function disableFailPoints(): void
32+
{
33+
foreach ($this->failPointsAndServers as [$failPoint, $server]) {
34+
$operation = new DatabaseCommand('admin', ['configureFailPoint' => $failPoint, 'mode' => 'off']);
35+
$operation->execute($server);
36+
}
37+
38+
$this->failPointsAndServers = [];
39+
}
40+
}

tests/UnifiedSpecTests/Operation.php

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
use MongoDB\Model\CollectionInfo;
1717
use MongoDB\Model\DatabaseInfo;
1818
use MongoDB\Model\IndexInfo;
19-
use MongoDB\Operation\DatabaseCommand;
2019
use MongoDB\Operation\FindOneAndReplace;
2120
use MongoDB\Operation\FindOneAndUpdate;
2221
use PHPUnit\Framework\Assert;
@@ -909,15 +908,17 @@ private function executeForTestRunner()
909908
assertArrayHasKey('failPoint', $args);
910909
assertInstanceOf(Client::class, $args['client']);
911910
assertInstanceOf(stdClass::class, $args['failPoint']);
912-
$this->createFailPoint($args['failPoint'], $args['client']->getManager()->selectServer());
911+
// Configure the fail point via the Context so it can later be disabled
912+
$this->context->configureFailPoint($args['failPoint'], $args['client']->getManager()->selectServer());
913913
break;
914914
case 'targetedFailPoint':
915915
assertArrayHasKey('session', $args);
916916
assertArrayHasKey('failPoint', $args);
917917
assertInstanceOf(Session::class, $args['session']);
918918
assertInstanceOf(stdClass::class, $args['failPoint']);
919919
assertNotNull($args['session']->getServer(), 'Session is pinned');
920-
$this->createFailPoint($args['failPoint'], $args['session']->getServer());
920+
// Configure the fail point via the Context so it can later be disabled
921+
$this->context->configureFailPoint($args['failPoint'], $args['session']->getServer());
921922
break;
922923
case 'loop':
923924
assertArrayHasKey('operations', $args);
@@ -936,14 +937,6 @@ private function executeForTestRunner()
936937
}
937938
}
938939

939-
private function createFailPoint(stdClass $failPoint, Server $server): void
940-
{
941-
$operation = new DatabaseCommand('admin', $failPoint);
942-
$operation->execute($server);
943-
944-
$this->context->registerFailPoint($failPoint, $server);
945-
}
946-
947940
private function getIndexNames(string $databaseName, string $collectionName): array
948941
{
949942
return array_map(

tests/UnifiedSpecTests/UnifiedTestRunner.php

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ private function doTestCase(stdClass $test, string $schemaVersion, ?array $runOn
217217
$context->stopEventObservers();
218218
$context->stopEventCollectors();
219219
} finally {
220-
$this->disableFailPoints($context->getFailPoints());
220+
$context->disableFailPoints();
221221
}
222222

223223
if (isset($test->expectEvents)) {
@@ -231,15 +231,6 @@ private function doTestCase(stdClass $test, string $schemaVersion, ?array $runOn
231231
}
232232
}
233233

234-
/** @param list<array{failPoint: stdClass, server: Server}> $failPoints */
235-
private function disableFailPoints(array $failPoints): void
236-
{
237-
foreach ($failPoints as ['failPoint' => $failPoint, 'server' => $server]) {
238-
$operation = new DatabaseCommand('admin', ['configureFailPoint' => $failPoint, 'mode' => 'off']);
239-
$operation->execute($server);
240-
}
241-
}
242-
243234
/**
244235
* Checks server version and topology requirements.
245236
*

0 commit comments

Comments
 (0)