mongo 1.9.2 → 1.10.0.rc0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (113) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/LICENSE +1 -1
  5. data/README.md +94 -334
  6. data/Rakefile +6 -4
  7. data/VERSION +1 -1
  8. data/bin/mongo_console +13 -6
  9. data/lib/mongo.rb +22 -27
  10. data/lib/mongo/bulk_write_collection_view.rb +352 -0
  11. data/lib/mongo/collection.rb +128 -188
  12. data/lib/mongo/collection_writer.rb +348 -0
  13. data/lib/mongo/connection.rb +19 -0
  14. data/lib/mongo/{util → connection}/node.rb +15 -1
  15. data/lib/mongo/{util → connection}/pool.rb +34 -19
  16. data/lib/mongo/{util → connection}/pool_manager.rb +8 -2
  17. data/lib/mongo/{util → connection}/sharding_pool_manager.rb +1 -1
  18. data/lib/mongo/connection/socket.rb +18 -0
  19. data/lib/mongo/{util → connection/socket}/socket_util.rb +5 -2
  20. data/lib/mongo/{util → connection/socket}/ssl_socket.rb +3 -4
  21. data/lib/mongo/{util → connection/socket}/tcp_socket.rb +25 -15
  22. data/lib/mongo/{util → connection/socket}/unix_socket.rb +6 -4
  23. data/lib/mongo/cursor.rb +113 -47
  24. data/lib/mongo/db.rb +203 -131
  25. data/lib/mongo/{exceptions.rb → exception.rb} +7 -1
  26. data/lib/mongo/functional.rb +19 -0
  27. data/lib/mongo/functional/authentication.rb +303 -0
  28. data/lib/mongo/{util → functional}/logging.rb +1 -1
  29. data/lib/mongo/{util → functional}/read_preference.rb +49 -1
  30. data/lib/mongo/{util → functional}/uri_parser.rb +81 -69
  31. data/lib/mongo/{util → functional}/write_concern.rb +2 -1
  32. data/{test/unit/pool_test.rb → lib/mongo/gridfs.rb} +5 -10
  33. data/lib/mongo/gridfs/grid.rb +1 -3
  34. data/lib/mongo/gridfs/grid_ext.rb +1 -1
  35. data/lib/mongo/gridfs/grid_file_system.rb +1 -1
  36. data/lib/mongo/gridfs/grid_io.rb +1 -1
  37. data/lib/mongo/legacy.rb +63 -8
  38. data/lib/mongo/mongo_client.rb +128 -154
  39. data/lib/mongo/mongo_replica_set_client.rb +17 -11
  40. data/lib/mongo/mongo_sharded_client.rb +2 -1
  41. data/lib/mongo/networking.rb +19 -10
  42. data/lib/mongo/utils.rb +19 -0
  43. data/lib/mongo/{util → utils}/conversions.rb +1 -1
  44. data/lib/mongo/{util → utils}/core_ext.rb +1 -1
  45. data/lib/mongo/{util → utils}/server_version.rb +1 -1
  46. data/lib/mongo/{util → utils}/support.rb +10 -57
  47. data/lib/mongo/{util → utils}/thread_local_variable_manager.rb +1 -1
  48. data/test/functional/authentication_test.rb +8 -21
  49. data/test/functional/bulk_write_collection_view_test.rb +782 -0
  50. data/test/functional/{connection_test.rb → client_test.rb} +153 -78
  51. data/test/functional/collection_test.rb +343 -97
  52. data/test/functional/collection_writer_test.rb +83 -0
  53. data/test/functional/conversions_test.rb +1 -3
  54. data/test/functional/cursor_fail_test.rb +3 -3
  55. data/test/functional/cursor_message_test.rb +3 -3
  56. data/test/functional/cursor_test.rb +38 -3
  57. data/test/functional/db_api_test.rb +5 -5
  58. data/test/functional/db_connection_test.rb +2 -2
  59. data/test/functional/db_test.rb +35 -11
  60. data/test/functional/grid_file_system_test.rb +2 -2
  61. data/test/functional/grid_io_test.rb +2 -2
  62. data/test/functional/grid_test.rb +2 -2
  63. data/test/functional/pool_test.rb +2 -3
  64. data/test/functional/safe_test.rb +5 -5
  65. data/test/functional/ssl_test.rb +22 -102
  66. data/test/functional/support_test.rb +1 -1
  67. data/test/functional/timeout_test.rb +6 -22
  68. data/test/functional/uri_test.rb +113 -12
  69. data/test/functional/write_concern_test.rb +6 -6
  70. data/test/helpers/general.rb +50 -0
  71. data/test/helpers/test_unit.rb +309 -0
  72. data/test/replica_set/authentication_test.rb +8 -23
  73. data/test/replica_set/basic_test.rb +41 -14
  74. data/test/replica_set/client_test.rb +179 -117
  75. data/test/replica_set/complex_connect_test.rb +6 -7
  76. data/test/replica_set/connection_test.rb +46 -38
  77. data/test/replica_set/count_test.rb +2 -2
  78. data/test/replica_set/cursor_test.rb +8 -8
  79. data/test/replica_set/insert_test.rb +64 -2
  80. data/test/replica_set/max_values_test.rb +59 -10
  81. data/test/replica_set/pinning_test.rb +2 -2
  82. data/test/replica_set/query_test.rb +2 -2
  83. data/test/replica_set/read_preference_test.rb +6 -6
  84. data/test/replica_set/refresh_test.rb +7 -7
  85. data/test/replica_set/replication_ack_test.rb +5 -5
  86. data/test/replica_set/ssl_test.rb +24 -106
  87. data/test/sharded_cluster/basic_test.rb +43 -15
  88. data/test/shared/authentication/basic_auth_shared.rb +215 -0
  89. data/test/shared/authentication/sasl_plain_shared.rb +96 -0
  90. data/test/shared/ssl_shared.rb +173 -0
  91. data/test/test_helper.rb +31 -199
  92. data/test/threading/basic_test.rb +29 -3
  93. data/test/tools/mongo_config.rb +45 -20
  94. data/test/tools/mongo_config_test.rb +1 -1
  95. data/test/unit/client_test.rb +136 -57
  96. data/test/unit/collection_test.rb +31 -55
  97. data/test/unit/connection_test.rb +135 -72
  98. data/test/unit/cursor_test.rb +2 -2
  99. data/test/unit/db_test.rb +19 -15
  100. data/test/unit/grid_test.rb +2 -2
  101. data/test/unit/mongo_sharded_client_test.rb +17 -15
  102. data/test/unit/node_test.rb +2 -2
  103. data/test/unit/pool_manager_test.rb +7 -5
  104. data/test/unit/read_pref_test.rb +82 -2
  105. data/test/unit/read_test.rb +14 -14
  106. data/test/unit/safe_test.rb +9 -9
  107. data/test/unit/sharding_pool_manager_test.rb +11 -5
  108. data/test/unit/write_concern_test.rb +9 -9
  109. metadata +71 -56
  110. metadata.gz.sig +0 -0
  111. data/test/functional/threading_test.rb +0 -109
  112. data/test/shared/authentication.rb +0 -121
  113. data/test/unit/util_test.rb +0 -69
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2013 10gen Inc.
1
+ # Copyright (C) 2009-2013 MongoDB, Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -36,8 +36,8 @@ class ComplexConnectTest < Test::Unit::TestCase
36
36
 
