mongo 1.7.1 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (138) hide show
  1. data/{LICENSE.txt → LICENSE} +0 -0
  2. data/README.md +124 -111
  3. data/Rakefile +9 -325
  4. data/VERSION +1 -0
  5. data/bin/mongo_console +4 -4
  6. data/examples/admin.rb +43 -0
  7. data/examples/capped.rb +22 -0
  8. data/examples/cursor.rb +48 -0
  9. data/examples/gridfs.rb +44 -0
  10. data/examples/index_test.rb +126 -0
  11. data/examples/info.rb +31 -0
  12. data/examples/queries.rb +74 -0
  13. data/examples/replica_set.rb +26 -0
  14. data/examples/simple.rb +25 -0
  15. data/examples/strict.rb +35 -0
  16. data/examples/types.rb +36 -0
  17. data/{test/load → examples/web}/thin/load.rb +3 -1
  18. data/{test/load → examples/web}/unicorn/load.rb +5 -3
  19. data/lib/mongo.rb +8 -10
  20. data/lib/mongo/collection.rb +134 -114
  21. data/lib/mongo/cursor.rb +21 -14
  22. data/lib/mongo/db.rb +30 -28
  23. data/lib/mongo/exceptions.rb +1 -1
  24. data/lib/mongo/gridfs/grid.rb +8 -7
  25. data/lib/mongo/gridfs/grid_ext.rb +1 -1
  26. data/lib/mongo/gridfs/grid_file_system.rb +6 -5
  27. data/lib/mongo/gridfs/grid_io.rb +22 -19
  28. data/lib/mongo/legacy.rb +82 -0
  29. data/lib/mongo/{connection.rb → mongo_client.rb} +82 -61
  30. data/lib/mongo/{repl_set_connection.rb → mongo_replica_set_client.rb} +54 -39
  31. data/lib/mongo/{sharded_connection.rb → mongo_sharded_client.rb} +9 -9
  32. data/lib/mongo/networking.rb +25 -20
  33. data/lib/mongo/util/conversions.rb +1 -1
  34. data/lib/mongo/util/core_ext.rb +1 -1
  35. data/lib/mongo/util/logging.rb +20 -4
  36. data/lib/mongo/util/node.rb +16 -16
  37. data/lib/mongo/util/pool.rb +56 -27
  38. data/lib/mongo/util/pool_manager.rb +28 -27
  39. data/lib/mongo/util/server_version.rb +1 -1
  40. data/lib/mongo/util/sharding_pool_manager.rb +8 -8
  41. data/lib/mongo/util/ssl_socket.rb +1 -5
  42. data/lib/mongo/util/support.rb +24 -8
  43. data/lib/mongo/util/tcp_socket.rb +0 -4
  44. data/lib/mongo/util/uri_parser.rb +54 -38
  45. data/lib/mongo/util/write_concern.rb +67 -0
  46. data/mongo.gemspec +21 -32
  47. data/test/auxillary/{1.4_features.rb → 1.4_feature_test.rb} +4 -5
  48. data/test/auxillary/authentication_test.rb +18 -20
  49. data/test/auxillary/autoreconnect_test.rb +3 -5
  50. data/test/auxillary/fork_test.rb +5 -7
  51. data/test/auxillary/repl_set_auth_test.rb +13 -15
  52. data/test/auxillary/slave_connection_test.rb +8 -7
  53. data/test/auxillary/threaded_authentication_test.rb +15 -17
  54. data/test/bson/binary_test.rb +1 -1
  55. data/test/bson/bson_test.rb +60 -36
  56. data/test/bson/byte_buffer_test.rb +1 -1
  57. data/test/bson/hash_with_indifferent_access_test.rb +2 -2
  58. data/test/bson/json_test.rb +1 -2
  59. data/test/bson/object_id_test.rb +1 -2
  60. data/test/bson/ordered_hash_test.rb +1 -1
  61. data/test/bson/timestamp_test.rb +1 -1
  62. data/test/{collection_test.rb → functional/collection_test.rb} +57 -57
  63. data/test/{connection_test.rb → functional/connection_test.rb} +75 -89
  64. data/test/{conversions_test.rb → functional/conversions_test.rb} +1 -1
  65. data/test/{cursor_fail_test.rb → functional/cursor_fail_test.rb} +3 -29
  66. data/test/{cursor_message_test.rb → functional/cursor_message_test.rb} +1 -1
  67. data/test/{cursor_test.rb → functional/cursor_test.rb} +5 -1
  68. data/test/{db_api_test.rb → functional/db_api_test.rb} +8 -9
  69. data/test/{db_connection_test.rb → functional/db_connection_test.rb} +3 -5
  70. data/test/{db_test.rb → functional/db_test.rb} +13 -13
  71. data/test/{grid_file_system_test.rb → functional/grid_file_system_test.rb} +2 -2
  72. data/test/{grid_io_test.rb → functional/grid_io_test.rb} +6 -6
  73. data/test/{grid_test.rb → functional/grid_test.rb} +4 -10
  74. data/test/{pool_test.rb → functional/pool_test.rb} +1 -1
  75. data/test/functional/safe_test.rb +84 -0
  76. data/test/{support_test.rb → functional/support_test.rb} +1 -1
  77. data/test/{threading_test.rb → functional/threading_test.rb} +9 -9
  78. data/test/{timeout_test.rb → functional/timeout_test.rb} +1 -1
  79. data/test/{uri_test.rb → functional/uri_test.rb} +1 -1
  80. data/test/functional/write_concern_test.rb +104 -0
  81. data/test/replica_set/basic_test.rb +139 -0
  82. data/test/replica_set/client_test.rb +255 -0
  83. data/test/replica_set/complex_connect_test.rb +62 -0
  84. data/test/replica_set/connection_test.rb +255 -0
  85. data/test/{replica_sets → replica_set}/count_test.rb +17 -14
  86. data/test/replica_set/cursor_test.rb +75 -0
  87. data/test/{replica_sets → replica_set}/insert_test.rb +19 -16
  88. data/test/replica_set/query_test.rb +64 -0
  89. data/test/replica_set/refresh_test.rb +153 -0
  90. data/test/{replica_sets → replica_set}/replication_ack_test.rb +21 -17
  91. data/test/sharded_cluster/basic_test.rb +31 -50
  92. data/test/support/hash_with_indifferent_access.rb +1 -1
  93. data/test/test_helper.rb +56 -9
  94. data/test/threading/threading_with_large_pool_test.rb +8 -8
  95. data/test/tools/mongo_config.rb +270 -58
  96. data/test/tools/mongo_config_test.rb +146 -0
  97. data/test/unit/client_test.rb +230 -0
  98. data/test/unit/collection_test.rb +45 -32
  99. data/test/unit/connection_test.rb +82 -74
  100. data/test/unit/cursor_test.rb +14 -6
  101. data/test/unit/db_test.rb +8 -8
  102. data/test/unit/grid_test.rb +11 -11
  103. data/test/unit/node_test.rb +24 -24
  104. data/test/unit/pool_manager_test.rb +13 -13
  105. data/test/unit/pool_test.rb +1 -1
  106. data/test/unit/read_test.rb +21 -26
  107. data/test/unit/safe_test.rb +52 -33
  108. data/test/unit/util_test.rb +55 -0
  109. data/test/unit/write_concern_test.rb +161 -0
  110. metadata +158 -171
  111. data/docs/CREDITS.md +0 -123
  112. data/docs/FAQ.md +0 -116
  113. data/docs/GRID_FS.md +0 -158
  114. data/docs/HISTORY.md +0 -392
  115. data/docs/READ_PREFERENCE.md +0 -99
  116. data/docs/RELEASES.md +0 -54
  117. data/docs/REPLICA_SETS.md +0 -113
  118. data/docs/TAILABLE_CURSORS.md +0 -51
  119. data/docs/TUTORIAL.md +0 -356
  120. data/docs/WRITE_CONCERN.md +0 -31
  121. data/lib/mongo/gridfs/grid_io_fix.rb +0 -38
  122. data/lib/mongo/version.rb +0 -3
  123. data/test/bson/test_helper.rb +0 -30
  124. data/test/replica_sets/basic_test.rb +0 -119
  125. data/test/replica_sets/complex_connect_test.rb +0 -57
  126. data/test/replica_sets/complex_read_preference_test.rb +0 -237
  127. data/test/replica_sets/connect_test.rb +0 -156
  128. data/test/replica_sets/cursor_test.rb +0 -70
  129. data/test/replica_sets/pooled_insert_test.rb +0 -57
  130. data/test/replica_sets/query_test.rb +0 -50
  131. data/test/replica_sets/read_preference_test.rb +0 -234
  132. data/test/replica_sets/refresh_test.rb +0 -156
  133. data/test/replica_sets/refresh_with_threads_test.rb +0 -60
  134. data/test/replica_sets/rs_test_helper.rb +0 -39
  135. data/test/safe_test.rb +0 -68
  136. data/test/sharded_cluster/mongo_config_test.rb +0 -126
  137. data/test/sharded_cluster/sc_test_helper.rb +0 -39
  138. data/test/tools/repl_set_manager.rb +0 -418
