diff --git a/test/change_streams/change-streams-errors.json b/test/change_streams/legacy/change-streams-errors.json similarity index 100% rename from test/change_streams/change-streams-errors.json rename to test/change_streams/legacy/change-streams-errors.json diff --git a/test/change_streams/change-streams-resume-errorLabels.json b/test/change_streams/legacy/change-streams-resume-errorLabels.json similarity index 100% rename from test/change_streams/change-streams-resume-errorLabels.json rename to test/change_streams/legacy/change-streams-resume-errorLabels.json diff --git a/test/change_streams/change-streams-resume-whitelist.json b/test/change_streams/legacy/change-streams-resume-whitelist.json similarity index 100% rename from test/change_streams/change-streams-resume-whitelist.json rename to test/change_streams/legacy/change-streams-resume-whitelist.json diff --git a/test/change_streams/change-streams.json b/test/change_streams/legacy/change-streams.json similarity index 100% rename from test/change_streams/change-streams.json rename to test/change_streams/legacy/change-streams.json diff --git a/test/change_streams/unified/change-streams.json b/test/change_streams/unified/change-streams.json new file mode 100644 index 0000000000..adaf00de2d --- /dev/null +++ b/test/change_streams/unified/change-streams.json @@ -0,0 +1,116 @@ +{ + "description": "change-streams", + "schemaVersion": "1.0", + "createEntities": [ + { + "client": { + "id": "client0" + } + }, + { + "database": { + "id": "database0", + "client": "client0", + "databaseName": "database0" + } + }, + { + "collection": { + "id": "collection0", + "database": "database0", + "collectionName": "collection0" + } + } + ], + "initialData": [ + { + "collectionName": "collection0", + "databaseName": "database0", + "documents": [] + } + ], + "tests": [ + { + "description": "Test array truncation", + "runOnRequirements": [ + { + "minServerVersion": "4.7", + "topologies": [ + "replicaset" + ] + } + ], + "operations": [ + { + "name": "insertOne", + "object": "collection0", + "arguments": { + "document": { + "_id": 1, + "a": 1, + "array": [ + "foo", + { + "a": "bar" + }, + 1, + 2, + 3 + ] + } + } + }, + { + "name": "createChangeStream", + "object": "collection0", + "arguments": { + "pipeline": [] + }, + "saveResultAsEntity": "changeStream0" + }, + { + "name": "updateOne", + "object": "collection0", + "arguments": { + "filter": { + "_id": 1 + }, + "update": [ + { + "$set": { + "array": [ + "foo", + { + "a": "bar" + } + ] + } + } + ] + } + }, + { + "name": "iterateUntilDocumentOrError", + "object": "changeStream0", + "expectResult": { + "operationType": "update", + "ns": { + "db": "database0", + "coll": "collection0" + }, + "updateDescription": { + "updatedFields": {}, + "removedFields": [], + "truncatedArrays": [ + { + "field": "array", + "newSize": 2 + } + ] + } + } + } + ] + } + ] +} diff --git a/test/test_change_stream.py b/test/test_change_stream.py index 293c3bfc1a..5f615e613b 100644 --- a/test/test_change_stream.py +++ b/test/test_change_stream.py @@ -43,6 +43,7 @@ from pymongo.write_concern import WriteConcern from test import client_context, unittest, IntegrationTest +from test.unified_format import generate_test_classes from test.utils import ( EventListener, WhiteListEventListener, rs_or_single_client, wait_until) @@ -1037,7 +1038,7 @@ def test_read_concern(self): pass -class TestAllScenarios(unittest.TestCase): +class TestAllLegacyScenarios(unittest.TestCase): @classmethod @client_context.require_connection @@ -1120,8 +1121,7 @@ def tearDown(self): _TEST_PATH = os.path.join( - os.path.dirname(os.path.realpath(__file__)), 'change_streams' -) + os.path.dirname(os.path.realpath(__file__)), 'change_streams') def camel_to_snake(camel): @@ -1215,7 +1215,7 @@ def run_scenario(self): def create_tests(): - for dirpath, _, filenames in os.walk(_TEST_PATH): + for dirpath, _, filenames in os.walk(os.path.join(_TEST_PATH, 'legacy')): dirname = os.path.split(dirpath)[-1] for filename in filenames: @@ -1251,11 +1251,16 @@ def create_tests(): str(test['description'].replace(" ", "_"))) new_test.__name__ = test_name - setattr(TestAllScenarios, new_test.__name__, new_test) + setattr(TestAllLegacyScenarios, new_test.__name__, new_test) create_tests() +globals().update(generate_test_classes( + os.path.join(_TEST_PATH, 'unified'), + module=__name__,)) + + if __name__ == '__main__': unittest.main()