mongo 1.10.2 → 1.11.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/README.md +43 -9
  5. data/VERSION +1 -1
  6. data/lib/mongo.rb +1 -0
  7. data/lib/mongo/collection.rb +36 -21
  8. data/lib/mongo/connection/pool.rb +14 -22
  9. data/lib/mongo/cursor.rb +13 -0
  10. data/lib/mongo/db.rb +18 -13
  11. data/lib/mongo/functional.rb +0 -2
  12. data/lib/mongo/functional/authentication.rb +35 -25
  13. data/lib/mongo/legacy.rb +4 -4
  14. data/mongo.gemspec +0 -5
  15. data/test/functional/authentication_test.rb +3 -2
  16. data/test/functional/bulk_write_collection_view_test.rb +9 -14
  17. data/test/functional/client_test.rb +42 -43
  18. data/test/functional/collection_test.rb +1073 -995
  19. data/test/functional/collection_writer_test.rb +1 -1
  20. data/test/functional/cursor_fail_test.rb +3 -9
  21. data/test/functional/cursor_message_test.rb +14 -15
  22. data/test/functional/cursor_test.rb +224 -166
  23. data/test/functional/db_api_test.rb +262 -261
  24. data/test/functional/db_connection_test.rb +1 -3
  25. data/test/functional/db_test.rb +116 -115
  26. data/test/functional/grid_file_system_test.rb +108 -108
  27. data/test/functional/pool_test.rb +73 -0
  28. data/test/functional/timeout_test.rb +2 -0
  29. data/test/helpers/test_unit.rb +146 -11
  30. data/test/replica_set/authentication_test.rb +4 -2
  31. data/test/replica_set/basic_test.rb +5 -13
  32. data/test/replica_set/client_test.rb +8 -6
  33. data/test/replica_set/complex_connect_test.rb +3 -0
  34. data/test/replica_set/count_test.rb +2 -0
  35. data/test/replica_set/cursor_test.rb +5 -0
  36. data/test/replica_set/insert_test.rb +1 -1
  37. data/test/replica_set/max_values_test.rb +1 -1
  38. data/test/replica_set/pinning_test.rb +1 -1
  39. data/test/replica_set/query_test.rb +1 -1
  40. data/test/replica_set/read_preference_test.rb +7 -1
  41. data/test/replica_set/refresh_test.rb +11 -8
  42. data/test/replica_set/replication_ack_test.rb +2 -1
  43. data/test/sharded_cluster/basic_test.rb +17 -11
  44. data/test/shared/authentication/basic_auth_shared.rb +59 -98
  45. data/test/shared/authentication/bulk_api_auth_shared.rb +11 -21
  46. data/test/shared/authentication/gssapi_shared.rb +28 -21
  47. data/test/test_helper.rb +5 -0
  48. data/test/tools/mongo_config.rb +96 -11
  49. metadata +4 -5
  50. metadata.gz.sig +0 -0
  51. data/lib/mongo/functional/sasl_java.rb +0 -48
@@ -59,4 +59,77 @@ class PoolTest < Test::Unit::TestCase
59
59
  end
60
60
  threads.each(&:join)
61
61
  end