37
37
  version = @client.server_version
38
38
 
39
- @client['test']['foo'].insert({:a => 1})
40
- assert @client['test']['foo'].find_one
39
+ @client[TEST_DB]['complext-connect-test'].insert({:a => 1})
40
+ assert @client[TEST_DB]['complext-connect-test'].find_one
41
41
 
42
42
  config = primary['local']['system.replset'].find_one
43
43
  old_config = config.dup
@@ -55,19 +55,18 @@ class ComplexConnectTest < Test::Unit::TestCase
55
55
  end
56
56
  @rs.start
57
57
 
58
-
59
58
  assert_raise ConnectionFailure do
60
- primary['admin'].command(step_down_command)
59
+ perform_step_down(primary)
61
60
  end
62
61
 
63
62
  # isMaster is currently broken in 2.1+ when called on removed nodes
64
63
  puts version
65
64
  if version < "2.1"
66
65
  rescue_connection_failure do
67
- assert @client['test']['foo'].find_one
66
+ assert @client[TEST_DB]['complext-connect-test'].find_one
68
67
  end
69
68
 
70
- assert @client['test']['foo'].find_one
69
+ assert @client[TEST_DB]['complext-connect-test'].find_one
71
70
  end
72
71
 
73
72
  primary = MongoClient.new(host, @rs.primary.port)
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2013 10gen Inc.
1
+ # Copyright (C) 2009-2013 MongoDB, Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
14
14
 
