Files
mongo-php-driver/tests/server/server-executeReadCommand-002.phpt
Jeremy Mikola ae74c7a1cd PHPC-1752: Fix tests for load balanced topologies
Skip tests expecting gossiped $clusterTime on first command. This may be a bug in libmongoc, per CDRIVER-4174.

Make exception assertion in TLS tests more flexible. Expect parent ConnectionException to accomodate load balanced clients, which do not use server selection. Both exception messages will include a common prefix from libmongoc.

Do not assert exception message for failed TLS connection. While the message will typically include "TLS handshake failed", that is not guaranteed.

Make ping response assertions in TLS tests more flexible. Sharded clusters and replica sets may return additional fields in the ping response (e.g. cluster time). These tests were originally written to expect a standalone response.

Allow unset RTT (-1) for load balanced client.

Note SRV caveat for is_replica_set test function.

Allow load balancers for tests that require sharded clusters. Load balancers should always proxy a mongos, so existing skip functions that check for mongos can now allow a load balancer. If there is some incompatibility specific to LBs, we can address that later with a LB-specific skip function.

Require mongos for pinning tests. Pinning does not apply to load balanced clients, since there is only one connection.
2021-10-15 13:44:32 -04:00

77 lines
2.3 KiB
PHP

--TEST--
MongoDB\Driver\Server::executeReadCommand() pins transaction to server
--SKIPIF--
<?php require __DIR__ . "/../utils/basic-skipif.inc"; ?>
<?php skip_if_not_mongos(); ?>
<?php skip_if_no_transactions(); ?>
<?php skip_if_not_clean(); ?>
--FILE--
<?php
require_once __DIR__ . "/../utils/basic.inc";
$manager = create_test_manager();
/* Create collections as that can't be (automatically) done in a transaction */
$manager->executeCommand(
DATABASE_NAME,
new \MongoDB\Driver\Command([ 'create' => COLLECTION_NAME ]),
[ 'writeConcern' => new \MongoDB\Driver\WriteConcern( \MongoDB\Driver\WriteConcern::MAJORITY ) ]
);
$servers = $manager->getServers();
$selectedServer = array_pop($servers);
$wrongServer = array_pop($servers);
var_dump($selectedServer != $wrongServer);
$session = $manager->startSession();
var_dump($session->getServer() instanceof \MongoDB\Driver\Server);
$session->startTransaction();
var_dump($session->getServer() instanceof \MongoDB\Driver\Server);
$command = new MongoDB\Driver\Command([
'aggregate' => COLLECTION_NAME,
'pipeline' => [['$group' => ['_id' => 1]]],
'cursor' => (object) []
]);
$selectedServer->executeReadCommand(DATABASE_NAME, $command, ['session' => $session]);
var_dump($session->getServer() instanceof \MongoDB\Driver\Server);
$bulk = new MongoDB\Driver\BulkWrite();
$bulk->insert(['x' => 1]);
$selectedServer->executeBulkWrite(NS, $bulk, ['session' => $session]);
echo throws(function () use ($wrongServer, $session) {
$command = new MongoDB\Driver\Command([
'aggregate' => COLLECTION_NAME,
'pipeline' => [['$group' => ['_id' => 1]]],
'cursor' => (object) []
]);
$wrongServer->executeReadCommand(DATABASE_NAME, $command, ['session' => $session]);
}, \MongoDB\Driver\Exception\RuntimeException::class), "\n";
$session->commitTransaction();
var_dump($session->getServer() instanceof \MongoDB\Driver\Server);
$bulk = new MongoDB\Driver\BulkWrite();
$bulk->insert(['x' => 1]);
$selectedServer->executeBulkWrite(NS, $bulk, ['session' => $session]);
var_dump($session->getServer() instanceof \MongoDB\Driver\Server);
?>
===DONE===
<?php exit(0); ?>
--EXPECT--
bool(true)
bool(false)
bool(false)
bool(true)
OK: Got MongoDB\Driver\Exception\RuntimeException
Requested server id does not matched pinned server id
bool(true)
bool(false)
===DONE===