62
+
63
+ def test_auth_network_error
64
+ # Make sure there's no semaphore leak if we get a network error
65
+ # when authenticating a new socket with cached credentials.
66
+
67
+ # Get a client with one socket so we detect if it's leaked.
68
+ client = MongoClient.new(TEST_HOST, TEST_PORT, :pool_size => 1, :pool_timeout => 1)
69
+ assert_equal 1, client.pool_size
70
+
71
+ # Set up the client with a pool
72
+ client[TEST_DB].command(:ping => 1)
73
+
74
+ # Close the one socket in the pool
75
+ pool = client.primary_pool
76
+ socket = pool.instance_variable_get(:@sockets).first
77
+ socket.close
78
+
79
+ # Simulate an authenticate() call on a different socket.
80
+ # Cache the creds on the client.
81
+ creds = {
82
+ :db_name => TEST_DB,
83
+ :username => TEST_USER,
84
+ :password => TEST_USER_PWD,
85
+ :source => TEST_DB,
86
+ :mechanism => Mongo::Authentication::DEFAULT_MECHANISM,
87
+ :extra => {}
88
+ }
89
+ client.auths << creds
90
+
91
+ # The client authenticates its socket with the
92
+ # new credential, but gets a socket.error.
93
+ client[TEST_DB]['ruby-test'].find_one
94
+
95
+ # # No semaphore leak, the pool is allowed to make a new socket.
96
+ assert_equal 1, pool.instance_variable_get(:@sockets).size
97
+ end
98
+
99
+ def test_socket_cleanup
100
+ # Get a client with one socket so we detect if it's leaked.
101
+ client = MongoClient.new(TEST_HOST, TEST_PORT, :pool_size => 1, :pool_timeout => 1)
102
+ assert_equal 1, client.pool_size
103
+
104
+ # Set up the client with a pool
105
+ client[TEST_DB].command(:ping => 1)
106
+
107
+ # Simulate an authenticate() call on a different socket.
108
+ # Cache the creds on the client.
109
+ creds = {
110
+ :db_name => TEST_DB,
111
+ :username => TEST_USER,
112
+ :password => TEST_USER_PWD,
113
+ :source => TEST_DB,
114
+ :mechanism => Mongo::Authentication::DEFAULT_MECHANISM,
115
+ :extra => {}
116
+ }
117
+ client.auths << creds
118
+
119
+ # Mock the socket to raise a ConnectionFailure when applying auths
120
+ pool = client.primary_pool
121
+ socket = pool.instance_variable_get(:@sockets).first
122
+ socket.expects(:send).raises(ConnectionFailure)
123
+
124
+ # Checkout a socket from the pool to force it to get a new socket
125
+ pool.checkout
126
+ new_socket = pool.instance_variable_get(:@sockets).first
127
+
128
+ # Make sure the pool is cleaned up properly
129
+ assert_not_equal socket, new_socket
130
+ assert_equal 1, pool.instance_variable_get(:@sockets).size
131
+ assert_equal 1, pool.instance_variable_get(:@thread_ids_to_sockets).size
132
+ assert !pool.instance_variable_get(:@checked_out).include?(socket)
133
+ assert !pool.instance_variable_get(:@sockets).include?(socket)
134
+ end
62
135
  end
@@ -17,6 +17,7 @@ require 'test_helper'
17
17
  class TimeoutTest < Test::Unit::TestCase
18
18
 
19
19
  def test_op_timeout
20
+ grant_admin_user_eval_role(standard_connection)
20
21
  connection = standard_connection(:op_timeout => 0.5)
21
22
 
22
23
  admin = connection.db('admin')
@@ -36,6 +37,7 @@ class TimeoutTest < Test::Unit::TestCase
36
37
  client = standard_connection
37
38
  db = client[TEST_DB]
38
39
  coll = db['timeout-tests']
40
+ grant_admin_user_eval_role(client)
39
41
 
40
42
  # prepare the database
41
43
  coll.drop
@@ -12,10 +12,9 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- TEST_DB = 'ruby_test' unless defined? TEST_DB
16
- TEST_HOST = ENV['MONGO_RUBY_DRIVER_HOST'] || 'localhost' unless defined? TEST_HOST
17
- TEST_DATA = File.join(File.dirname(__FILE__), 'fixtures/data')
18
- TEST_BASE = Test::Unit::TestCase
15
+ TEST_HOST = ENV['MONGO_RUBY_DRIVER_HOST'] || 'localhost' unless defined? TEST_HOST
16
+ TEST_DATA = File.join(File.dirname(__FILE__), 'fixtures/data')
17
+ TEST_BASE = Test::Unit::TestCase
19
18
 
20
19
  unless defined? TEST_PORT
21
20
  TEST_PORT = if ENV['MONGO_RUBY_DRIVER_PORT']
@@ -59,6 +58,11 @@ class Test::Unit::TestCase
59
58
 
60
59
  cluster_instance.start
61
60
  instance_variable_set("@#{kind}", cluster_instance)
61
+
62
+ uri = "mongodb://#{TEST_USER}:#{TEST_USER_PWD}@" +
63
+ "#{cluster_instance.members_uri}"
64
+ uri += "?replicaset=#{@rs.repl_set_name}" if cluster_instance.replica_set?
65
+ instance_variable_set("@uri", uri)
62
66
  end
63
67
 
64
68
  # Generic helper to rescue and retry from a connection failure.
@@ -86,9 +90,15 @@ class Test::Unit::TestCase
86
90
  # @return [MongoClient] The client instance.