15
15
  require 'test_helper'
16
16
 
17
- class ConnectionTest < Test::Unit::TestCase
17
+ class ReplicaSetConnectionTest < Test::Unit::TestCase
18
18
 
19
19
  def setup
20
20
  ensure_cluster(:rs)
@@ -59,33 +59,37 @@ class ConnectionTest < Test::Unit::TestCase
59
59
  end
60
60
 
61
61
  def test_connect_with_connection_string_in_env_var
62
- ENV['MONGODB_URI'] = "mongodb://#{@rs.repl_set_seeds_uri}?replicaset=#{@rs.repl_set_name}"
63
- @connection = ReplSetConnection.new
64
- assert !@connection.nil?
65
- assert_equal 3, @connection.seeds.length
66
- assert_equal @rs.replicas[0].host, @connection.seeds[0][0]
67
- assert_equal @rs.replicas[1].host, @connection.seeds[1][0]
68
- assert_equal @rs.replicas[2].host, @connection.seeds[2][0]
69
- assert_equal @rs.replicas[0].port, @connection.seeds[0][1]
70
- assert_equal @rs.replicas[1].port, @connection.seeds[1][1]
71
- assert_equal @rs.replicas[2].port, @connection.seeds[2][1]
72
- assert_equal @rs.repl_set_name, @connection.replica_set_name
73
- assert @connection.connected?
62
+ uri = "mongodb://#{@rs.repl_set_seeds_uri}?replicaset=#{@rs.repl_set_name}"
63
+ with_preserved_env_uri(uri) do
64
+ @connection = ReplSetConnection.new
65
+ assert !@connection.nil?
66
+ assert_equal 3, @connection.seeds.length
67
+ assert_equal @rs.replicas[0].host, @connection.seeds[0][0]
68
+ assert_equal @rs.replicas[1].host, @connection.seeds[1][0]
69
+ assert_equal @rs.replicas[2].host, @connection.seeds[2][0]
70
+ assert_equal @rs.replicas[0].port, @connection.seeds[0][1]
71
+ assert_equal @rs.replicas[1].port, @connection.seeds[1][1]
72
+ assert_equal @rs.replicas[2].port, @connection.seeds[2][1]
73
+ assert_equal @rs.repl_set_name, @connection.replica_set_name
74
+ assert @connection.connected?
75
+ end
74
76
  end
75
77
 
76
78
  def test_connect_with_connection_string_in_implicit_mongodb_uri
77
- ENV['MONGODB_URI'] = "mongodb://#{@rs.repl_set_seeds_uri}?replicaset=#{@rs.repl_set_name}"
78
- @connection = Connection.from_uri
79
- assert !@connection.nil?
80
- assert_equal 3, @connection.seeds.length
81
- assert_equal @rs.replicas[0].host, @connection.seeds[0][0]
82
- assert_equal @rs.replicas[1].host, @connection.seeds[1][0]
83
- assert_equal @rs.replicas[2].host, @connection.seeds[2][0]
84
- assert_equal @rs.replicas[0].port, @connection.seeds[0][1]
85
- assert_equal @rs.replicas[1].port, @connection.seeds[1][1]
86
- assert_equal @rs.replicas[2].port, @connection.seeds[2][1]
87
- assert_equal @rs.repl_set_name, @connection.replica_set_name
88
- assert @connection.connected?
79
+ uri = "mongodb://#{@rs.repl_set_seeds_uri}?replicaset=#{@rs.repl_set_name}"
80
+ with_preserved_env_uri(uri) do
81
+ @connection = Connection.from_uri
82
+ assert !@connection.nil?
83
+ assert_equal 3, @connection.seeds.length
84
+ assert_equal @rs.replicas[0].host, @connection.seeds[0][0]
85
+ assert_equal @rs.replicas[1].host, @connection.seeds[1][0]
86
+ assert_equal @rs.replicas[2].host, @connection.seeds[2][0]
87
+ assert_equal @rs.replicas[0].port, @connection.seeds[0][1]
88
+ assert_equal @rs.replicas[1].port, @connection.seeds[1][1]
89
+ assert_equal @rs.replicas[2].port, @connection.seeds[2][1]
90
+ assert_equal @rs.repl_set_name, @connection.replica_set_name
91
+ assert @connection.connected?
92
+ end
89
93
  end