@@ -1,34 +1,23 @@
1
- require File.expand_path('../lib/mongo/version', __FILE__)
2
-
3
1
  Gem::Specification.new do |s|
4
- s.name = 'mongo'
5
-
6
- s.version = Mongo::VERSION
7
-
8
- s.platform = Gem::Platform::RUBY
9
- s.summary = 'Ruby driver for MongoDB'
10
- s.description = 'A Ruby driver for MongoDB. For more information about Mongo, see http://www.mongodb.org.'
11
-
12
- s.require_paths = ['lib']
13
-
14
- s.files = ['README.md', 'Rakefile', 'mongo.gemspec', 'LICENSE.txt']
15
- s.files += ['lib/mongo.rb'] + Dir['lib/mongo/**/*.rb']
16
- s.files += Dir['docs/**/*.md'] + Dir['examples/**/*.rb'] + Dir['bin/**/*.rb']
17
- s.files += Dir['bin/mongo_console']
18
- s.test_files = Dir['test/**/*.rb']
19
-
20
- s.executables = ['mongo_console']
21
-
22
- s.has_rdoc = true
23
- s.test_files = Dir['test/**/*.rb']
24
-
25
- s.has_rdoc = true
26
- s.rdoc_options = ['--main', 'README.md', '--inline-source']
27
- s.extra_rdoc_files = ['README.md']
28
-
29
- s.authors = ['Jim Menard', 'Mike Dirolf', 'Kyle Banker', 'Tyler Brock']
30
- s.email = 'mongodb-dev@googlegroups.com'
31
- s.homepage = 'http://www.mongodb.org'
32
-
33
- s.add_dependency('bson', "~> #{Mongo::VERSION}")
2
+ s.name = 'mongo'
3
+
4
+ s.version = File.read(File.join(File.dirname(__FILE__), 'VERSION'))
5
+ s.platform = Gem::Platform::RUBY
6
+ s.authors = ['Tyler Brock', 'Gary Murakami', 'Emily Stolfo', 'Brandon Black']
7
+ s.email = 'mongodb-dev@googlegroups.com'
8
+ s.homepage = 'http://www.mongodb.org'
9
+ s.summary = 'Ruby driver for MongoDB'
10
+ s.description = 'A Ruby driver for MongoDB. For more information about Mongo, see http://www.mongodb.org.'
11
+ s.rubyforge_project = 'mongo'
12
+
13
+ s.files = ['mongo.gemspec', 'LICENSE', 'VERSION']
14
+ s.files += ['README.md', 'Rakefile', 'bin/mongo_console']
15
+ s.files += ['lib/mongo.rb'] + Dir['lib/mongo/**/*.rb'] + Dir['examples/**/*.rb']
16
+
17
+ s.test_files = Dir['test/**/*.rb']
18
+ s.executables = ['mongo_console']
19
+ s.require_paths = ['lib']
20
+ s.has_rdoc = 'yard'
21
+
22
+ s.add_dependency('bson', "~> #{s.version}")
34
23
  end