87
91
  def self.standard_connection(options={}, legacy=false)
88
92
  if legacy
89
- Connection.new(TEST_HOST, TEST_PORT, options)
93
+ silently do
94
+ # We have to create the Connection object directly here instead of using TEST_URI
95
+ # because Connection#from_uri ends up creating a MongoClient object.
96
+ conn = Connection.new(TEST_HOST, TEST_PORT, options)
97
+ conn[TEST_DB].authenticate(TEST_USER, TEST_USER_PWD)
98
+ conn
99
+ end
90
100
  else
91
- MongoClient.new(TEST_HOST, TEST_PORT, options)
101
+ MongoClient.from_uri(TEST_URI, options)
92
102
  end
93
103
  end
94
104
 
@@ -218,6 +228,7 @@ class Test::Unit::TestCase
218
228
  end
219
229
 
220
230
  def with_forced_timeout(client, &block)
231
+ authenticate_client(client)
221
232
  cmd_line_args = client['admin'].command({ :getCmdLineOpts => 1 })['argv']
222
233
  if cmd_line_args.include?('enableTestCommands=1') && client.server_version >= "2.5.3"
223
234
  begin
@@ -233,12 +244,8 @@ class Test::Unit::TestCase
233
244
  end
234
245
  end
235
246
 
236
- def with_auth(client, &block)
237
- cmd_line_args = client['admin'].command({ :getCmdLineOpts => 1 })['parsed']
238
- yield if cmd_line_args.include?('auth')
239
- end
240
-
241
247
  def with_default_journaling(client, &block)
248
+ authenticate_client(client)
242
249
  cmd_line_args = client['admin'].command({ :getCmdLineOpts => 1 })['parsed']
243
250
  unless client.server_version < "2.0" || cmd_line_args.include?('nojournal')
244
251
  yield
@@ -252,6 +259,7 @@ class Test::Unit::TestCase
252
259
  end
253
260
 
254
261
  def with_no_journaling(client, &block)
262
+ authenticate_client(client)
255
263
  cmd_line_args = client['admin'].command({ :getCmdLineOpts => 1 })['parsed']
256
264
  unless client.server_version < "2.0" || !cmd_line_args.include?('nojournal')
257
265
  yield
@@ -259,6 +267,7 @@ class Test::Unit::TestCase
259
267
  end
260
268
 
261
269
  def with_ipv6_enabled(client, &block)
270
+ authenticate_client(client)
262
271
  cmd_line_args = client['admin'].command({ :getCmdLineOpts => 1 })['parsed']
263
272
  if cmd_line_args.include?('ipv6')
264
273
  yield
@@ -310,14 +319,140 @@ class Test::Unit::TestCase
310
319
  def subject_to_server_4754?(client)
311
320
  # Until SERVER-4754 is resolved, profiling info is not collected
312
321
  # when mongod is started with --auth in versions < 2.2
322
+ authenticate_client(client)
313
323
  cmd_line_args = client['admin'].command({ :getCmdLineOpts => 1 })['parsed']
314
324
  client.server_version < '2.2' && cmd_line_args.include?('auth')
315
325
  end
