Skip to content

Commit c5eae2f

Browse files
committed
Use replica set connection in tests wherever possible.
Most tests now inherit from IntegrationTest and use self.client for all MongoDB operations. self.client is now a replica set connection if an RS is available, otherwise a connection to a standalone.
1 parent 366e11d commit c5eae2f

14 files changed

+76
-119
lines changed

test/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,8 @@ class IntegrationTest(unittest.TestCase):
310310
@classmethod
311311
@client_context.require_connection
312312
def setUpClass(cls):
313-
pass
313+
cls.client = client_context.rs_or_standalone_client
314+
cls.db = cls.client.pymongo_test
314315

315316

316317
class MockClientTest(unittest.TestCase):

test/test_auth.py

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -262,15 +262,11 @@ def setUp(self):
262262
{}).get('authenticationMechanisms', ''):
263263
raise SkipTest('SCRAM-SHA-1 mechanism not enabled')
264264

265-
client = client_context.client
266-
if self.set_name:
267-
client.pymongo_test.add_user('user', 'pass',
268-
roles=['userAdmin', 'readWrite'],
269-
writeConcern={'w': client_context.w})
270-
else:
271-
client.pymongo_test.add_user(
272-
'user', 'pass', roles=['userAdmin', 'readWrite'])
273-
265+
client = client_context.rs_or_standalone_client
266+
client.pymongo_test.add_user(
267+
'user', 'pass',
268+
roles=['userAdmin', 'readWrite'],
269+
writeConcern={'w': client_context.w})
274270

275271
def test_scram_sha1(self):
276272
client = MongoClient(host, port)
@@ -298,7 +294,9 @@ def test_scram_sha1(self):
298294
client.pymongo_test.command('dbstats')
299295

300296
def tearDown(self):
301-
client_context.client.pymongo_test.remove_user('user')
297+
client_context.rs_or_standalone_client.pymongo_test.remove_user(
298+
'user',
299+
w=client_context.w)
302300

303301

304302
class TestAuthURIOptions(unittest.TestCase):
@@ -387,7 +385,7 @@ class TestDelegatedAuth(unittest.TestCase):
387385
@client_context.require_version_max(2, 5, 3)
388386
@client_context.require_version_min(2, 4, 0)
389387
def setUp(self):
390-
self.client = client_context.client
388+
self.client = client_context.rs_or_standalone_client
391389

392390
def tearDown(self):
393391
self.client.pymongo_test.remove_user('user')

test/test_bulk.py

Lines changed: 15 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,21 @@
2222
from bson.py3compat import string_type
2323
from pymongo import MongoClient
2424
from pymongo.errors import BulkWriteError, InvalidOperation, OperationFailure
25-
from test import client_context, unittest, host, port
25+
from test import client_context, unittest, host, port, IntegrationTest
2626
from test.utils import oid_generated_on_client, remove_all_users
2727

2828

29-
@client_context.require_connection
30-
def setUpModule():
31-
pass
29+
class BulkTestBase(IntegrationTest):
3230

33-
34-
class BulkTestBase(unittest.TestCase):
31+
@classmethod
32+
def setUpClass(cls):
33+
super(BulkTestBase, cls).setUpClass()
34+
cls.coll = cls.db.test
35+
cls.has_write_commands = (client_context.client.max_wire_version > 1)
3536

3637
def setUp(self):
37-
self.has_write_commands = (client_context.client.max_wire_version > 1)
38+
super(BulkTestBase, self).setUp()
39+
self.coll.remove()
3840

3941
def assertEqualResponse(self, expected, actual):
4042
"""Compare response from bulk.execute() to expected response."""
@@ -111,14 +113,6 @@ def assertEqualWriteError(self, expected, actual):
111113

112114
class TestBulk(BulkTestBase):
113115

114-
@classmethod
115-
def setUpClass(cls):
116-
cls.coll = client_context.client.pymongo_test.test
117-
118-
def setUp(self):
119-
super(TestBulk, self).setUp()
120-
self.coll.remove()
121-
122116
def test_empty(self):
123117
bulk = self.coll.initialize_ordered_bulk_op()
124118
self.assertRaises(InvalidOperation, bulk.execute)
@@ -913,13 +907,8 @@ class TestBulkWriteConcern(BulkTestBase):
913907

914908
@classmethod
915909
def setUpClass(cls):
916-
cls.is_repl = ('setName' in client_context.ismaster)
910+
super(TestBulkWriteConcern, cls).setUpClass()
917911
cls.w = client_context.w
918-
cls.coll = client_context.client.pymongo_test.test
919-
920-
def setUp(self):
921-
super(TestBulkWriteConcern, self).setUp()
922-
self.coll.remove()
923912

924913
@client_context.require_version_min(1, 8, 2)
925914
def test_fsync_and_j(self):
@@ -1083,22 +1072,14 @@ def test_write_concern_failure_unordered(self):
10831072