@@ -1,15 +1,14 @@
1
- $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
1
+ require 'test_helper'
2
2
  require 'mongo'
3
- require 'test/unit'
4
- require File.expand_path("../../test_helper", __FILE__)
3
+
5
4
 
6
5
  # Demonstrate features in MongoDB 1.4
7
6
  class Features14Test < Test::Unit::TestCase
8
7
 
9
8
  context "MongoDB 1.4" do
10
9
  setup do
11
- @con = Mongo::Connection.new
12
- @db = @con['mongo-ruby-test']
10
+ @client = MongoClient.new
11
+ @db = @client['mongo-ruby-test']
13
12
  @col = @db['new-features']
14
13
  end
15
14
 
@@ -1,7 +1,5 @@
1
- $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
1
+ require 'test_helper'
2
2
  require 'mongo'
3
- require 'test/unit'
4
- require File.expand_path("../../test_helper", __FILE__)
5
3
 
6
4
  # NOTE: This test requires bouncing the server.
7
5
  # It also requires that a user exists on the admin database.
@@ -9,17 +7,17 @@ class AuthenticationTest < Test::Unit::TestCase
9
7
  include Mongo
10
8
 
11
9
  def setup
12
- @conn = Mongo::Connection.new
13
- @db1 = @conn.db('mongo-ruby-test-auth1')
14
- @db2 = @conn.db('mongo-ruby-test-auth2')
15
- @admin = @conn.db('admin')
10
+ @client = MongoClient.new
11
+ @db1 = @client.db('mongo-ruby-test-auth1')
12
+ @db2 = @client.db('mongo-ruby-test-auth2')
13
+ @admin = @client.db('admin')
16
14
  end