326
+
327
+ # When testing under narrowed localhost exception, the admin user must have
328
+ # special permissions to run the db_eval command.
329
+ def grant_admin_user_eval_role(client)
330
+ if auth_enabled?(client) && client.server_version >= "2.6"
331
+ # we need to have anyAction on anyResource to run db_eval()
332
+ admin = client['admin']
333
+ any_priv = BSON::OrderedHash.new
334
+ any_priv[:resource] = { :anyResource => true }
335
+ any_priv[:actions] = ['anyAction']
336
+
337
+ create_role = BSON::OrderedHash.new
338
+ create_role[:createRole] = 'db_eval'
339
+ create_role[:privileges] = [any_priv]
340
+ create_role[:roles] = []
341
+
342
+ begin
343
+ admin.command(create_role)
344
+ rescue Mongo::OperationFailure => ex
345
+ # role already exists
346
+ end
347
+
348
+ grant_role = BSON::OrderedHash.new
349
+ grant_role[:grantRolesToUser] = TEST_USER
350
+ grant_role[:roles] = ['db_eval']
351
+ admin.command(grant_role)
352
+ end
353
+ end
354
+
355
+ # Return true if auth is enabled, false otherwise.
356
+ def auth_enabled?(client)
357
+ begin
358
+ cmd_line_args = client['admin'].command({ :getCmdLineOpts => 1 })['parsed']
359
+ return true if cmd_line_args.include?('auth') || cmd_line_args.include?('keyFile')
360
+ if security = cmd_line_args["security"]
361
+ return true if security["authorization"] == "enabled"
362
+ end
363
+ rescue OperationFailure => ex
364
+ # under narrowed localhost exception in > 2.7.1, getCmdLineOpts is not allowed
365
+ # unless you're authenticated.
366
+ return true if ex.message.include?("authorized") ||
367
+ (client.server_version >= "2.7.1" &&
368
+ ex.error_code == Mongo::ErrorCode::UNAUTHORIZED)
369
+ end
370
+ end
371
+
372
+ def with_auth(client, &block)
373
+ yield if auth_enabled?(client)
374
+ end
375
+
376
+ def authenticate_client(client)
377
+ client[TEST_DB].authenticate(TEST_USER, TEST_USER_PWD) unless client.auths.any? {|a| a[:source] == TEST_DB}
378
+ client
379
+ end
380
+
381
+ def self.ensure_admin_user
382
+ 10.times do
383
+ begin
384
+ client = Mongo::MongoClient.new(TEST_HOST, TEST_PORT)
385
+ db = client[TEST_DB]
386
+ begin
387
+ db.authenticate(TEST_USER, TEST_USER_PWD)
388
+ rescue Mongo::AuthenticationError => ex
389
+ roles = [ 'dbAdminAnyDatabase',
390
+ 'userAdminAnyDatabase',
391
+ 'readWriteAnyDatabase',
392
+ 'clusterAdmin' ]
393
+ db.add_user(TEST_USER, TEST_USER_PWD, nil, :roles => roles)
394
+ end
395
+ TEST_BASE.class_eval { class_variable_set("@@connected_single_mongod", true) }
396
+ break
397
+ rescue Mongo::ConnectionFailure
398
+ # mongod not available yet, wait a second and try again
399
+ sleep(1)
400
+ end
401
+ #puts "Not connected to a MongoD" unless client.connected?
402
+ end
403
+ end
404
+
405
+ def self.cleanup_users_and_dbs
406
+ not_cluster = TEST_BASE.class_eval { class_variables }.none? { |v| v =~ /@@cluster_/ }
407
+
408
+ if @@connected_single_mongod && not_cluster
409
+ client = Mongo::MongoClient.from_uri(TEST_URI)
410
+ db = client[TEST_DB]
411
+ begin
412
+ begin
413
+ db.authenticate(TEST_USER, TEST_USER_PWD)
414
+
415
+ rescue Mongo::ConnectionFailure, Mongo::MongoArgumentError
416
+ rescue Mongo::AuthenticationError
417
+ Test::Unit::TestCase.ensure_admin_user
418
+ db.authenticate(TEST_USER, TEST_USER_PWD)
419
+ end
420
+
421
+ client.database_names.each do |db_name|
422
+ if db_name =~ /^ruby_test*/
423
+ puts "[CLEAN-UP] Dropping '#{db_name}'..."
424
+ client.drop_database(db_name)
425
+ end
426
+ end
427
+
428
+ if client.server_version < '2.5'
429
+ db['system.users'].remove
430
+ else
431
+ db.command(:dropAllUsersFromDatabase => 1)
432
+ end
433
+
434
+ rescue Mongo::ConnectionFailure
435
+ # Nothing we can do about the mongod not being available
436
+ end
437
+ end
438
+ end
439
+ end
440
+
441
+
442
+ Test::Unit.at_start do
443
+ TEST_DB = ENV['TEST_DB'] || 'admin'
444
+ TEST_USER = ENV['TEST_USER'] || 'admin_user'
445
+ TEST_USER_PWD = ENV['TEST_USER_PWD'] || 'password'
446
+ TEST_URI = ENV['TEST_URI'] ||
447
+ "mongodb://#{TEST_USER}:#{TEST_USER_PWD}@#{TEST_HOST}:#{TEST_PORT}/#{TEST_DB}"
448
+ TEST_BASE.class_eval { class_variable_set("@@connected_single_mongod", false) }
449
+ Test::Unit::TestCase.ensure_admin_user
316
450
  end
317
451
 
318
452
  # Before and after hooks for the entire test run
319
453
  # handles mop up after the cluster manager is done.