90
94
 
91
95
  def test_connect_with_new_seed_format
@@ -110,21 +114,25 @@ class ConnectionTest < Test::Unit::TestCase
110
114
  end
111
115
 
112
116
  def test_connect_with_full_connection_string_in_env_var
113
- ENV['MONGODB_URI'] = "mongodb://#{@rs.repl_set_seeds_uri}?replicaset=#{@rs.repl_set_name};safe=true;w=2;fsync=true;slaveok=true"
114
- @connection = ReplSetConnection.new
115
- assert !@connection.nil?
116
- assert @connection.connected?
117
- assert_equal 2, @connection.write_concern[:w]
118
- assert @connection.write_concern[:fsync]
119
- assert @connection.read_pool
117
+ uri = "mongodb://#{@rs.repl_set_seeds_uri}?replicaset=#{@rs.repl_set_name};safe=true;w=2;fsync=true;slaveok=true"
118
+ with_preserved_env_uri(uri) do
119
+ @connection = ReplSetConnection.new
120
+ assert !@connection.nil?
121
+ assert @connection.connected?
122
+ assert_equal 2, @connection.write_concern[:w]
123
+ assert @connection.write_concern[:fsync]
124
+ assert @connection.read_pool
125
+ end
120
126
  end
121
127
 
122
128
  def test_connect_options_override_env_var
123
- ENV['MONGODB_URI'] = "mongodb://#{@rs.repl_set_seeds_uri}?replicaset=#{@rs.repl_set_name};safe=true;w=2;fsync=true;slaveok=true"
124
- @connection = ReplSetConnection.new({:safe => {:w => 1}})
125
- assert !@connection.nil?
126
- assert @connection.connected?
127
- assert_equal 1, @connection.write_concern[:w]
129
+ uri = "mongodb://#{@rs.repl_set_seeds_uri}?replicaset=#{@rs.repl_set_name};safe=true;w=2;fsync=true;slaveok=true"
130
+ with_preserved_env_uri(uri) do
131
+ @connection = ReplSetConnection.new({:safe => {:w => 1}})
132
+ assert !@connection.nil?
133
+ assert @connection.connected?
134
+ assert_equal 1, @connection.write_concern[:w]
135
+ end
128
136
  end
129
137
 
130
138
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2013 10gen Inc.
1
+ # Copyright (C) 2009-2013 MongoDB, Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@ class ReplicaSetCountTest < Test::Unit::TestCase
21
21
  @client = MongoReplicaSetClient.new(@rs.repl_set_seeds, :read => :primary_preferred)
22
22
  assert @client.primary_pool
23
23
  @primary = MongoClient.new(@client.primary_pool.host, @client.primary_pool.port)
24
- @db = @client.db(MONGO_TEST_DB)
24
+ @db = @client.db(TEST_DB)
25
25
  @db.drop_collection("test-sets")
26
26
  @coll = @db.collection("test-sets")
27
27
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2013 10gen Inc.
1
+ # Copyright (C) 2009-2013 MongoDB, Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -67,7 +67,7 @@ class ReplicaSetCursorTest < Test::Unit::TestCase
67
67
  # Setup ReplicaSet Connection
68
68
  @client = MongoReplicaSetClient.new(@rs.repl_set_seeds, :read => read)
69
69
 
70
- @db = @client.db(MONGO_TEST_DB)
70
+ @db = @client.db(TEST_DB)
71
71
  @db.drop_collection("cursor_tests")
72
72
  @coll = @db.collection("cursor_tests")
73
73
  insert_docs
@@ -107,24 +107,24 @@ class ReplicaSetCursorTest < Test::Unit::TestCase
107
107
  read_opts[:comment] = object_id
108
108
 