10841073
class TestBulkNoResults(BulkTestBase):
10851074

1086-
@classmethod
1087-
def setUpClass(cls):
1088-
cls.coll = client_context.client.pymongo_test.test
1089-
1090-
def setUp(self):
1091-
super(TestBulkNoResults, self).setUp()
1092-
self.coll.remove()
1093-
10941075
def test_no_results_ordered_success(self):
10951076

10961077
batch = self.coll.initialize_ordered_bulk_op()
10971078
batch.insert({'_id': 1})
10981079
batch.find({'_id': 3}).upsert().update_one({'$set': {'b': 1}})
10991080
batch.insert({'_id': 2})
11001081
batch.find({'_id': 1}).remove_one()
1101-
with client_context.client.start_request():
1082+
with self.client.start_request():
11021083
self.assertTrue(batch.execute({'w': 0}) is None)
11031084
self.assertEqual(2, self.coll.count())
11041085

@@ -1110,7 +1091,7 @@ def test_no_results_ordered_failure(self):
11101091
batch.insert({'_id': 2})
11111092
batch.insert({'_id': 1})
11121093
batch.find({'_id': 1}).remove_one()
1113-
with client_context.client.start_request():
1094+
with self.client.start_request():
11141095
self.assertTrue(batch.execute({'w': 0}) is None)
11151096
self.assertEqual(3, self.coll.count())
11161097

@@ -1121,7 +1102,7 @@ def test_no_results_unordered_success(self):
11211102
batch.find({'_id': 3}).upsert().update_one({'$set': {'b': 1}})
11221103
batch.insert({'_id': 2})
11231104
batch.find({'_id': 1}).remove_one()
1124-
with client_context.client.start_request():
1105+
with self.client.start_request():
11251106
self.assertTrue(batch.execute({'w': 0}) is None)
11261107
self.assertEqual(2, self.coll.count())
11271108

@@ -1133,7 +1114,7 @@ def test_no_results_unordered_failure(self):
11331114
batch.insert({'_id': 2})
11341115
batch.insert({'_id': 1})
11351116
batch.find({'_id': 1}).remove_one()
1136-
with client_context.client.start_request():
1117+
with self.client.start_request():
11371118
self.assertTrue(batch.execute({'w': 0}) is None)
11381119
self.assertEqual(2, self.coll.count())
11391120
self.assertTrue(self.coll.find_one({'_id': 1}) is None)
@@ -1145,13 +1126,10 @@ class TestBulkAuthorization(BulkTestBase):
11451126
@client_context.require_auth
11461127
@client_context.require_version_min(2, 5, 3)
11471128
def setUpClass(cls):
1148-
cls.db = client_context.client.pymongo_test
1149-
cls.coll = cls.db.test
1129+
super(TestBulkAuthorization, cls).setUpClass()
11501130

11511131
def setUp(self):
11521132
super(TestBulkAuthorization, self).setUp()
1153-
self.coll.remove()
1154-
11551133
self.db.add_user('readonly', 'pw', roles=['read'])
11561134
self.db.command(
11571135
'createRole', 'noremove',

test/test_client.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -169,11 +169,6 @@ def test_get_default_database_with_authsource(self):
169169

170170
class TestClient(IntegrationTest, TestRequestMixin):
171171

172-
@classmethod
173-
def setUpClass(cls):
174-
super(TestClient, cls).setUpClass()
175-
cls.client = client_context.rs_or_standalone_client
176-
177172
def test_constants(self):
178173
# Set bad defaults.
179174
MongoClient.HOST = "somedomainthatdoesntexist.org"

test/test_collection.py

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,6 @@ class TestCollection(IntegrationTest):
109109
@classmethod
110110
def setUpClass(cls):
111111
super(TestCollection, cls).setUpClass()
112-
cls.db = client_context.client.pymongo_test
113112
cls.w = client_context.w
114113

115114
@classmethod
@@ -410,7 +409,7 @@ def test_index_haystack(self):
410409
@client_context.require_version_min(2, 3, 2)
411410
@client_context.require_no_mongos
412411
def test_index_text(self):
413-
enable_text_search(client_context.client)
412+
enable_text_search(self.client)
414413

415414
db = self.db
416415
db.test.drop_indexes()
@@ -955,7 +954,7 @@ def test_save_with_invalid_key(self):
955954
def test_unique_index(self):
956955
db = self.db
957956

958-
with client_context.client.start_request():
957+
with self.client.start_request():
959958
db.drop_collection("test")
960959
db.test.create_index("hello")
961960

@@ -1041,7 +1040,7 @@ def test_continue_on_error(self):
10411040
docs.append({"four": 4})
10421041
docs.append({"five": 5})
10431042

1044-
with client_context.client.start_request():
1043+
with self.client.start_request():
10451044
db.test.insert(docs, manipulate=False, w=0)
10461045
self.assertEqual(11000, db.error()['code'])
10471046
self.assertEqual(1, db.test.count())
@@ -1093,7 +1092,7 @@ def test_index_on_subfield(self):
10931092
db.test.insert, {"hello": {"a": 4, "b": 10}})
10941093