320
454
  Test::Unit.at_exit do
455
+ Test::Unit::TestCase.cleanup_users_and_dbs
321
456
  TEST_BASE.class_eval { class_variables }.select { |v| v =~ /@@cluster_/ }.each do |cluster|
322
457
  TEST_BASE.class_eval { class_variable_get(cluster) }.stop
323
458
  end
@@ -20,6 +20,7 @@ require 'shared/authentication/gssapi_shared'
20
20
 
21
21
  class ReplicaSetAuthenticationTest < Test::Unit::TestCase
22
22
  include Mongo
23
+
23
24
  include BasicAuthTests
24
25
  include SASLPlainTests
25
26
  include BulkAPIAuthTests
@@ -27,9 +28,10 @@ class ReplicaSetAuthenticationTest < Test::Unit::TestCase
27
28
 
28
29
  def setup
29
30
  ensure_cluster(:rs)
30
- @client = MongoReplicaSetClient.new(@rs.repl_set_seeds)
31
+ @client = MongoReplicaSetClient.from_uri(@uri)
32
+ @admin = @client['admin']
31
33
  @version = @client.server_version
32
- @db = @client[TEST_DB]
34
+ @db = @client['ruby-test']
33
35
  @host_info = @rs.repl_set_seeds.join(',')
34
36
  end
35
37
  end
@@ -73,9 +73,7 @@ class ReplicaSetBasicTest < Test::Unit::TestCase
73
73
  end
74
74
 
75
75
  def test_accessors
76
- seeds = @rs.repl_set_seeds
77
- args = {:name => @rs.repl_set_name}
78
- client = MongoReplicaSetClient.new(seeds, args)
76
+ client = MongoReplicaSetClient.from_uri(@uri)
79
77
  assert_equal @rs.primary_name, [client.host, client.port].join(':')
80
78
  assert_equal client.host, client.primary_pool.host
81
79
  assert_equal client.port, client.primary_pool.port
@@ -89,9 +87,7 @@ class ReplicaSetBasicTest < Test::Unit::TestCase
89
87
  end
90
88
 
91
89
  def test_write_commands_and_operations
92
- seeds = @rs.repl_set_seeds
93
- args = {:name => @rs.repl_set_name}
94
- @client = MongoReplicaSetClient.new(seeds, args)
90
+ @client = MongoReplicaSetClient.from_uri(@uri)
95
91
  @coll = @client[TEST_DB]['test-write-commands-and-operations']
96
92
  with_write_commands_and_operations(@client) do
97
93
  @coll.remove
@@ -101,7 +97,7 @@ class ReplicaSetBasicTest < Test::Unit::TestCase
101
97
  end
102
98
 
103
99
  def test_wnote_does_not_raise_exception_with_err_nil
104
- @client = MongoReplicaSetClient.new(@rs.repl_set_seeds, :name => @rs.repl_set_name)
100
+ @client = MongoReplicaSetClient.from_uri(@uri)
105
101
  if @client.server_version < '2.5.5'
106
102
  @coll = @client[TEST_DB]['test-wnote']
107
103
  begin
@@ -117,9 +113,7 @@ class ReplicaSetBasicTest < Test::Unit::TestCase
117
113
  context "Socket pools" do
118
114
  context "checking out writers" do
119
115
  setup do
120
- seeds = @rs.repl_set_seeds
121
- args = {:name => @rs.repl_set_name}
122
- @client = MongoReplicaSetClient.new(seeds, args)
116
+ @client = MongoReplicaSetClient.from_uri(@uri)
123
117
  @coll = @client[TEST_DB]['test-connection-exceptions']
124
118
  end
125
119
 
@@ -168,9 +162,7 @@ class ReplicaSetBasicTest < Test::Unit::TestCase
168
162
 
169
163
  context "checking out readers" do
170
164
  setup do
171
- seeds = @rs.repl_set_seeds
172
- args = {:name => @rs.repl_set_name}
173
- @client = MongoReplicaSetClient.new(seeds, args)
165
+ @client = MongoReplicaSetClient.from_uri(@uri)
174
166
  @coll = @client[TEST_DB]['test-connection-exceptions']
175
167
  end
176
168
 
@@ -26,7 +26,7 @@ class ReplicaSetClientTest < Test::Unit::TestCase
26
26
  end
27
27
 
28
28
  def test_reconnection