17
15
 
18
16
  def teardown
19
17
  @db1.authenticate('user1', 'secret')
20
18
  @db2.authenticate('user2', 'secret')
21
- @conn.drop_database('mongo-ruby-test-auth1')
22
- @conn.drop_database('mongo-ruby-test-auth2')
19
+ @client.drop_database('mongo-ruby-test-auth1')
20
+ @client.drop_database('mongo-ruby-test-auth2')
23
21
  end
24
22
 
25
23
  def test_authenticate
@@ -30,18 +28,18 @@ class AuthenticationTest < Test::Unit::TestCase
30
28
  @admin.logout
31
29
 
32
30
  assert_raise Mongo::OperationFailure do
33
- @db1['stuff'].insert({:a => 2}, :safe => true)
31
+ @db1['stuff'].insert({:a => 2})
34
32
  end
35
33
 
36
34
  assert_raise Mongo::OperationFailure do
37
- @db2['stuff'].insert({:a => 2}, :safe => true)
35
+ @db2['stuff'].insert({:a => 2})
38
36
  end
39
37
 
40
38
  @db1.authenticate('user1', 'secret')
41
39
  @db2.authenticate('user2', 'secret')
42
40
 
43
- assert @db1['stuff'].insert({:a => 2}, :safe => true)
44
- assert @db2['stuff'].insert({:a => 2}, :safe => true)
41
+ assert @db1['stuff'].insert({:a => 2})
42
+ assert @db2['stuff'].insert({:a => 2})
45
43
 
46
44
  puts "Please bounce the server."
47
45
  gets
@@ -52,24 +50,24 @@ class AuthenticationTest < Test::Unit::TestCase
52
50
  rescue Mongo::ConnectionFailure
53
51
  end
54
52
 
55
- assert @db1['stuff'].insert({:a => 2}, :safe => true)
56
- assert @db2['stuff'].insert({:a => 2}, :safe => true)
57
- assert @db2['stuff'].find(:safe => true)
53
+ assert @db1['stuff'].insert({:a => 2})
54
+ assert @db2['stuff'].insert({:a => 2})
55
+ assert @db2['stuff'].find({})
58
56
 
59
57
  @db1.logout
60
58
  assert_raise Mongo::OperationFailure do
61
- @db1['stuff'].insert({:a => 2}, :safe => true)
59
+ @db1['stuff'].insert({:a => 2})
62
60
  end
63
61
 
64
62
  @db2.logout
65
63
  assert_raise Mongo::OperationFailure do
66
- assert @db2['stuff'].insert({:a => 2}, :safe => true)
64
+ assert @db2['stuff'].insert({:a => 2})
67
65
  end
68
66
 
69
67
  @db2.authenticate('userRO', 'secret')
70
- assert @db2['stuff'].find(:safe => true)
68
+ assert @db2['stuff'].find({})
71
69
  assert_raise Mongo::OperationFailure do
72
- assert @db2['stuff'].insert({:a => 2}, :safe => true)
70
+ assert @db2['stuff'].insert({:a => 2})
73
71
  end
74
72
  end
75
73
 
@@ -1,15 +1,13 @@
1
- $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
1
+ require 'test_helper'
2
2
  require 'mongo'
3
- require 'test/unit'
4
- require File.expand_path("../../test_helper", __FILE__)
5
3
 
6
4
  # NOTE: This test requires bouncing the server
7
5
  class AutoreconnectTest < Test::Unit::TestCase
8
6
  include Mongo
9
7
 
10
8
  def setup
11
- @conn = Mongo::Connection.new
12
- @db = @conn.db('mongo-ruby-test')
9
+ @client = MongoClient.new
10
+ @db = @client.db('mongo-ruby-test')
13
11
  @db.drop_collection("test-connect")
14
12
  @coll = @db.collection("test-connect")
