def test_replica_set_connection(self): c = Connection(pair) ismaster = c.admin.command('ismaster') if 'setName' in ismaster: setname = str(ismaster.get('setName')) else: raise SkipTest("Not connected to a replica set.") c = ReplicaSetConnection(pair, replicaSet=setname) coll = c.pymongo_test.write_concern_test coll.drop() doc = {"_id": ObjectId()} coll.insert(doc) self.assertTrue(coll.insert(doc, safe=False)) self.assertTrue(coll.insert(doc, w=0)) self.assertTrue(coll.insert(doc)) self.assertRaises(OperationFailure, coll.insert, doc, safe=True) self.assertRaises(OperationFailure, coll.insert, doc, w=1) c = ReplicaSetConnection(pair, replicaSet=setname, safe=True) coll = c.pymongo_test.write_concern_test self.assertTrue(coll.insert(doc, safe=False)) self.assertTrue(coll.insert(doc, w=0)) self.assertRaises(OperationFailure, coll.insert, doc) self.assertRaises(OperationFailure, coll.insert, doc, safe=True) self.assertRaises(OperationFailure, coll.insert, doc, w=1) c = ReplicaSetConnection("mongodb://%s/?replicaSet=%s" % (pair, setname)) self.assertFalse(c.safe) coll = c.pymongo_test.write_concern_test self.assertTrue(coll.insert(doc)) c = ReplicaSetConnection("mongodb://%s/?replicaSet=%s;safe=true" % (pair, setname)) self.assertTrue(c.safe) coll = c.pymongo_test.write_concern_test self.assertRaises(OperationFailure, coll.insert, doc)
def test_replica_set_connection(self): c = ReplicaSetConnection(pair, replicaSet=self.name) self.assertTrue(c.auto_start_request) self.assertFalse(c.slave_okay) self.assertFalse(c.safe) self.assertEqual({}, c.get_lasterror_options()) # ReplicaSetConnection's writes are unacknowledged by default doc = {"_id": ObjectId()} coll = c.pymongo_test.write_concern_test coll.really_drop() coll.insert(doc) coll.insert(doc) c = ReplicaSetConnection("mongodb://%s:%s/?replicaSet=%s&safe=true" % ( host, port, self.name)) self.assertTrue(c.safe) # ReplicaSetConnection's network_timeout argument is translated into # socketTimeoutMS self.assertEqual(123, ReplicaSetConnection( pair, replicaSet=self.name, network_timeout=123 )._MongoReplicaSetClient__net_timeout) for network_timeout in 'foo', 0, -1: self.assertRaises(ConfigurationError, ReplicaSetConnection, pair, replicaSet=self.name, network_timeout=network_timeout)
def test_replica_set_connection(self): c = ReplicaSetConnection(pair, replicaSet=self.name) ctx = catch_warnings() try: warnings.simplefilter("ignore", DeprecationWarning) self.assertTrue(c.auto_start_request) self.assertEqual(None, c.max_pool_size) self.assertFalse(c.slave_okay) self.assertFalse(c.safe) self.assertEqual({}, c.get_lasterror_options()) # ReplicaSetConnection's writes are unacknowledged by default doc = {"_id": ObjectId()} coll = c.pymongo_test.write_concern_test coll.drop() coll.insert(doc) coll.insert(doc) c = ReplicaSetConnection( "mongodb://%s:%s/?replicaSet=%s&safe=true" % (host, port, self.name)) self.assertTrue(c.safe) finally: ctx.exit() # To preserve legacy ReplicaSetConnection's behavior, max_size should # be None. Pool should handle this without error. pool = get_pool(c) self.assertEqual(None, pool.max_size) c.end_request() # To preserve legacy ReplicaSetConnection's behavior, max_size should # be None. Pool should handle this without error. rs_state = c._MongoReplicaSetClient__rs_state pool = rs_state.primary_member.pool self.assertEqual(None, pool.max_size) c.end_request() # ReplicaSetConnection's network_timeout argument is translated into # socketTimeoutMS self.assertEqual( 123, ReplicaSetConnection( pair, replicaSet=self.name, network_timeout=123)._MongoReplicaSetClient__net_timeout) for network_timeout in 'foo', 0, -1: self.assertRaises(ConfigurationError, ReplicaSetConnection, pair, replicaSet=self.name, network_timeout=network_timeout)
def test_properties(self): c = ReplicaSetConnection(pair, replicaSet=self.name) c.admin.command('ping') self.assertEqual(c.primary, self.primary) self.assertEqual(c.hosts, self.hosts) self.assertEqual(c.arbiters, self.arbiters) self.assertEqual(c.read_preference, ReadPreference.PRIMARY) self.assertEqual(c.max_pool_size, 10) self.assertEqual(c.document_class, dict) self.assertEqual(c.tz_aware, False) self.assertEqual(c.slave_okay, False) self.assertEqual(c.safe, False) c.close() c = ReplicaSetConnection(pair, replicaSet=self.name, max_pool_size=25, document_class=SON, tz_aware=True, slaveOk=False, safe=True, read_preference=ReadPreference.SECONDARY) c.admin.command('ping') self.assertEqual(c.primary, self.primary) self.assertEqual(c.hosts, self.hosts) self.assertEqual(c.arbiters, self.arbiters) self.assertEqual(c.read_preference, ReadPreference.SECONDARY) self.assertEqual(c.max_pool_size, 25) self.assertEqual(c.document_class, SON) self.assertEqual(c.tz_aware, True) self.assertEqual(c.slave_okay, False) self.assertEqual(c.safe, True) if version.at_least(c, (1, 7, 4)): self.assertEqual(c.max_bson_size, 16777216) else: self.assertEqual(c.max_bson_size, 4194304) c.close()
def test_connect(self): self.assertRaises(ConnectionFailure, ReplicaSetConnection, "somedomainthatdoesntexist.org:27017", replicaSet=self.name, connectTimeoutMS=600) self.assertRaises(ConfigurationError, ReplicaSetConnection, pair, replicaSet='fdlksjfdslkjfd') self.assertTrue(ReplicaSetConnection(pair, replicaSet=self.name))
def test_replica_set_connection(self): c = ReplicaSetConnection(pair, replicaSet=self.name) ctx = catch_warnings() try: warnings.simplefilter("ignore", DeprecationWarning) self.assertTrue(c.auto_start_request) self.assertEqual(None, c.max_pool_size) self.assertFalse(c.slave_okay) self.assertFalse(c.safe) self.assertEqual({}, c.get_lasterror_options()) # ReplicaSetConnection's writes are unacknowledged by default doc = {"_id": ObjectId()} coll = c.pymongo_test.write_concern_test coll.drop() coll.insert(doc) coll.insert(doc) c = ReplicaSetConnection("mongodb://%s:%s/?replicaSet=%s&safe=true" % ( host, port, self.name)) self.assertTrue(c.safe) finally: ctx.exit() # To preserve legacy ReplicaSetConnection's behavior, max_size should # be None. Pool should handle this without error. pool = get_pool(c) self.assertEqual(None, pool.max_size) c.end_request() # ReplicaSetConnection's network_timeout argument is translated into # socketTimeoutMS self.assertEqual(123, ReplicaSetConnection( pair, replicaSet=self.name, network_timeout=123 )._MongoReplicaSetClient__net_timeout) for network_timeout in 'foo', 0, -1: self.assertRaises( ConfigurationError, ReplicaSetConnection, pair, replicaSet=self.name, network_timeout=network_timeout)
def test_low_network_timeout(self): """ Override the similar test as TestThreads.test_low_connect_timeout(), but use the newer connectTimeoutMS and socketTimeoutMS arguments instead of the soon-to-be-deprecated network_timeout. """ db = None n = 10 # First test connection timeout i = 0 while db is None and i < n: try: db = ReplicaSetConnection(pair, replicaSet=self.name, connectTimeoutMS=1).pymongo_test except AutoReconnect: i += 1 if i == n: raise SkipTest() # ... then test socket timeout i = 0 while db is None and i < n: try: db = ReplicaSetConnection(pair, replicaSet=self.name, socketTimeoutMS=1).pymongo_test except AutoReconnect: i += 1 if i == n: raise SkipTest() threads = [] for _ in range(4): t = IgnoreAutoReconnect(db.test, 100) t.start() threads.append(t) for t in threads: t.join()
def test_replica_set_connection(self): c = ReplicaSetConnection(pair, replicaSet=self.name) self.assertTrue(c.auto_start_request) self.assertEqual(None, c.max_pool_size) self.assertFalse(c.slave_okay) self.assertFalse(c.safe) self.assertEqual({}, c.get_lasterror_options()) # ReplicaSetConnection's writes are unacknowledged by default doc = {"_id": ObjectId()} coll = c.pymongo_test.write_concern_test coll.drop() coll.insert(doc) coll.insert(doc) c = ReplicaSetConnection("mongodb://%s:%s/?replicaSet=%s&safe=true" % (host, port, self.name)) self.assertTrue(c.safe) # ReplicaSetConnection's network_timeout argument is translated into # socketTimeoutMS self.assertEqual( 123, ReplicaSetConnection( pair, replicaSet=self.name, network_timeout=123)._MongoReplicaSetClient__net_timeout) for network_timeout in 'foo', 0, -1: self.assertRaises(ConfigurationError, ReplicaSetConnection, pair, replicaSet=self.name, network_timeout=network_timeout)
def test_ipv6(self): try: connection = ReplicaSetConnection("[::1]:27017", replicaSet=self.name) except: # Either mongod was started without --ipv6 # or the OS doesn't support it (or both). raise SkipTest() # Try a few simple things connection = ReplicaSetConnection("mongodb://[::1]:27017", replicaSet=self.name) uri = "mongodb://[::1]:27017/?slaveOk=true;replicaSet=" + self.name connection = ReplicaSetConnection(uri) connection = ReplicaSetConnection("[::1]:27017,localhost:27017", replicaSet=self.name) connection = ReplicaSetConnection("localhost:27017,[::1]:27017", replicaSet=self.name) connection.pymongo_test.test.save({"dummy": u"object"}) connection.pymongo_test_bernie.test.save({"dummy": u"object"}) dbs = connection.database_names() self.assert_("pymongo_test" in dbs) self.assert_("pymongo_test_bernie" in dbs) connection.close()
def _get_connection(self): """ Override TestThreadsAuth, so its tests run on a ReplicaSetConnection instead of a regular Connection. """ return ReplicaSetConnection(pair, replicaSet=self.name)
def _get_connection(self, **kwargs): return ReplicaSetConnection(pair, replicaSet=self.name, **kwargs)
def test_ipv6(self): try: connection = ReplicaSetConnection("[::1]:%d" % (port,), replicaSet=self.name) except: # Either mongod was started without --ipv6 # or the OS doesn't support it (or both). raise SkipTest() # Try a few simple things connection = ReplicaSetConnection("mongodb://[::1]:%d" % (port,), replicaSet=self.name) connection = ReplicaSetConnection("mongodb://[::1]:%d/?safe=true;" "replicaSet=%s" % (port, self.name)) connection = ReplicaSetConnection("[::1]:%d,localhost:" "%d" % (port, port), replicaSet=self.name) connection = ReplicaSetConnection("localhost:%d,[::1]:" "%d" % (port, port), replicaSet=self.name) connection.pymongo_test.test.save({"dummy": u"object"}) connection.pymongo_test_bernie.test.save({"dummy": u"object"}) dbs = connection.database_names() self.assertTrue("pymongo_test" in dbs) self.assertTrue("pymongo_test_bernie" in dbs) connection.close()
def test_properties(self): c = ReplicaSetConnection(pair, replicaSet=self.name) c.admin.command('ping') self.assertEqual(c.primary, self.primary) self.assertEqual(c.hosts, self.hosts) self.assertEqual(c.arbiters, self.arbiters) self.assertEqual(c.max_pool_size, 10) self.assertEqual(c.document_class, dict) self.assertEqual(c.tz_aware, False) # Make sure RSC's properties are copied to Database and Collection for obj in c, c.pymongo_test, c.pymongo_test.test: self.assertEqual(obj.read_preference, ReadPreference.PRIMARY) self.assertEqual(obj.tag_sets, [{}]) self.assertEqual(obj.secondary_acceptable_latency_ms, 15) self.assertEqual(obj.slave_okay, False) self.assertEqual(obj.safe, False) cursor = c.pymongo_test.test.find() self.assertEqual( ReadPreference.PRIMARY, cursor._Cursor__read_preference) self.assertEqual([{}], cursor._Cursor__tag_sets) self.assertEqual(15, cursor._Cursor__secondary_acceptable_latency_ms) self.assertEqual(False, cursor._Cursor__slave_okay) c.close() tag_sets = [{'dc': 'la', 'rack': '2'}, {'foo': 'bar'}] c = ReplicaSetConnection(pair, replicaSet=self.name, max_pool_size=25, document_class=SON, tz_aware=True, slaveOk=False, safe=True, read_preference=ReadPreference.SECONDARY, tag_sets=copy.deepcopy(tag_sets), secondary_acceptable_latency_ms=77) c.admin.command('ping') self.assertEqual(c.primary, self.primary) self.assertEqual(c.hosts, self.hosts) self.assertEqual(c.arbiters, self.arbiters) self.assertEqual(c.max_pool_size, 25) self.assertEqual(c.document_class, SON) self.assertEqual(c.tz_aware, True) for obj in c, c.pymongo_test, c.pymongo_test.test: self.assertEqual(obj.read_preference, ReadPreference.SECONDARY) self.assertEqual(obj.tag_sets, tag_sets) self.assertEqual(obj.secondary_acceptable_latency_ms, 77) self.assertEqual(obj.slave_okay, False) self.assertEqual(obj.safe, True) cursor = c.pymongo_test.test.find() self.assertEqual( ReadPreference.SECONDARY, cursor._Cursor__read_preference) self.assertEqual(tag_sets, cursor._Cursor__tag_sets) self.assertEqual(77, cursor._Cursor__secondary_acceptable_latency_ms) self.assertEqual(False, cursor._Cursor__slave_okay) cursor = c.pymongo_test.test.find( read_preference=ReadPreference.NEAREST, tag_sets=[{'dc':'ny'}, {}], secondary_acceptable_latency_ms=123) self.assertEqual( ReadPreference.NEAREST, cursor._Cursor__read_preference) self.assertEqual([{'dc':'ny'}, {}], cursor._Cursor__tag_sets) self.assertEqual(123, cursor._Cursor__secondary_acceptable_latency_ms) self.assertEqual(False, cursor._Cursor__slave_okay) if version.at_least(c, (1, 7, 4)): self.assertEqual(c.max_bson_size, 16777216) else: self.assertEqual(c.max_bson_size, 4194304) c.close()
def test_properties(self): c = ReplicaSetConnection(pair, replicaSet=self.name) c.admin.command('ping') self.assertEqual(c.primary, self.primary) self.assertEqual(c.hosts, self.hosts) self.assertEqual(c.arbiters, self.arbiters) self.assertEqual(c.max_pool_size, 10) self.assertEqual(c.document_class, dict) self.assertEqual(c.tz_aware, False) # Make sure RSC's properties are copied to Database and Collection for obj in c, c.pymongo_test, c.pymongo_test.test: self.assertEqual(obj.read_preference, ReadPreference.PRIMARY) self.assertEqual(obj.tag_sets, [{}]) self.assertEqual(obj.secondary_acceptable_latency_ms, 15) self.assertEqual(obj.slave_okay, False) self.assertEqual(obj.safe, False) cursor = c.pymongo_test.test.find() self.assertEqual(ReadPreference.PRIMARY, cursor._Cursor__read_preference) self.assertEqual([{}], cursor._Cursor__tag_sets) self.assertEqual(15, cursor._Cursor__secondary_acceptable_latency_ms) self.assertEqual(False, cursor._Cursor__slave_okay) c.close() tag_sets = [{'dc': 'la', 'rack': '2'}, {'foo': 'bar'}] c = ReplicaSetConnection(pair, replicaSet=self.name, max_pool_size=25, document_class=SON, tz_aware=True, slaveOk=False, safe=True, read_preference=ReadPreference.SECONDARY, tag_sets=copy.deepcopy(tag_sets), secondary_acceptable_latency_ms=77) c.admin.command('ping') self.assertEqual(c.primary, self.primary) self.assertEqual(c.hosts, self.hosts) self.assertEqual(c.arbiters, self.arbiters) self.assertEqual(c.max_pool_size, 25) self.assertEqual(c.document_class, SON) self.assertEqual(c.tz_aware, True) for obj in c, c.pymongo_test, c.pymongo_test.test: self.assertEqual(obj.read_preference, ReadPreference.SECONDARY) self.assertEqual(obj.tag_sets, tag_sets) self.assertEqual(obj.secondary_acceptable_latency_ms, 77) self.assertEqual(obj.slave_okay, False) self.assertEqual(obj.safe, True) cursor = c.pymongo_test.test.find() self.assertEqual(ReadPreference.SECONDARY, cursor._Cursor__read_preference) self.assertEqual(tag_sets, cursor._Cursor__tag_sets) self.assertEqual(77, cursor._Cursor__secondary_acceptable_latency_ms) self.assertEqual(False, cursor._Cursor__slave_okay) cursor = c.pymongo_test.test.find( read_preference=ReadPreference.NEAREST, tag_sets=[{ 'dc': 'ny' }, {}], secondary_acceptable_latency_ms=123) self.assertEqual(ReadPreference.NEAREST, cursor._Cursor__read_preference) self.assertEqual([{'dc': 'ny'}, {}], cursor._Cursor__tag_sets) self.assertEqual(123, cursor._Cursor__secondary_acceptable_latency_ms) self.assertEqual(False, cursor._Cursor__slave_okay) if version.at_least(c, (1, 7, 4)): self.assertEqual(c.max_bson_size, 16777216) else: self.assertEqual(c.max_bson_size, 4194304) c.close()
def __init__(self, *args, **kwargs): # Specifying that it should run both the inits MongoKitConnection.__init__(self, *args, **kwargs) PymongoReplicaSetConnection.__init__(self, *args, **kwargs)