29
- @client = MongoReplicaSetClient.new @rs.repl_set_seeds
29
+ @client = MongoReplicaSetClient.from_uri(@uri)
30
30
  assert @client.connected?
31
31
 
32
32
  manager = @client.local_manager
@@ -76,11 +76,12 @@ class ReplicaSetClientTest < Test::Unit::TestCase
76
76
  end
77
77
 
78
78
  def test_connect_with_primary_stepped_down
79
- @client = MongoReplicaSetClient.new @rs.repl_set_seeds
79
+ @client = MongoReplicaSetClient.from_uri(@uri)
80
80
  @client[TEST_DB]['bar'].save({:a => 1}, {:w => 3})
81
81
  assert @client[TEST_DB]['bar'].find_one
82
82
 
83
83
  primary = Mongo::MongoClient.new(*@client.primary)
84
+ authenticate_client(primary)
84
85
  assert_raise Mongo::ConnectionFailure do
85
86
  perform_step_down(primary)
86
87
  end
@@ -93,7 +94,7 @@ class ReplicaSetClientTest < Test::Unit::TestCase
93
94
  end
94
95
 
95
96
  def test_connect_with_primary_killed
96
- @client = MongoReplicaSetClient.new @rs.repl_set_seeds
97
+ @client = MongoReplicaSetClient.from_uri(@uri)
97
98
  assert @client.connected?
98
99
  @client[TEST_DB]['bar'].save({:a => 1}, {:w => 3})
99
100
  assert @client[TEST_DB]['bar'].find_one
@@ -109,10 +110,11 @@ class ReplicaSetClientTest < Test::Unit::TestCase
109
110
  end
110
111
 
111
112
  def test_save_with_primary_stepped_down
112
- @client = MongoReplicaSetClient.new @rs.repl_set_seeds
113
+ @client = MongoReplicaSetClient.from_uri(@uri)
113
114
  assert @client.connected?
114
115
 
115
116
  primary = Mongo::MongoClient.new(*@client.primary)
117
+ authenticate_client(primary)
116
118
  assert_raise Mongo::ConnectionFailure do
117
119
  perform_step_down(primary)
118
120
  end
@@ -124,7 +126,7 @@ class ReplicaSetClientTest < Test::Unit::TestCase
124
126
  end
125
127
 
126
128
  # def test_connect_with_first_node_removed
127
- # @client = MongoReplicaSetClient.new @rs.repl_set_seeds
129
+ # @client = MongoReplicaSetClient.from_uri(@uri)
128
130
  # @client[TEST_DB]['bar'].save({:a => 1}, {:w => 3})
129
131
 
130
132
  # # Make sure everyone's views of optimes are caught up
@@ -331,7 +333,7 @@ class ReplicaSetClientTest < Test::Unit::TestCase
331
333
  end
332
334
 
333
335
  def test_find_and_modify_with_secondary_read_preference
334
- @client = MongoReplicaSetClient.new @rs.repl_set_seeds
336
+ @client = MongoReplicaSetClient.from_uri(@uri)
335
337
  collection = @client[TEST_DB].collection('test', :read => :secondary)
336
338
  id = BSON::ObjectId.new
337
339
  collection << { :a => id, :processed => false }
@@ -27,6 +27,7 @@ class ComplexConnectTest < Test::Unit::TestCase
27
27
  def test_complex_connect
28
28
  host = @rs.servers.first.host
29
29
  primary = MongoClient.new(host, @rs.primary.port)
30
+ authenticate_client(primary)
30
31
 
31
32
  @client = MongoReplicaSetClient.new([
32
33
  @rs.servers[2].host_port,
@@ -34,6 +35,7 @@ class ComplexConnectTest < Test::Unit::TestCase
34
35
  @rs.servers[0].host_port
35
36
  ])
36
37
 
38
+ authenticate_client(@client)
37
39
  version = @client.server_version
38
40
 
39
41
  @client[TEST_DB]['complext-connect-test'].insert({:a => 1})
@@ -70,6 +72,7 @@ class ComplexConnectTest < Test::Unit::TestCase
70
72
  end
71
73
 
72
74
  primary = MongoClient.new(host, @rs.primary.port)
75
+ authenticate_client(primary)
73
76
  assert_raise ConnectionFailure do
74
77
  primary['admin'].command({:replSetReconfig => old_config})
75
78
  end