109
109
  # set profiling level to 2 on client and member to which the query will be routed
110
- @client.db(MONGO_TEST_DB).profiling_level = :all
110
+ @client.db(TEST_DB).profiling_level = :all
111
111
  @client.secondaries.each do |node|
112
112
  node = Mongo::MongoClient.new(node[0], node[1], :slave_ok => true)
113
- node.db(MONGO_TEST_DB).profiling_level = :all
113
+ node.db(TEST_DB).profiling_level = :all
114
114
  end
115
115
 
116
116
  @cursor = @coll.find({}, read_opts)
117
117
  @cursor.next
118
118
 
119
119
  # on client and other members set profiling level to 0
120
- @client.db(MONGO_TEST_DB).profiling_level = :off
120
+ @client.db(TEST_DB).profiling_level = :off
121
121
  @client.secondaries.each do |node|
122
122
  node = Mongo::MongoClient.new(node[0], node[1], :slave_ok => true)
123
- node.db(MONGO_TEST_DB).profiling_level = :off
123
+ node.db(TEST_DB).profiling_level = :off
124
124
  end
125
125
  # do a query on system.profile of the reader to see if it was used for the query
126
- profiled_queries = @read.db(MONGO_TEST_DB).collection('system.profile').find({
127
- 'ns' => "#{MONGO_TEST_DB}.cursor_tests", "query.$comment" => object_id })
126
+ profiled_queries = @read.db(TEST_DB).collection('system.profile').find({
127
+ 'ns' => "#{TEST_DB}.cursor_tests", "query.$comment" => object_id })
128
128
 
129
129
  assert_equal 1, profiled_queries.count
130
130
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2013 10gen Inc.
1
+ # Copyright (C) 2009-2013 MongoDB, Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -19,7 +19,8 @@ class ReplicaSetInsertTest < Test::Unit::TestCase
19
19
  def setup
20
20
  ensure_cluster(:rs)
21
21
  @client = MongoReplicaSetClient.new @rs.repl_set_seeds
22
- @db = @client.db(MONGO_TEST_DB)
22
+ @version = @client.server_version
23
+ @db = @client.db(TEST_DB)
23
24
  @db.drop_collection("test-sets")
24
25
  @coll = @db.collection("test-sets")
25
26
  end
@@ -61,4 +62,65 @@ class ReplicaSetInsertTest < Test::Unit::TestCase
61
62
  end
62
63
  end
63
64
 
65
+ context "Bulk API CollectionView" do
66
+ setup do
67
+ setup
68
+ end
69
+
70
+ should "handle error with deferred write concern error - spec Merging Results" do
71
+ with_write_commands_and_operations(@db.connection) do |wire_version|
72
+ @coll.remove
73
+ @coll.ensure_index(BSON::OrderedHash[:a, Mongo::ASCENDING], {:unique => true})
74
+ bulk = @coll.initialize_ordered_bulk_op
75
+ bulk.insert({:a => 1})
76
+ bulk.find({:a => 2}).upsert.update({'$set' => {:a => 2}})
77
+ bulk.insert({:a => 1})
78
+ ex = assert_raise BulkWriteError do
79
+ bulk.execute({:w => 5, :wtimeout => 1})
80
+ end
81
+ result = ex.result
82
+ assert_match_document(
83
+ {
84
+ "ok" => 1,
85
+ "n" => 1,
86
+ "writeConcernError" => [
87
+ {
88
+ "errmsg" => /waiting for replication timed out|timed out waiting for slaves|timeout/,
89
+ "code" => 64,
90
+ "errInfo" => {"wtimeout" => true},
91
+ "index" => 0
92
+ }
93
+ ],
94
+ "code" => 65,
95
+ "errmsg" => "batch item errors occurred",
96
+ "nInserted" => 1
97
+ }, result, "wire_version:#{wire_version}")
98
+ end
99
+ end
100
+
101
+ should "handle unordered errors with deferred write concern error - spec Merging Results" do # TODO - spec review
102
+ with_write_commands_and_operations(@db.connection) do |wire_version|
103
+ @coll.remove
104
+ @coll.ensure_index(BSON::OrderedHash[:a, Mongo::ASCENDING], {:unique => true})
105
+ bulk = @coll.initialize_unordered_bulk_op
106
+ bulk.insert({:a => 1})
107
+ bulk.find({:a => 2}).upsert.update({'$set' => {:a => 1}})
108
+ bulk.insert({:a => 3})
109
+ ex = assert_raise BulkWriteError do
110
+ bulk.execute({:w => 5, :wtimeout => 1})
111
+ end
112
+ result = ex.result # unordered varies, don't use assert_bulk_exception
113
+ assert_equal(1, result["ok"], "wire_version:#{wire_version}")
114
+ assert_equal(2, result["n"], "wire_version:#{wire_version}")
115
+ assert(result["nInserted"] >= 1, "wire_version:#{wire_version}")
116
+ assert_equal(65, result["code"], "wire_version:#{wire_version}")
117
+ assert_equal("batch item errors occurred", result["errmsg"], "wire_version:#{wire_version}")
118
+ assert(result["writeErrors"].size >= 1, "wire_version:#{wire_version}")
119
+ assert(result["writeConcernError"].size >= 1, "wire_version:#{wire_version}") if wire_version >= 2
120
+ assert(@coll.size >= 1, "wire_version:#{wire_version}")
121
+ end
122
+ end
123
+
124
+ end
125
+
64
126
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2013 10gen Inc.
1
+ # Copyright (C) 2009-2013 MongoDB, Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -29,25 +29,31 @@ class MaxValuesTest < Test::Unit::TestCase
29
29
  }
