mirror of
https://github.com/macintoshplus/mongo-php-driver.git
synced 2026-03-25 17:32:28 +01:00
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.
57 lines
2.1 KiB
PHP
57 lines
2.1 KiB
PHP
--TEST--
|
|
MongoDB\Driver\Manager::executeBulkWrite() BulkWriteException inherits labels from previous exception
|
|
--SKIPIF--
|
|
<?php require __DIR__ . "/../utils/basic-skipif.inc"; ?>
|
|
<?php skip_if_not_libmongoc_crypto(); ?>
|
|
<?php skip_if_not_replica_set_or_sharded_cluster_with_replica_set(); ?>
|
|
<?php skip_if_server_version('<', '4.0'); ?>
|
|
<?php skip_if_no_failcommand_failpoint(); ?>
|
|
<?php skip_if_not_clean(); ?>
|
|
--FILE--
|
|
<?php
|
|
require_once __DIR__ . "/../utils/basic.inc";
|
|
|
|
$manager = create_test_manager();
|
|
|
|
// Select a specific server for future operations to avoid mongos switching in sharded clusters
|
|
$server = $manager->selectServer(new \MongoDB\Driver\ReadPreference('primary'));
|
|
|
|
// Create collection since it can't be (automatically) done within the transaction
|
|
$majority = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY);
|
|
$server->executeWriteCommand(
|
|
DATABASE_NAME,
|
|
new MongoDB\Driver\Command(['create' => COLLECTION_NAME]),
|
|
['writeConcern' => $majority]
|
|
);
|
|
|
|
configureTargetedFailPoint($server, 'failCommand', [ 'times' => 1 ], [
|
|
'failCommands' => ['insert'],
|
|
'closeConnection' => true,
|
|
]);
|
|
|
|
$session = $manager->startSession();
|
|
$session->startTransaction();
|
|
|
|
$bulk = new MongoDB\Driver\BulkWrite;
|
|
$bulk->insert(['x' => 1]);
|
|
|
|
try {
|
|
$server->executeBulkWrite(NS, $bulk, ['session' => $session]);
|
|
} catch (MongoDB\Driver\Exception\BulkWriteException $e) {
|
|
printf("%s(%d): %s\n", get_class($e), $e->getCode(), $e->getMessage());
|
|
var_dump($e->hasErrorLabel('TransientTransactionError'));
|
|
$prev = $e->getPrevious();
|
|
printf("%s(%d): %s\n", get_class($prev), $prev->getCode(), $prev->getMessage());
|
|
var_dump($prev->hasErrorLabel('TransientTransactionError'));
|
|
}
|
|
|
|
?>
|
|
===DONE===
|
|
<?php exit(0); ?>
|
|
--EXPECTF--
|
|
MongoDB\Driver\Exception\BulkWriteException(0): Bulk write failed due to previous MongoDB\Driver\Exception\ConnectionTimeoutException: Failed to send "insert" command with database "%s": Failed to read 4 bytes: socket error or timeout
|
|
bool(true)
|
|
MongoDB\Driver\Exception\ConnectionTimeoutException(%d): Failed to send "insert" command with database "%s": Failed to read 4 bytes: socket error or timeout
|
|
bool(true)
|
|
===DONE===
|