diff --git a/test/test_collection.py b/test/test_collection.py index 3f275aba1..acd2c2c1a 100644 --- a/test/test_collection.py +++ b/test/test_collection.py @@ -2079,6 +2079,8 @@ class TestCollection(IntegrationTest): self.assertEqual(2, result.find_one({"_id": "dog"})["value"]) self.assertEqual(1, result.find_one({"_id": "mouse"})["value"]) + # Create the output database. + db.client.mrtestdb.mrunittests.insert_one({}) result = db.test.map_reduce(map, reduce, out=SON([('replace', 'mrunittests'), ('db', 'mrtestdb') @@ -2090,7 +2092,9 @@ class TestCollection(IntegrationTest): full_result = db.test.map_reduce(map, reduce, out='mrunittests', full_response=True) - self.assertEqual(6, full_result["counts"]["emit"]) + self.assertEqual('mrunittests', full_result["result"]) + if client_context.version < (4, 3): + self.assertEqual(6, full_result["counts"]["emit"]) result = db.test.map_reduce(map, reduce, out='mrunittests', limit=2) self.assertEqual(2, result.find_one({"_id": "cat"})["value"]) @@ -2111,7 +2115,9 @@ class TestCollection(IntegrationTest): full_result = db.test.inline_map_reduce(map, reduce, full_response=True) - self.assertEqual(6, full_result["counts"]["emit"]) + self.assertEqual(3, len(full_result["results"])) + if client_context.version < (4, 3): + self.assertEqual(6, full_result["counts"]["emit"]) with self.write_concern_collection() as coll: coll.map_reduce(map, reduce, 'output') diff --git a/test/test_custom_types.py b/test/test_custom_types.py index 3d937082f..ba0bb0ca6 100644 --- a/test/test_custom_types.py +++ b/test/test_custom_types.py @@ -663,7 +663,10 @@ class TestCollectionWCustomType(IntegrationTest): full_result = test.inline_map_reduce(map, reduce, full_response=True) - self.assertEqual(3, full_result["counts"]["emit"]) + result = full_result['results'] + self.assertTrue(isinstance(result, list)) + self.assertEqual(1, len(result)) + self.assertEqual(result[0]["_id"], 'ABCD') def test_find_one_and__w_custom_type_decoder(self): db = self.db diff --git a/test/test_read_concern.py b/test/test_read_concern.py index 4d7fcaf94..abd69309a 100644 --- a/test/test_read_concern.py +++ b/test/test_read_concern.py @@ -30,9 +30,13 @@ class TestReadConcern(PyMongoTestCase): cls.listener = OvertCommandListener() cls.client = single_client(event_listeners=[cls.listener]) cls.db = cls.client.pymongo_test + client_context.client.pymongo_test.create_collection('coll') + + @classmethod + def tearDownClass(cls): + client_context.client.pymongo_test.drop_collection('coll') def tearDown(self): - self.db.coll.drop() self.listener.results.clear() def test_read_concern(self): @@ -104,12 +108,8 @@ class TestReadConcern(PyMongoTestCase): def test_aggregate_out(self): coll = self.db.get_collection('coll', read_concern=ReadConcern('local')) - try: - tuple(coll.aggregate([{'$match': {'field': 'value'}}, - {'$out': 'output_collection'}])) - except OperationFailure: - # "ns doesn't exist" - pass + tuple(coll.aggregate([{'$match': {'field': 'value'}}, + {'$out': 'output_collection'}])) # Aggregate with $out supports readConcern MongoDB 4.2 onwards. if client_context.version >= (4, 1): @@ -121,26 +121,18 @@ class TestReadConcern(PyMongoTestCase): def test_map_reduce_out(self): coll = self.db.get_collection('coll', read_concern=ReadConcern('local')) - try: - tuple(coll.map_reduce('function() { emit(this._id, this.value); }', - 'function(key, values) { return 42; }', - out='output_collection')) - except OperationFailure: - # "ns doesn't exist" - pass + coll.map_reduce('function() { emit(this._id, this.value); }', + 'function(key, values) { return 42; }', + out='output_collection') self.assertNotIn('readConcern', self.listener.results['started'][0].command) if client_context.version.at_least(3, 1, 9, -1): self.listener.results.clear() - try: - tuple(coll.map_reduce( - 'function() { emit(this._id, this.value); }', - 'function(key, values) { return 42; }', - out={'inline': 1})) - except OperationFailure: - # "ns doesn't exist" - pass + coll.map_reduce( + 'function() { emit(this._id, this.value); }', + 'function(key, values) { return 42; }', + out={'inline': 1}) self.assertEqual( {'level': 'local'}, self.listener.results['started'][0].command['readConcern']) @@ -148,13 +140,9 @@ class TestReadConcern(PyMongoTestCase): @client_context.require_version_min(3, 1, 9, -1) def test_inline_map_reduce(self): coll = self.db.get_collection('coll', read_concern=ReadConcern('local')) - try: - tuple(coll.inline_map_reduce( - 'function() { emit(this._id, this.value); }', - 'function(key, values) { return 42; }')) - except OperationFailure: - # "ns doesn't exist" - pass + tuple(coll.inline_map_reduce( + 'function() { emit(this._id, this.value); }', + 'function(key, values) { return 42; }')) self.assertEqual( {'level': 'local'}, self.listener.results['started'][0].command['readConcern']) diff --git a/test/test_session.py b/test/test_session.py index 461a26a03..02352022e 100644 --- a/test/test_session.py +++ b/test/test_session.py @@ -857,14 +857,17 @@ class TestCausalConsistency(unittest.TestCase): map_reduce_exc = None if client_context.version.at_least(4, 1, 12): map_reduce_exc = OperationFailure - self._test_reads( - lambda coll, session: coll.map_reduce( - 'function() {}', 'function() {}', 'inline', session=session), - exception=map_reduce_exc) - self._test_reads( - lambda coll, session: coll.inline_map_reduce( - 'function() {}', 'function() {}', session=session), - exception=map_reduce_exc) + # SERVER-44635 The mapReduce in aggregation project added back + # support for casually consistent mapReduce. + if client_context.version < (4, 3): + self._test_reads( + lambda coll, session: coll.map_reduce( + 'function() {}', 'function() {}', 'inline', session=session), + exception=map_reduce_exc) + self._test_reads( + lambda coll, session: coll.inline_map_reduce( + 'function() {}', 'function() {}', session=session), + exception=map_reduce_exc) if (not client_context.is_mongos and not client_context.version.at_least(4, 1, 0)): def scan(coll, session):