10951094
def test_safe_insert(self):
1096-
with client_context.client.start_request():
1095+
with self.client.start_request():
10971096
db = self.db
10981097
db.drop_collection("test")
10991098

@@ -1145,7 +1144,7 @@ def transform_incoming(self, son, collection):
11451144
def test_update_nmodified(self):
11461145
db = self.db
11471146
db.drop_collection("test")
1148-
used_write_commands = (client_context.client.max_wire_version > 1)
1147+
used_write_commands = (self.client.max_wire_version > 1)
11491148

11501149
db.test.insert({'_id': 1})
11511150
result = db.test.update({'_id': 1}, {'$set': {'x': 1}})
@@ -1190,7 +1189,7 @@ def test_upsert(self):
11901189
self.assertEqual(2, db.test.find_one()["count"])
11911190

11921191
def test_safe_update(self):
1193-
with client_context.client.start_request():
1192+
with self.client.start_request():
11941193
db = self.db
11951194
v113minus = client_context.version.at_least(1, 1, 3, -1)
11961195
v19 = client_context.version.at_least(1, 9)
@@ -1264,7 +1263,7 @@ def test_update_with_invalid_keys(self):
12641263
{})['n'])
12651264

12661265
def test_safe_save(self):
1267-
with client_context.client.start_request():
1266+
with self.client.start_request():
12681267
db = self.db
12691268
db.drop_collection("test")
12701269
db.test.create_index("hello", unique=True)
@@ -1844,7 +1843,7 @@ def test_insert_large_document(self):
18441843
self.db.test.update({"bar": "x"}, {"bar": "x" * (max_size - 32)})
18451844

18461845
def test_insert_large_batch(self):
1847-
max_bson_size = client_context.client.max_bson_size
1846+
max_bson_size = self.client.max_bson_size
18481847
if client_context.version.at_least(2, 5, 4, -1):
18491848
# Write commands are limited to 16MB + 16k per batch
18501849
big_string = 'x' * int(max_bson_size / 2)
@@ -1868,7 +1867,7 @@ def test_insert_large_batch(self):
18681867

18691868
# Test that inserts fail after first error, unacknowledged.
18701869
self.db.test.drop()
1871-
with client_context.client.start_request():
1870+
with self.client.start_request():
18721871
self.assertTrue(self.db.test.insert(batch, w=0))
18731872
self.assertEqual(1, self.db.test.count())
18741873

@@ -1887,7 +1886,7 @@ def test_insert_large_batch(self):
18871886

18881887
# 2 batches, 2 errors, unacknowledged, continue on error
18891888
self.db.test.drop()
1890-
with client_context.client.start_request():
1889+
with self.client.start_request():
18911890
self.assertTrue(
18921891
self.db.test.insert(batch, continue_on_error=True, w=0))
18931892
# Only the first and third documents should be inserted.
@@ -2002,7 +2001,7 @@ def test_map_reduce(self):
20022001
self.assertEqual(3, result.find_one({"_id": "cat"})["value"])
20032002
self.assertEqual(2, result.find_one({"_id": "dog"})["value"])
20042003
self.assertEqual(1, result.find_one({"_id": "mouse"})["value"])
2005-
client_context.client.drop_database('mrtestdb')
2004+
self.client.drop_database('mrtestdb')
20062005

20072006
full_result = db.test.map_reduce(map, reduce,
20082007
out='mrunittests', full_response=True)
@@ -2306,7 +2305,7 @@ def transform_outgoing(self, son, collection):
23062305
son['foo'] += 2
23072306
return son
23082307

2309-
db = client_context.client.pymongo_test
2308+
db = self.client.pymongo_test
23102309
db.add_son_manipulator(IncByTwo())
23112310
c = db.test
23122311
c.drop()

test/test_common.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
from bson.son import SON
2626
from pymongo.mongo_client import MongoClient
2727
from pymongo.errors import ConfigurationError, OperationFailure
28-
from test import client_context, pair, unittest
28+
from test import client_context, pair, unittest, IntegrationTest
2929
from test.utils import get_client, connected
3030

3131

@@ -34,10 +34,9 @@ def setUpModule():
3434
pass
3535

3636

37-
class TestCommon(unittest.TestCase):
37+
class TestCommon(IntegrationTest):
3838

3939
def test_uuid_subtype(self):
40-
self.db = client_context.client.pymongo_test
4140
coll = self.db.uuid
4241
coll.drop()
4342

0 commit comments

Comments
 (0)