33 Commits

Author SHA1 Message Date
Jeremy Mikola
e9098a56e4 PHPC-2219: Prohibit serializing PackedArray as root documents (#1480)
* PHPC-2219: Prohibit serializing PackedArray as root documents

This adds logic to php_phongo_zval_to_bson_internal() to prohibit serializing PackedArray instances as a root document. Since this function is also used in specific cases to encode a BSON array, a PHONGO_BSON_ALLOW_ROOT_ARRAY flag is introduced to relax the restriction.

* Check if existing field_path element must be freed before overwriting

* Remove function name from Javascript code strings
2023-10-16 13:16:37 -04:00
Jeremy Mikola
d6bef26cdd PHPC-2210 and PHPC-2211: Fix direct BSON copy and toJson memory leak (#1415)
* PHPC-2211: Free intermediary result in php_phongo_bson_to_json()

This was responsible for several memory leaks in MongoDB\BSON\Document's JSON output methods.

* PHPC-2210: Fix direct copying of Document and PackedArray BSON

bson_copy_to() cannot be used with a bson_t originally allocated with bson_new(), since there is no way to revert the bson_t to an uninitialized state.

The previous code with bson_destroy() resulted in invalid reads/writes (reported by Valgrind) and could cause "malloc(): unaligned tcache chunk detected" aborts later in the process during a future, unrelated call to bson_copy_to().

With bson_destroy() removed, the malloc() aborts are avoided but Valgrind reports a leak for the originally allocation by bson_new().

The solution applied here borrows logic from bson_copy_to_excluding_noinit() to do a more flexible copy. bson_copy_to_excluding_noinit() could not be used directly because it requires at least one exclusion field name.

* Run clang-format

Co-authored-by: Andreas Braun <git@alcaeus.org>
2023-04-27 09:21:14 -04:00
Andreas Braun
6887226d34 PHPC-1709: Add typing information to arginfo (#1337)
* Add missing macros for declaring arguments

* Add macros to define disabled constructor and __wakeup

* Define arginfo via stubs for BSON classes

* Declare tentative return types in interfaces

* Add correct return type for __set_state methods

* Generate class entries for BSON classes

* Declare Binary class constants in stub file

* Use stubs in exception classes

* Add stubs for monitoring classes

* Fix wrong JsonSerializable class in BSON stubs

* Disable declaration-after-statement

This is necessary to let the generated arginfo files compile

* Use stubs for driver classes

* Fix deprecation messages in tests

* Add missing macro

* Fix tests relying on value injection

* Parse parameters in disabled constructor/wakup function

* Add note about arginfo files to contribution docs

* Add GitHub action to check generated arginfo files

* PHPC-2115: Use DateTimeInterface in UTCDateTime constructor signature

* Don't install mongodb extension in GitHub actions workflows

* Change indentation in stub files

* Use individual #if conditions for each stub method

* Make disabled constructor/wakeup methods static

* Fix bulkWrite parameter name

* Use %d to match property count in tests

* Ensure all classes with disabled serialisation declare __wakeup
2022-08-03 08:42:07 +02:00
Jeremy Mikola
f97f3efaea PHPC-2094: Relay command comment when constructing a cursor (#1322) 2022-05-24 18:52:07 -04:00
Jeremy Mikola
93efe0aeb6 PHPC-2073: Remove references to pre-3.6 servers (#1305)
* Remove pre-3.6 server versions from Evergreen matrix

* Remove skipped tests for pre-3.6 servers

* Remove old mongo-orchestration configs and Evergreen tasks

* Remove flaky replica set tests

These tests assume a particular replica set member is always the primary, so tag assertions may fail if a different member is elected. The server-getTags-002.phpt test has more flexible assertions for replica set tags, so we can safely remove these tests.
2022-03-01 20:30:00 -05:00
Jeremy Mikola
2db00e0e24 PHPC-2064: Call skip_if_not_clean after other skip functions
"nocache" output from skip_if_not_clean may cause "skip" output from other functions to be ignored. Changing the order so that skip_if_not_clean is always called last will fix this in most cases (excluding tests that call skip_if_not_clean multiple times).
2022-02-10 13:20:52 -05:00
Andreas Braun
b27fa4d019 PHPC-1965 Re-enable PHP 8.1 build on GH Actions (#1258)
* Re-enable PHP 8.1 build on GH Actions

* Work around different error wording in PHP 8.1

* Limit failing tests to PHP < 8.1

* Add tests for PHPC-1839 for PHP >= 8.1
2021-09-07 08:18:08 +02:00
Andreas Braun
deead9687e PHPC-1716 Allow configuring server API version in manager (#1204)
* 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
2021-03-26 15:43:48 +01:00
Derick Rethans
bcbdcbfebf These tests are >= 3.6, as they use changeStreams 2019-02-14 15:35:31 -05:00
Jeremy Mikola
ef06e624c8 $changeStream requires WiredTiger storage engine 2018-06-25 16:17:10 -04:00
Jeremy Mikola
476c7f947b Test suite compatibility with server 4.0.0-rc5 2018-06-15 16:47:12 -04:00
Jeremy Mikola
bf5cf8b33f PHPC-1179: arrayFilters tests don't need to start servers
These tests were only using Mongo Orchestration to ensure a 3.6 server. skip_if_server_version() can be used instead.
2018-05-25 10:41:29 -04:00
Jeremy Mikola
dcc2fdf259 PHPC-1113: Use XFAIL instead of skips for tests to be reimplemented 2018-05-03 11:52:45 -04:00
Jeremy Mikola
27a0452ecf PHPC-1113: Disable tests that start servers with MO (defer to PHPC-1179) 2018-05-02 16:04:09 -04:00
Jeremy Mikola
58fa85e85e PHPC-1113: Use common URI constant 2018-05-02 16:04:09 -04:00
Jeremy Mikola
5f7f350670 PHPC-1113: Replace NEEDS('STANDALONE') with skip function 2018-05-02 16:04:08 -04:00
Jeremy Mikola
b4062f880c PHPC-1113: Replace CLEANUP() with skip function 2018-05-02 16:04:08 -04:00
Jeremy Mikola
3a1362bb8d PHPC-1113: Replace NEEDS('REPLICASET') with skip function 2018-05-02 16:04:08 -04:00
Jeremy Mikola
fe52b484be PHPC-1113: Replace NEEDS_ATLEAST_MONGODB_VERSION() with skip function 2018-05-02 16:04:07 -04:00
Katherine Walker
0e8cf55649 PHPC-1159: Test on specific server versions in Travis CI 2018-04-17 09:35:51 -04:00
Jeremy Mikola
44ee529743 Use longer maxAwaitTimeMS in changeStream test
This makes the test more robust, since 100ms may not be long enough for the change to appear on some runs.
2018-04-12 13:17:55 -04:00
Katherine Walker
bc5ce89caf PHPC-1109: Support batchSize getMore option for command cursors 2018-02-06 13:12:58 -05:00
Jeremy Mikola
343f6e252f PHPC-1029: Remove unused Command options in test
Using $changeStream in an aggregation pipeline implies a tailable/awaitData cursor. Unlike Query, Command does not take these options.
2018-01-26 12:28:02 -05:00
Jeremy Mikola
6ca8c7fbc1 Remove redundant REPLICASET_36 mo environment 2018-01-08 10:28:56 -05:00
Jeremy Mikola
ecaeb2c1a2 Replace tabs with spaces in test files 2017-12-12 08:17:59 -05:00
Derick Rethans
b3dcff2841 Fixed tests, as they need MongoDB 3.6 2017-11-23 17:47:37 +00:00
Derick Rethans
4c338082cb PHPC-1029: Support maxTimeMS getMore option for tailable command cursors 2017-11-23 12:44:22 +00:00
Derick Rethans
6d262023bb PHPC-975: Array Update Improvements 2017-11-21 17:25:02 +00:00
Derick Rethans
5a00dcead0 PHPC-1036: Update test suite for MongoDB 3.6 2017-11-13 18:09:21 +00:00
Jeremy Mikola
e6b8479506 Reorganize SKIPIF blocks in tests and add missing NEEDS() checks 2017-03-15 10:41:04 -04:00
Jeremy Mikola
103aabed31 Add missing extends tests 2016-09-21 16:32:39 -04:00
Jeremy Mikola
7f485f921e PHPC-761: Tests can rely on MongoDB\BSON namespace 2016-08-05 14:06:58 -04:00
Jeremy Mikola
b6c9b45add PHPC-550: Always encode ODS field when serializing Persistable documents
The modified ODS tests return atomic modifiers through bsonSerialize(), which conflicts with __pclass injection (the resulting newObj is neither an update nor a replacement document). Rather than delete these tests, we'll mark them as expecting failure until we allow such functionality in another interface down the line.
2016-02-15 12:49:00 -05:00