30
30
  end
31
31
 
32
- def test_initial_max_sizes
33
- assert @client.max_message_size
32
+ def test_initial_max_and_min_values
34
33
  assert @client.max_bson_size
34
+ assert @client.max_message_size
35
+ assert @client.max_wire_version
36
+ assert @client.min_wire_version
35
37
  end
36
38
 
37
- def test_updated_max_sizes_after_node_config_change
39
+ def test_updated_max_and_min_sizes_after_node_config_change
38
40
  @db.stubs(:command).returns(
39
41
  @ismaster.merge({'ismaster' => true}),
40
42
  @ismaster.merge({'secondary' => true, 'maxMessageSizeBytes' => 1024 * MESSAGE_SIZE_FACTOR}),
41
- @ismaster.merge({'secondary' => true, 'maxBsonObjectSize' => 1024})
43
+ @ismaster.merge({'secondary' => true, 'maxBsonObjectSize' => 1024}),
44
+ @ismaster.merge({'secondary' => true, 'maxWireVersion' => 0}),
45
+ @ismaster.merge({'secondary' => true, 'minWireVersion' => 0})
42
46
  )
43
47
  @client.local_manager.stubs(:refresh_required?).returns(true)
44
48
  @client.refresh
45
49
 
46
50
  assert_equal 1024, @client.max_bson_size
47
51
  assert_equal 1024 * MESSAGE_SIZE_FACTOR, @client.max_message_size
52
+ assert_equal 0, @client.max_wire_version
53
+ assert_equal 0, @client.min_wire_version
48
54
  end
49
55
 