15
13
  end
@@ -1,29 +1,27 @@
1
- $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
1
+ require 'test_helper'
2
2
  require 'mongo'
3
- require 'test/unit'
4
- require File.expand_path("../../test_helper", __FILE__)
5
3
 
6
4
  class ForkTest < Test::Unit::TestCase
7
5
  include Mongo
8
6
 
9
7
  def setup
10
- @conn = standard_connection
8
+ @client = standard_connection
11
9
  end
12
10
 
13
11
  def test_fork
14
12
  # Now insert some data
15
13
  10.times do |n|
16
- @conn[MONGO_TEST_DB]['nums'].insert({:a => n})
14
+ @client[MONGO_TEST_DB]['nums'].insert({:a => n})
17
15
  end
18
16
 
19
17
  # Now fork. You'll almost always see an exception here.
20
18
  if !Kernel.fork
21
19
  10.times do
22
- assert @conn[MONGO_TEST_DB]['nums'].find_one
20
+ assert @client[MONGO_TEST_DB]['nums'].find_one
23
21
  end
24
22
  else
25
23
  10.times do
26
- assert @conn[MONGO_TEST_DB]['nums'].find_one
24
+ assert @client[MONGO_TEST_DB]['nums'].find_one
27
25
  end
28
26
  end
29
27
  end
@@ -1,7 +1,5 @@
1
- $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
- require File.expand_path("../../test_helper", __FILE__)
3
- require './test/tools/auth_repl_set_manager'
4
- require './test/replica_sets/rs_test_helper'
1
+ require 'test_helper'
2
+ require 'mongo'
5
3
 
6
4
  class AuthTest < Test::Unit::TestCase
7
5
  include Mongo
@@ -16,35 +14,35 @@ class AuthTest < Test::Unit::TestCase
16
14
  end
17
15
 
18
16
  def test_repl_set_auth
19
- @conn = ReplSetConnection.new(build_seeds(3), :name => @rs.name)
17
+ @client = MongoReplicaSetClient.new(build_seeds(3), :name => @rs.name)
20
18
 
21
19
  # Add an admin user
22
- @conn['admin'].add_user("me", "secret")
20
+ @client['admin'].add_user("me", "secret")
23
21
 
24
22
  # Ensure that insert fails
25
23
  assert_raise_error Mongo::OperationFailure, "unauthorized" do
26
- @conn['foo']['stuff'].insert({:a => 2}, :safe => {:w => 3})
24
+ @client['foo']['stuff'].insert({:a => 2}, {:w => 3})
27
25
  end
28
26
 
29
27
  # Then authenticate
30
- assert @conn['admin'].authenticate("me", "secret")
28
+ assert @client['admin'].authenticate("me", "secret")
31
29
 
32
30
  # Insert should succeed now
33
- assert @conn['foo']['stuff'].insert({:a => 2}, :safe => {:w => 3})
31
+ assert @client['foo']['stuff'].insert({:a => 2}, {:w => 3})
34
32
 
35
33
  # So should a query
36
- assert @conn['foo']['stuff'].find_one
34
+ assert @client['foo']['stuff'].find_one
37
35
 
38
36
  # But not when we logout
39
- @conn['admin'].logout
37
+ @client['admin'].logout
40
38
 
41
39
  assert_raise_error Mongo::OperationFailure, "unauthorized" do
42
- @conn['foo']['stuff'].find_one
40
+ @client['foo']['stuff'].find_one
43
41
  end
44
42
 
45
43
  # Same should apply to a random secondary
46
- @slave1 = Connection.new(@conn.secondary_pools[0].host,
47
- @conn.secondary_pools[0].port, :slave_ok => true)
44
+ @slave1 = MongoClient.new(@client.secondary_pools[0].host,
45
+ @client.secondary_pools[0].port, :slave_ok => true)
48
46
 
49
47
  # Find should fail
50
48
  assert_raise_error Mongo::OperationFailure, "unauthorized" do
@@ -56,7 +54,7 @@ class AuthTest < Test::Unit::TestCase
56
54
  assert @slave1['foo']['stuff'].find_one
57
55
 
58
56
  # Same should apply when using :secondary_only
