mirror of
https://github.com/macintoshplus/mongo-php-driver.git
synced 2026-03-25 17:32:28 +01:00
* Introduce MongoDB\Driver\ServerApi * Accept serverApi driver option * Introduce create_test_manager factory to create manager A centralised entry point is required to inject the API_VERSION env variable later. * Add build variant to test with requireApiVersion=true * Fix wrong configuration for auth variable This changed when migrating from our own scripts to drivers-evergreen-tools and was not updated properly, causing all tests to run with auth disabled. * Declare ZEND_PARSE_PARAMETERS_NONE macro This macro is missing on PHP < 7.3 * Remove duplicated API param storage * Add missing semicolons * Add ZEND_PARSE_PARAMETERS_NON_EX macro * Extract error handling functionality to separate macros * Throw if internal mongoc_server_api_t is already initialised * Use imported namespaces in tools file * Fix type info for reflection * Use American English spelling * Only use typed serialize signature on PHP 8+ * Update PHONGO_PARSE_PARAMETERS_NONE macro for PHP < 7.3 * Remove usage of ZEND_STRL within zend_hash_str_add This causes compile failures on PHP < 7.3 that I have yet to understand. * Fix errors in new PHONGO_PARSE_PARAMETERS macros
87 lines
2.1 KiB
PHP
87 lines
2.1 KiB
PHP
--TEST--
|
|
MongoDB\Driver\Cursor collection dropped during tailable iteration
|
|
--SKIPIF--
|
|
<?php require __DIR__ . "/../utils/basic-skipif.inc"; ?>
|
|
<?php skip_if_not_live(); ?>
|
|
<?php skip_if_not_clean(); ?>
|
|
--FILE--
|
|
<?php
|
|
require_once __DIR__ . "/../utils/basic.inc";
|
|
|
|
function insert(MongoDB\Driver\Manager $manager, $from, $to = null)
|
|
{
|
|
if ($to === null) {
|
|
$to = $from;
|
|
}
|
|
|
|
$bulkWrite = new MongoDB\Driver\BulkWrite;
|
|
|
|
for ($i = $from; $i <= $to; $i++) {
|
|
$bulkWrite->insert(['_id' => $i]);
|
|
}
|
|
|
|
$writeResult = $manager->executeBulkWrite(NS, $bulkWrite);
|
|
|
|
printf("Inserted %d document(s): %s\n", $writeResult->getInsertedCount(), implode(', ', range($from, $to)));
|
|
}
|
|
|
|
$manager = create_test_manager();
|
|
|
|
$manager->executeCommand(DATABASE_NAME, new MongoDB\Driver\Command([
|
|
'create' => COLLECTION_NAME,
|
|
'capped' => true,
|
|
'size' => 1048576,
|
|
]));
|
|
|
|
insert($manager, 1, 3);
|
|
|
|
echo throws(function() use ($manager) {
|
|
$cursor = $manager->executeQuery(NS, new MongoDB\Driver\Query([], ['tailable' => true]));
|
|
$it = new IteratorIterator($cursor);
|
|
|
|
$numAwaitAttempts = 0;
|
|
$maxAwaitAttempts = 7;
|
|
|
|
for ($it->rewind(); $numAwaitAttempts < $maxAwaitAttempts; $it->next()) {
|
|
$document = $it->current();
|
|
|
|
if ($document !== null) {
|
|
printf("{_id: %d}\n", $document->_id);
|
|
continue;
|
|
}
|
|
|
|
if ($numAwaitAttempts === 2) {
|
|
insert($manager, 4, 6);
|
|
}
|
|
|
|
if ($numAwaitAttempts === 5) {
|
|
$manager->executeCommand(DATABASE_NAME, new MongoDB\Driver\Command(['drop' => COLLECTION_NAME]));
|
|
}
|
|
|
|
echo "Awaiting results...\n";
|
|
$numAwaitAttempts += 1;
|
|
}
|
|
}, 'MongoDB\Driver\Exception\RuntimeException'), "\n";
|
|
|
|
?>
|
|
===DONE===
|
|
<?php exit(0); ?>
|
|
--EXPECTF--
|
|
Inserted 3 document(s): 1, 2, 3
|
|
{_id: 1}
|
|
{_id: 2}
|
|
{_id: 3}
|
|
Awaiting results...
|
|
Awaiting results...
|
|
Inserted 3 document(s): 4, 5, 6
|
|
Awaiting results...
|
|
{_id: 4}
|
|
{_id: 5}
|
|
{_id: 6}
|
|
Awaiting results...
|
|
Awaiting results...
|
|
Awaiting results...
|
|
OK: Got MongoDB\Driver\Exception\RuntimeException
|
|
%Scollection dropped%S
|
|
===DONE===
|