50
- def test_neither_max_sizes_in_config
56
+ def test_no_values_in_config
51
57
  @db.stubs(:command).returns(
52
58
  @ismaster.merge({'ismaster' => true}),
53
59
  @ismaster.merge({'secondary' => true}),
@@ -58,6 +64,8 @@ class MaxValuesTest < Test::Unit::TestCase
58
64
 
59
65
  assert_equal DEFAULT_MAX_BSON_SIZE, @client.max_bson_size
60
66
  assert_equal DEFAULT_MAX_BSON_SIZE * MESSAGE_SIZE_FACTOR, @client.max_message_size
67
+ assert_equal 0, @client.max_wire_version
68
+ assert_equal 0, @client.min_wire_version
61
69
  end
62
70
 
63
71
  def test_only_bson_size_in_config
@@ -71,20 +79,61 @@ class MaxValuesTest < Test::Unit::TestCase
71
79
 
72
80
  assert_equal 1024, @client.max_bson_size
73
81
  assert_equal 1024 * MESSAGE_SIZE_FACTOR, @client.max_message_size
82
+ assert_equal 0, @client.max_wire_version
83
+ assert_equal 0, @client.min_wire_version
74
84
  end
75
85
 
76
- def test_both_sizes_in_config
86
+ def test_values_in_config
87
+ #ismaster is called three times on the first node
77
88
  @db.stubs(:command).returns(
78
- @ismaster.merge({'ismaster' => true, 'maxMessageSizeBytes' => 1024 * 2 * MESSAGE_SIZE_FACTOR, 'maxBsonObjectSize' => 1024}),
79
- @ismaster.merge({'secondary' => true, 'maxMessageSizeBytes' => 1024 * 2 * MESSAGE_SIZE_FACTOR, 'maxBsonObjectSize' => 1024}),
80
- @ismaster.merge({'secondary' => true, 'maxMessageSizeBytes' => 1024 * 2 * MESSAGE_SIZE_FACTOR, 'maxBsonObjectSize' => 1024})
89
+ @ismaster.merge({'ismaster' => true, 'maxMessageSizeBytes' => 1024 * 2 * MESSAGE_SIZE_FACTOR,
90
+ 'maxBsonObjectSize' => 1024, 'maxWireVersion' => 2, 'minWireVersion' => 1}),
91
+ @ismaster.merge({'ismaster' => true, 'maxMessageSizeBytes' => 1024 * 2 * MESSAGE_SIZE_FACTOR,
92
+ 'maxBsonObjectSize' => 1024, 'maxWireVersion' => 2, 'minWireVersion' => 1}),
93
+ @ismaster.merge({'ismaster' => true, 'maxMessageSizeBytes' => 1024 * 2 * MESSAGE_SIZE_FACTOR,
94
+ 'maxBsonObjectSize' => 1024, 'maxWireVersion' => 2, 'minWireVersion' => 1}),
95
+ @ismaster.merge({'secondary' => true, 'maxMessageSizeBytes' => 1024 * 2 * MESSAGE_SIZE_FACTOR,
96
+ 'maxBsonObjectSize' => 1024, 'maxWireVersion' => 2, 'minWireVersion' => 0}),
97
+ @ismaster.merge({'secondary' => true, 'maxMessageSizeBytes' => 1024 * 2 * MESSAGE_SIZE_FACTOR,
98
+ 'maxBsonObjectSize' => 1024, 'maxWireVersion' => 1, 'minWireVersion' => 0})
81
99
  )
82
100
  @client.local_manager.stubs(:refresh_required?).returns(true)
83
101
  @client.refresh
84
102
 
85
103
  assert_equal 1024, @client.max_bson_size
86
104
  assert_equal 1024 * 2 * MESSAGE_SIZE_FACTOR, @client.max_message_size
105
+ assert_equal 1, @client.max_wire_version # minimum of all max_wire_version
106
+ assert_equal 1, @client.min_wire_version # maximum of all min_wire_version
87
107
  end
88
108
 
109
+ def test_wire_version_not_in_range
110
+ min_wire_version, max_wire_version = [Mongo::MongoClient::MIN_WIRE_VERSION-1, Mongo::MongoClient::MIN_WIRE_VERSION-1]
111
+ #ismaster is called three times on the first node
112
+ @db.stubs(:command).returns(
113
+ @ismaster.merge({'ismaster' => true, 'maxWireVersion' => max_wire_version, 'minWireVersion' => min_wire_version}),
114
+ @ismaster.merge({'ismaster' => true, 'maxWireVersion' => max_wire_version, 'minWireVersion' => min_wire_version}),
115
+ @ismaster.merge({'ismaster' => true, 'maxWireVersion' => max_wire_version, 'minWireVersion' => min_wire_version}),
116
+ @ismaster.merge({'secondary' => true, 'maxWireVersion' => max_wire_version, 'minWireVersion' => min_wire_version}),
117
+ @ismaster.merge({'secondary' => true, 'maxWireVersion' => max_wire_version, 'minWireVersion' => min_wire_version})
118
+ )
119
+ @client.local_manager.stubs(:refresh_required?).returns(true)
120
+ assert_raises Mongo::ConnectionFailure do
121
+ @client.refresh
122
+ end
123
+ end
124
+
125
+ def test_use_write_command
126
+ with_write_commands(@client) do
127
+ assert_true @client.use_write_command?({:w => 1})
128
+ assert_false @client.use_write_command?({:w => 0})
129
+ end
130
+ with_write_operations(@client) do
131
+ assert_false @client.use_write_command?({:w => 1})
132
+ assert_false @client.use_write_command?({:w => 0})
133
+ end
134
+ @client.local_manager.primary_pool.node.expects(:wire_version_feature?).at_least_once.returns(true)
135
+ assert_true @client.use_write_command?({:w => 1})
136
+ assert_false @client.use_write_command?({:w => 0})
137
+ end
89
138
  end
90
139
 
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2013 10gen Inc.
1
+ # Copyright (C) 2009-2013 MongoDB, Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -18,7 +18,7 @@ class ReplicaSetPinningTest < Test::Unit::TestCase
18
18
  def setup
19
19
  ensure_cluster(:rs)
20
20
  @client = MongoReplicaSetClient.new(@rs.repl_set_seeds, :name => @rs.repl_set_name)
21
- @db = @client.db(MONGO_TEST_DB)
21
+ @db = @client.db(TEST_DB)
22
22
  @coll = @db.collection("test-sets")
23
23
  @coll.insert({:a => 1})
24
24
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2013 10gen Inc.
1
+ # Copyright (C) 2009-2013 MongoDB, Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@ class ReplicaSetQueryTest < Test::Unit::TestCase
19
19
  def setup
20
20
  ensure_cluster(:rs)
21
21
  @client = MongoReplicaSetClient.new @rs.repl_set_seeds
22
- @db = @client.db(MONGO_TEST_DB)
22
+ @db = @client.db(TEST_DB)
23
23
  @db.drop_collection("test-sets")
24
24
  @coll = @db.collection("test-sets")
25
25
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2013 10gen Inc.
1
+ # Copyright (C) 2009-2013 MongoDB, Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@ class ReadPreferenceTest < Test::Unit::TestCase
22
22
  # Insert data
23
23
  primary = @rs.primary
24
24
  conn = Connection.new(primary.host, primary.port)
25
- db = conn.db(MONGO_TEST_DB)
25
+ db = conn.db(TEST_DB)
26
26
  coll = db.collection("test-sets")
27
27
  coll.save({:a => 20}, {:w => 2})
28
28
  end
@@ -103,7 +103,7 @@ class ReadPreferenceTest < Test::Unit::TestCase
103
103
 
104
104
  # Test that reads are going to the right members
105
105
  assert_raise_error ConnectionFailure do
106
- @primary[MONGO_TEST_DB]['test-sets'].find_one
106
+ @primary[TEST_DB]['test-sets'].find_one
107
107
  end
108
108
  assert_query_route(@primary_preferred, @secondary_direct)
109
109
  assert_query_route(@secondary, @secondary_direct)
@@ -142,7 +142,7 @@ class ReadPreferenceTest < Test::Unit::TestCase
142
142
  assert_query_route(@primary, @primary_direct)
143
143
  assert_query_route(@primary_preferred, @primary_direct)
144
144
  assert_raise_error ConnectionFailure do
145
- @secondary[MONGO_TEST_DB]['test-sets'].find_one
145
+ @secondary[TEST_DB]['test-sets'].find_one
146
146
  end
147
147
  assert_query_route(@secondary_preferred, @primary_direct)
148
148
 
@@ -166,7 +166,7 @@ class ReadPreferenceTest < Test::Unit::TestCase
166
166
 
167
167
  def test_write_lots_of_data
168
168
  @conn = make_connection(:secondary_preferred)
169
- @db = @conn[MONGO_TEST_DB]
169
+ @db = @conn[TEST_DB]
170
170
  @coll = @db.collection("test-sets", {:w => 2})
171
171
 
172
172
  6000.times do |n|
@@ -206,7 +206,7 @@ class ReadPreferenceTest < Test::Unit::TestCase
206
206
  #puts "#{test_connection.read_pool.port} #{expected_target.read_pool.port}"
207
207
  queries_before = query_count(expected_target)
208
208
  assert_nothing_raised do
209
- test_connection['MONGO_TEST_DB']['test-sets'].find_one
209
+ test_connection[TEST_DB]['test-sets'].find_one
210
210
  end
211
211
  queries_after = query_count(expected_target)
212
212
  assert_equal 1, queries_after - queries_before