59
- @second_only = ReplSetConnection.new(build_seeds(3),
57
+ @second_only = MongoReplicaSetClient.new(build_seeds(3),
60
58
  :require_primary => false, :read => :secondary_only)
61
59
 
62
60
  # Find should fail
@@ -1,4 +1,5 @@
1
- require File.expand_path("../../test_helper", __FILE__)
1
+ require 'test_helper'
2
+ require 'mongo'
2
3
 
3
4
  # NOTE: these tests are run only if we can connect to a single MongoDB in slave mode.
4
5
  class SlaveConnectionTest < Test::Unit::TestCase
@@ -6,8 +7,8 @@ class SlaveConnectionTest < Test::Unit::TestCase
6
7
 
7
8
  def self.connect_to_slave
8
9
  @@host = ENV['MONGO_RUBY_DRIVER_HOST'] || 'localhost'
9
- @@port = ENV['MONGO_RUBY_DRIVER_PORT'] || Connection::DEFAULT_PORT
10
- conn = Connection.new(@@host, @@port, :slave_ok => true)
10
+ @@port = ENV['MONGO_RUBY_DRIVER_PORT'] || MongoClient::DEFAULT_PORT
11
+ conn = MongoClient.new(@@host, @@port, :slave_ok => true)
11
12
  response = conn['admin'].command(:ismaster => 1)
12
13
  Mongo::Support.ok?(response) && response['ismaster'] != 1
13
14
  end
@@ -17,20 +18,20 @@ class SlaveConnectionTest < Test::Unit::TestCase
17
18
 
18
19
  def test_connect_to_slave
19
20
  assert_raise Mongo::ConnectionFailure do
20
- @db = Connection.new(@@host, @@port, :slave_ok => false).db('ruby-mongo-demo')
21
+ @db = MongoClient.new(@@host, @@port, :slave_ok => false).db('ruby-mongo-demo')
21
22
  end
22
23
  end
23
24
 
24
25
  def test_slave_ok_sent_to_queries
25
- @con = Connection.new(@@host, @@port, :slave_ok => true)
26
+ @con = MongoClient.new(@@host, @@port, :slave_ok => true)
26
27
  assert_equal true, @con.slave_ok?
27
28
  end
28
29
  else
29
30
  puts "Not connected to slave; skipping slave connection tests."
30
31
 
31
32
  def test_slave_ok_false_on_queries
32
- @conn = Connection.new(@@host, @@port)
33
- assert !@conn.slave_ok?
33
+ @client = MongoClient.new(@@host, @@port)
34
+ assert !@client.slave_ok?
34
35
  end
35
36
  end
36
37
  end
@@ -1,8 +1,6 @@
1
- $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
1
+ require 'test_helper'
2
2
  require 'mongo'
3
3
  require 'thread'
4
- require 'test/unit'
5
- require File.expand_path("../../test_helper", __FILE__)
6
4
 
7
5
  # NOTE: This test requires bouncing the server.
8
6
  # It also requires that a user exists on the admin database.
@@ -10,17 +8,17 @@ class AuthenticationTest < Test::Unit::TestCase
10
8
  include Mongo
11
9
 
12
10
  def setup
13
- @conn = standard_connection(:pool_size => 10)
14
- @db1 = @conn.db('mongo-ruby-test-auth1')
15
- @db2 = @conn.db('mongo-ruby-test-auth2')
16
- @admin = @conn.db('admin')
11
+ @client = standard_connection(:pool_size => 10)
12
+ @db1 = @client.db('mongo-ruby-test-auth1')
13
+ @db2 = @client.db('mongo-ruby-test-auth2')
14
+ @admin = @client.db('admin')
17
15
  end
18
16
 
19
17
  def teardown
20
18
  @db1.authenticate('user1', 'secret')
21
19
  @db2.authenticate('user2', 'secret')
22
- @conn.drop_database('mongo-ruby-test-auth1')
23
- @conn.drop_database('mongo-ruby-test-auth2')
20
+ @client.drop_database('mongo-ruby-test-auth1')
21
+ @client.drop_database('mongo-ruby-test-auth2')
24
22
  end
25
23
 
26
24
  def threaded_exec
@@ -45,13 +43,13 @@ class AuthenticationTest < Test::Unit::TestCase
45
43
 
46
44
  threaded_exec do
47
45
  assert_raise Mongo::OperationFailure do
48
- @db1['stuff'].insert({:a => 2}, :safe => true)
46
+ @db1['stuff'].insert({:a => 2})
49
47
  end
50
48
  end
51
49
 
52
50
  threaded_exec do
53
51
  assert_raise Mongo::OperationFailure do
54
- @db2['stuff'].insert({:a => 2}, :safe => true)
52
+ @db2['stuff'].insert({:a => 2})
55
53
  end
56
54
  end
57
55
 
@@ -59,11 +57,11 @@ class AuthenticationTest < Test::Unit::TestCase
59
57
  @db2.authenticate('user2', 'secret')
60
58
 
61
59
  threaded_exec do
62
- assert @db1['stuff'].insert({:a => 2}, :safe => true)
60
+ assert @db1['stuff'].insert({:a => 2})
63
61
  end
64
62
 
65
63
  threaded_exec do
66
- assert @db2['stuff'].insert({:a => 2}, :safe => true)
64
+ assert @db2['stuff'].insert({:a => 2})
67
65
  end
68
66
 
69
67
  puts "Please bounce the server."
@@ -76,24 +74,24 @@ class AuthenticationTest < Test::Unit::TestCase
76
74
  end
77
75
 
78
76
  threaded_exec do
79
- assert @db1['stuff'].insert({:a => 2}, :safe => true)
77
+ assert @db1['stuff'].insert({:a => 2})
80
78
  end
81
79
 
82
80
  threaded_exec do
83
- assert @db2['stuff'].insert({:a => 2}, :safe => true)
81
+ assert @db2['stuff'].insert({:a => 2})
84
82
  end
85
83
 
86
84
  @db1.logout
87
85
  threaded_exec do
88
86
  assert_raise Mongo::OperationFailure do
89
- @db1['stuff'].insert({:a => 2}, :safe => true)
87
+ @db1['stuff'].insert({:a => 2})
90
88
  end
91
89
  end
92
90
 
93
91
  @db2.logout
94
92
  threaded_exec do
95
93
  assert_raise Mongo::OperationFailure do
96
- assert @db2['stuff'].insert({:a => 2}, :safe => true)
94
+ assert @db2['stuff'].insert({:a => 2})
97
95
  end
98
96
  end
99
97
  end
@@ -1,5 +1,5 @@
1
1
  # encoding:utf-8
2
- require File.expand_path("../test_helper", __FILE__)
2
+ require 'test_helper'
3
3
 
4
4
  class BinaryTest < Test::Unit::TestCase
5
5
  def setup
@@ -1,5 +1,5 @@
1
1
  # encoding:utf-8
2
- require File.expand_path("../test_helper", __FILE__)
2
+ require 'test_helper'
3
3
  require 'set'
4
4
 
5
5
  if RUBY_VERSION < '1.9'
@@ -27,6 +27,18 @@ rescue LoadError
27
27
  Zone = ActiveSupport::TimeWithZone.new(Time.now.utc, 'EST')
28
28
  end
29
29
 
30
+ begin
31
+ require 'active_support/multibyte/chars'
32
+ rescue LoadError
33
+ warn 'Mocking ActiveSupport::Multibyte::Chars'
34
+ module ActiveSupport
35
+ module Multibyte
36
+ class Chars < String
37
+ end
38
+ end
39
+ end
40
+ end
41
+
30
42
  class BSONTest < Test::Unit::TestCase
31
43
 
32
44
  include BSON
@@ -70,6 +82,17 @@ class BSONTest < Test::Unit::TestCase
70
82
  assert_doc_pass(doc)
71
83
  end
72
84
 
85
+ def test_valid_active_support_multibyte_chars
86
+ unless RUBY_PLATFORM =~ /java/
87
+ doc = {'doc' => ActiveSupport::Multibyte::Chars.new('aé')}
88
+ assert_doc_pass(doc)
89
+
90
+ bson = @encoder.serialize(doc)
91
+ doc = @encoder.deserialize(bson)
92
+ assert_equal doc['doc'], 'aé'
93
+ end
94
+ end
95
+
73
96
  def test_valid_utf8_key
74
97
  doc = {'aé' => 'hello'}
75
98
  assert_doc_pass(doc)
@@ -101,12 +124,11 @@ class BSONTest < Test::Unit::TestCase
101
124
  # In 1.8 we test that other string encodings raise an exception.
102
125
  # In 1.9 we test that they get auto-converted.
103
126
  if RUBY_VERSION < '1.9'
104
- if ! RUBY_PLATFORM =~ /java/
127
+ unless RUBY_PLATFORM == 'java'
105
128
  require 'iconv'
106
129
  def test_non_utf8_string
107
130
  string = Iconv.conv('iso-8859-1', 'utf-8', 'aé')
108
131
  doc = {'doc' => string}
109
- assert_doc_pass(doc)
110
132
  assert_raise InvalidStringEncoding do
111
133
  @encoder.serialize(doc)
112
134
  end
@@ -121,48 +143,50 @@ class BSONTest < Test::Unit::TestCase
121
143
  end
122
144
  end
123
145
  else
124
- def test_non_utf8_string
125
- assert_raise BSON::InvalidStringEncoding do
126
- BSON::BSON_CODER.serialize({'str' => 'aé'.encode('iso-8859-1')})
146
+ unless RUBY_PLATFORM == 'java'
147
+ def test_non_utf8_string
148
+ assert_raise BSON::InvalidStringEncoding do
149
+ BSON::BSON_CODER.serialize({'str' => 'aé'.encode('iso-8859-1')})
150
+ end
127
151
  end
128
- end
129
152
 
130
- def test_invalid_utf8_string
131
- str = "123\xD9"
132
- assert !str.valid_encoding?
133
- assert_raise BSON::InvalidStringEncoding do
134
- BSON::BSON_CODER.serialize({'str' => str})
153
+ def test_invalid_utf8_string
154
+ str = "123\xD9"
155
+ assert !str.valid_encoding?
156
+ assert_raise BSON::InvalidStringEncoding do
157
+ BSON::BSON_CODER.serialize({'str' => str})
158
+ end
135
159
  end
136
- end
137
160
 
138
- def test_non_utf8_key
139
- assert_raise BSON::InvalidStringEncoding do
140
- BSON::BSON_CODER.serialize({'aé'.encode('iso-8859-1') => 'hello'})
161
+ def test_non_utf8_key
162
+ assert_raise BSON::InvalidStringEncoding do
163
+ BSON::BSON_CODER.serialize({'aé'.encode('iso-8859-1') => 'hello'})
164
+ end
141
165
  end
142
- end
143
166
 
144
- def test_forced_encoding_with_valid_utf8
145
- doc = {'doc' => "\xC3\xB6".force_encoding("ISO-8859-1")}
146
- serialized = @encoder.serialize(doc)
147
- deserialized = @encoder.deserialize(serialized)
148
- assert_equal(doc['doc'], deserialized['doc'].force_encoding("ISO-8859-1"))
149
- end
167
+ def test_forced_encoding_with_valid_utf8
168
+ doc = {'doc' => "\xC3\xB6".force_encoding("ISO-8859-1")}
169
+ serialized = @encoder.serialize(doc)
170
+ deserialized = @encoder.deserialize(serialized)
171
+ assert_equal(doc['doc'], deserialized['doc'].force_encoding("ISO-8859-1"))
172
+ end
150
173
 
151
- # Based on a test from sqlite3-ruby
152
- def test_default_internal_is_honored
153
- before_enc = Encoding.default_internal
174
+ # Based on a test from sqlite3-ruby
175
+ def test_default_internal_is_honored
176
+ before_enc = Encoding.default_internal
154
177
 
155
- str = "壁に耳あり、障子に目あり"
156
- bson = BSON::BSON_CODER.serialize("x" => str)
178
+ str = "壁に耳あり、障子に目あり"
179
+ bson = BSON::BSON_CODER.serialize("x" => str)
157
180
 
158
- silently { Encoding.default_internal = 'EUC-JP' }
159
- out = BSON::BSON_CODER.deserialize(bson)["x"]
181
+ silently { Encoding.default_internal = 'EUC-JP' }
182
+ out = BSON::BSON_CODER.deserialize(bson)["x"]
160
183
 
161
- assert_equal Encoding.default_internal, out.encoding
162
- assert_equal str.encode('EUC-JP'), out
163
- assert_equal str, out.encode(str.encoding)
164
- ensure
165
- silently { Encoding.default_internal = before_enc }
184
+ assert_equal Encoding.default_internal, out.encoding
185
+ assert_equal str.encode('EUC-JP'), out
186
+ assert_equal str, out.encode(str.encoding)
187
+ ensure
188
+ silently { Encoding.default_internal = before_enc }
189
+ end
166
190
  end
167
191
  end
168
192
 
@@ -287,7 +311,7 @@ class BSONTest < Test::Unit::TestCase
287
311
  end
288
312
 
289
313
  def test_date_before_epoch
290
- if RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/ then return true end
314
+ if RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/ then return true end
291
315
  begin
292
316
  doc = {'date' => Time.utc(1600)}
293
317
  bson = @encoder.serialize(doc)