mongo 1.3.0 → 1.12.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data/{LICENSE.txt → LICENSE} +1 -1
  4. data/README.md +122 -271
  5. data/Rakefile +25 -209
  6. data/VERSION +1 -0
  7. data/bin/mongo_console +31 -9
  8. data/lib/mongo/bulk_write_collection_view.rb +387 -0
  9. data/lib/mongo/collection.rb +576 -269
  10. data/lib/mongo/collection_writer.rb +364 -0
  11. data/lib/mongo/connection/node.rb +249 -0
  12. data/lib/mongo/connection/pool.rb +340 -0
  13. data/lib/mongo/connection/pool_manager.rb +320 -0
  14. data/lib/mongo/connection/sharding_pool_manager.rb +67 -0
  15. data/lib/mongo/connection/socket/socket_util.rb +37 -0
  16. data/lib/mongo/connection/socket/ssl_socket.rb +95 -0
  17. data/lib/mongo/connection/socket/tcp_socket.rb +87 -0
  18. data/lib/mongo/connection/socket/unix_socket.rb +39 -0
  19. data/lib/mongo/connection/socket.rb +18 -0
  20. data/lib/mongo/connection.rb +7 -875
  21. data/lib/mongo/cursor.rb +403 -117
  22. data/lib/mongo/db.rb +444 -243
  23. data/lib/mongo/exception.rb +145 -0
  24. data/lib/mongo/functional/authentication.rb +455 -0
  25. data/lib/mongo/functional/logging.rb +85 -0
  26. data/lib/mongo/functional/read_preference.rb +183 -0
  27. data/lib/mongo/functional/scram.rb +556 -0
  28. data/lib/mongo/functional/uri_parser.rb +409 -0
  29. data/lib/mongo/functional/write_concern.rb +66 -0
  30. data/lib/mongo/functional.rb +20 -0
  31. data/lib/mongo/gridfs/grid.rb +30 -24
  32. data/lib/mongo/gridfs/grid_ext.rb +6 -10
  33. data/lib/mongo/gridfs/grid_file_system.rb +38 -20
  34. data/lib/mongo/gridfs/grid_io.rb +84 -75
  35. data/lib/mongo/gridfs.rb +18 -0
  36. data/lib/mongo/legacy.rb +140 -0
  37. data/lib/mongo/mongo_client.rb +697 -0
  38. data/lib/mongo/mongo_replica_set_client.rb +535 -0
  39. data/lib/mongo/mongo_sharded_client.rb +159 -0
  40. data/lib/mongo/networking.rb +372 -0
  41. data/lib/mongo/{util → utils}/conversions.rb +29 -8
  42. data/lib/mongo/{util → utils}/core_ext.rb +28 -18
  43. data/lib/mongo/{util → utils}/server_version.rb +4 -6
  44. data/lib/mongo/{util → utils}/support.rb +29 -31
  45. data/lib/mongo/utils/thread_local_variable_manager.rb +25 -0
  46. data/lib/mongo/utils.rb +19 -0
  47. data/lib/mongo.rb +51 -50
  48. data/mongo.gemspec +29 -32
  49. data/test/functional/authentication_test.rb +39 -0
  50. data/test/functional/bulk_api_stress_test.rb +133 -0
  51. data/test/functional/bulk_write_collection_view_test.rb +1198 -0
  52. data/test/functional/client_test.rb +627 -0
  53. data/test/functional/collection_test.rb +2175 -0
  54. data/test/functional/collection_writer_test.rb +83 -0
  55. data/test/{conversions_test.rb → functional/conversions_test.rb} +47 -3
  56. data/test/functional/cursor_fail_test.rb +57 -0
  57. data/test/functional/cursor_message_test.rb +56 -0
  58. data/test/functional/cursor_test.rb +683 -0
  59. data/test/functional/db_api_test.rb +835 -0
  60. data/test/functional/db_connection_test.rb +25 -0
  61. data/test/functional/db_test.rb +348 -0
  62. data/test/functional/grid_file_system_test.rb +285 -0
  63. data/test/{grid_io_test.rb → functional/grid_io_test.rb} +72 -11
  64. data/test/{grid_test.rb → functional/grid_test.rb} +88 -15
  65. data/test/functional/pool_test.rb +136 -0
  66. data/test/functional/safe_test.rb +98 -0
  67. data/test/functional/ssl_test.rb +29 -0
  68. data/test/functional/support_test.rb +62 -0
  69. data/test/functional/timeout_test.rb +60 -0
  70. data/test/functional/uri_test.rb +446 -0
  71. data/test/functional/write_concern_test.rb +118 -0
  72. data/test/helpers/general.rb +50 -0
  73. data/test/helpers/test_unit.rb +476 -0
  74. data/test/replica_set/authentication_test.rb +37 -0
  75. data/test/replica_set/basic_test.rb +189 -0
  76. data/test/replica_set/client_test.rb +393 -0
  77. data/test/replica_set/connection_test.rb +138 -0
  78. data/test/replica_set/count_test.rb +66 -0
  79. data/test/replica_set/cursor_test.rb +220 -0
  80. data/test/replica_set/insert_test.rb +157 -0
  81. data/test/replica_set/max_values_test.rb +151 -0
  82. data/test/replica_set/pinning_test.rb +105 -0
  83. data/test/replica_set/query_test.rb +73 -0
  84. data/test/replica_set/read_preference_test.rb +219 -0
  85. data/test/replica_set/refresh_test.rb +211 -0
  86. data/test/replica_set/replication_ack_test.rb +95 -0
  87. data/test/replica_set/ssl_test.rb +32 -0
  88. data/test/sharded_cluster/basic_test.rb +203 -0
  89. data/test/shared/authentication/basic_auth_shared.rb +260 -0
  90. data/test/shared/authentication/bulk_api_auth_shared.rb +249 -0
  91. data/test/shared/authentication/gssapi_shared.rb +176 -0
  92. data/test/shared/authentication/sasl_plain_shared.rb +96 -0
  93. data/test/shared/authentication/scram_shared.rb +92 -0
  94. data/test/shared/ssl_shared.rb +235 -0
  95. data/test/test_helper.rb +53 -94
  96. data/test/threading/basic_test.rb +120 -0
  97. data/test/tools/mongo_config.rb +708 -0
  98. data/test/tools/mongo_config_test.rb +160 -0
  99. data/test/unit/client_test.rb +381 -0
  100. data/test/unit/collection_test.rb +89 -53
  101. data/test/unit/connection_test.rb +282 -32
  102. data/test/unit/cursor_test.rb +206 -8
  103. data/test/unit/db_test.rb +55 -13
  104. data/test/unit/grid_test.rb +43 -16
  105. data/test/unit/mongo_sharded_client_test.rb +48 -0
  106. data/test/unit/node_test.rb +93 -0
  107. data/test/unit/pool_manager_test.rb +111 -0
  108. data/test/unit/read_pref_test.rb +406 -0
  109. data/test/unit/read_test.rb +159 -0
  110. data/test/unit/safe_test.rb +69 -36
  111. data/test/unit/sharding_pool_manager_test.rb +84 -0
  112. data/test/unit/write_concern_test.rb +175 -0
  113. data.tar.gz.sig +3 -0
  114. metadata +227 -216
  115. metadata.gz.sig +0 -0
  116. data/docs/CREDITS.md +0 -123
  117. data/docs/FAQ.md +0 -116
  118. data/docs/GridFS.md +0 -158
  119. data/docs/HISTORY.md +0 -244
  120. data/docs/RELEASES.md +0 -33
  121. data/docs/REPLICA_SETS.md +0 -72
  122. data/docs/TUTORIAL.md +0 -247
  123. data/docs/WRITE_CONCERN.md +0 -28
  124. data/lib/mongo/exceptions.rb +0 -71
  125. data/lib/mongo/gridfs/grid_io_fix.rb +0 -38
  126. data/lib/mongo/repl_set_connection.rb +0 -342
  127. data/lib/mongo/test.rb +0 -20
  128. data/lib/mongo/util/pool.rb +0 -177
  129. data/lib/mongo/util/uri_parser.rb +0 -185
  130. data/test/async/collection_test.rb +0 -224
  131. data/test/async/connection_test.rb +0 -24
  132. data/test/async/cursor_test.rb +0 -162
  133. data/test/async/worker_pool_test.rb +0 -99
  134. data/test/auxillary/1.4_features.rb +0 -166
  135. data/test/auxillary/authentication_test.rb +0 -68
  136. data/test/auxillary/autoreconnect_test.rb +0 -41
  137. data/test/auxillary/fork_test.rb +0 -30
  138. data/test/auxillary/repl_set_auth_test.rb +0 -58
  139. data/test/auxillary/slave_connection_test.rb +0 -36
  140. data/test/auxillary/threaded_authentication_test.rb +0 -101
  141. data/test/bson/binary_test.rb +0 -15
  142. data/test/bson/bson_test.rb +0 -649
  143. data/test/bson/byte_buffer_test.rb +0 -208
  144. data/test/bson/hash_with_indifferent_access_test.rb +0 -38
  145. data/test/bson/json_test.rb +0 -17
  146. data/test/bson/object_id_test.rb +0 -154
  147. data/test/bson/ordered_hash_test.rb +0 -204
  148. data/test/bson/timestamp_test.rb +0 -24
  149. data/test/collection_test.rb +0 -910
  150. data/test/connection_test.rb +0 -309
  151. data/test/cursor_fail_test.rb +0 -75
  152. data/test/cursor_message_test.rb +0 -43
  153. data/test/cursor_test.rb +0 -483
  154. data/test/db_api_test.rb +0 -726
  155. data/test/db_connection_test.rb +0 -15
  156. data/test/db_test.rb +0 -287
  157. data/test/grid_file_system_test.rb +0 -243
  158. data/test/load/resque/load.rb +0 -21
  159. data/test/load/resque/processor.rb +0 -26
  160. data/test/load/thin/load.rb +0 -24
  161. data/test/load/unicorn/load.rb +0 -23
  162. data/test/load/unicorn/unicorn.rb +0 -29
  163. data/test/replica_sets/connect_test.rb +0 -94
  164. data/test/replica_sets/connection_string_test.rb +0 -32
  165. data/test/replica_sets/count_test.rb +0 -35
  166. data/test/replica_sets/insert_test.rb +0 -53
  167. data/test/replica_sets/pooled_insert_test.rb +0 -55
  168. data/test/replica_sets/query_secondaries.rb +0 -96
  169. data/test/replica_sets/query_test.rb +0 -51
  170. data/test/replica_sets/replication_ack_test.rb +0 -66
  171. data/test/replica_sets/rs_test_helper.rb +0 -27
  172. data/test/safe_test.rb +0 -68
  173. data/test/support/hash_with_indifferent_access.rb +0 -186
  174. data/test/support/keys.rb +0 -45
  175. data/test/support_test.rb +0 -18
  176. data/test/threading/threading_with_large_pool_test.rb +0 -90
  177. data/test/threading_test.rb +0 -87
  178. data/test/tools/auth_repl_set_manager.rb +0 -14
  179. data/test/tools/load.rb +0 -58
  180. data/test/tools/repl_set_manager.rb +0 -266
  181. data/test/tools/sharding_manager.rb +0 -202
  182. data/test/tools/test.rb +0 -4
  183. data/test/unit/pool_test.rb +0 -9
  184. data/test/unit/repl_set_connection_test.rb +0 -59
  185. data/test/uri_test.rb +0 -91
data/lib/mongo.rb CHANGED
@@ -1,33 +1,38 @@
1
- # encoding: UTF-8
2
- #
3
- # --
4
- # Copyright (C) 2008-2011 10gen Inc.
1
+ # Copyright (C) 2009-2013 MongoDB, Inc.
5
2
  #
6
3
  # Licensed under the Apache License, Version 2.0 (the "License");
7
4
  # you may not use this file except in compliance with the License.
8
5
  # You may obtain a copy of the License at
9
6
  #
10
- # http://www.apache.org/licenses/LICENSE-2.0
7
+ # http://www.apache.org/licenses/LICENSE-2.0
11
8
  #
12
9
  # Unless required by applicable law or agreed to in writing, software
13
10
  # distributed under the License is distributed on an "AS IS" BASIS,
14
11
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
12
  # See the License for the specific language governing permissions and
16
13
  # limitations under the License.
17
- # ++
18
-
19
- $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
20
14
 
21
15
  module Mongo
22
- VERSION = "1.3.0"
23
- end
16
+ ASCENDING = 1
17
+ DESCENDING = -1
18
+ GEO2D = '2d'
19
+ GEO2DSPHERE = '2dsphere'
20
+ GEOHAYSTACK = 'geoHaystack'
21
+ TEXT = 'text'
22
+ HASHED = 'hashed'
24
23
 
25
- module Mongo
26
- ASCENDING = 1
27
- DESCENDING = -1
28
- GEO2D = '2d'
24
+ INDEX_TYPES = {
25
+ 'ASCENDING' => ASCENDING,
26
+ 'DESCENDING' => DESCENDING,
27
+ 'GEO2D' => GEO2D,
28
+ 'GEO2DSPHERE' => GEO2DSPHERE,
29
+ 'GEOHAYSTACK' => GEOHAYSTACK,
30
+ 'TEXT' => TEXT,
31
+ 'HASHED' => HASHED
32
+ }
29
33
 
30
34
  DEFAULT_MAX_BSON_SIZE = 4 * 1024 * 1024
35
+ MESSAGE_SIZE_FACTOR = 2
31
36
 
32
37
  module Constants
33
38
  OP_REPLY = 1
@@ -45,53 +50,49 @@ module Mongo
45
50
  OP_QUERY_NO_CURSOR_TIMEOUT = 2 ** 4
46
51
  OP_QUERY_AWAIT_DATA = 2 ** 5
47
52
  OP_QUERY_EXHAUST = 2 ** 6
53
+ OP_QUERY_PARTIAL = 2 ** 7
48
54
 
49
55
  REPLY_CURSOR_NOT_FOUND = 2 ** 0
50
56
  REPLY_QUERY_FAILURE = 2 ** 1
51
57
  REPLY_SHARD_CONFIG_STALE = 2 ** 2
52
58
  REPLY_AWAIT_CAPABLE = 2 ** 3
53
59
  end
60
+
61
+ module ErrorCode # MongoDB Core Server src/mongo/base/error_codes.err
62
+ BAD_VALUE = 2
63
+ UNKNOWN_ERROR = 8
64
+ INVALID_BSON = 22
65
+ WRITE_CONCERN_FAILED = 64
66
+ MULTIPLE_ERRORS_OCCURRED = 65
67
+ UNAUTHORIZED = 13
68
+
69
+ # mongod/s 2.6 and above return code 59 when a command doesn't exist.
70
+ # mongod versions previous to 2.6 and mongos 2.4.x return no error code
71
+ # when a command does exist.
72
+ # mongos versions previous to 2.4.0 return code 13390 when a command
73
+ # does not exist.
74
+ COMMAND_NOT_FOUND_CODES = [nil, 59, 13390]
75
+ end
54
76
  end
55
77
 
56
78
  require 'bson'
57
79
 
58
- require 'mongo/util/conversions'
59
- require 'mongo/util/support'
60
- require 'mongo/util/core_ext'
61
- require 'mongo/util/pool'
62
- require 'mongo/util/server_version'
63
- require 'mongo/util/uri_parser'
80
+ require 'set'
81
+ require 'thread'
82
+ require 'monitor'
64
83
 
65
- require 'mongo/collection'
84
+ require 'mongo/utils'
85
+ require 'mongo/exception'
86
+ require 'mongo/functional'
66
87
  require 'mongo/connection'
67
- require 'mongo/repl_set_connection'
88
+ require 'mongo/collection_writer'
89
+ require 'mongo/collection'
90
+ require 'mongo/bulk_write_collection_view'
68
91
  require 'mongo/cursor'
69
92
  require 'mongo/db'
70
- require 'mongo/exceptions'
71
- require 'mongo/gridfs/grid_ext'
72
- require 'mongo/gridfs/grid'
73
- require 'mongo/gridfs/grid_io'
74
- if RUBY_PLATFORM =~ /java/
75
- require 'mongo/gridfs/grid_io_fix'
76
- end
77
- require 'mongo/gridfs/grid_file_system'
78
-
79
- # Use SystemTimer on Ruby 1.8
80
- if !defined?(RUBY_ENGINE) || (RUBY_ENGINE == 'ruby' && RUBY_VERSION < '1.9.0')
81
- begin
82
- require 'system_timer'
83
- if SystemTimer.method(:timeout).arity.abs != 2
84
- raise LoadError
85
- end
86
- Mongo::TimeoutHandler = SystemTimer
87
- rescue LoadError
88
- warn "Could not load SystemTimer >= v1.2.0. Falling back to timeout.rb. " +
89
- "SystemTimer is STRONGLY recommended for timeouts in Ruby 1.8.7. " +
90
- "See http://ph7spot.com/blog/system-timer-1-2-release for details."
91
- require 'timeout'
92
- Mongo::TimeoutHandler = Timeout
93
- end
94
- else
95
- require 'timeout'
96
- Mongo::TimeoutHandler = Timeout
97
- end
93
+ require 'mongo/gridfs'
94
+ require 'mongo/networking'
95
+ require 'mongo/mongo_client'
96
+ require 'mongo/mongo_replica_set_client'
97
+ require 'mongo/mongo_sharded_client'
98
+ require 'mongo/legacy'
data/mongo.gemspec CHANGED
@@ -1,34 +1,31 @@
1
- require "./lib/mongo"
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 the 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']
30
- s.email = 'mongodb-dev@googlegroups.com'
31
- s.homepage = 'http://www.mongodb.org'
32
-
33
- s.add_dependency(%q<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 = ['Emily Stolfo', 'Durran Jordan', 'Gary Murakami', 'Tyler Brock', '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
+ s.license = 'Apache License Version 2.0'
13
+
14
+ if File.exists?('gem-private_key.pem')
15
+ s.signing_key = 'gem-private_key.pem'
16
+ s.cert_chain = ['gem-public_cert.pem']
17
+ else
18
+ warn 'Warning: No private key present, creating unsigned gem.'
19
+ end
20
+
21
+ s.files = ['mongo.gemspec', 'LICENSE', 'VERSION']
22
+ s.files += ['README.md', 'Rakefile', 'bin/mongo_console']
23
+ s.files += ['lib/mongo.rb'] + Dir['lib/mongo/**/*.rb']
24
+
25
+ s.test_files = Dir['test/**/*.rb'] - Dir['test/bson/*']
26
+ s.executables = ['mongo_console']
27
+ s.require_paths = ['lib']
28
+ s.has_rdoc = 'yard'
29
+
30
+ s.add_dependency('bson', "#{s.version}")
34
31
  end
@@ -0,0 +1,39 @@
1
+ # Copyright (C) 2009-2013 MongoDB, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'test_helper'
16
+ require 'shared/authentication/basic_auth_shared'
17
+ require 'shared/authentication/sasl_plain_shared'
18
+ require 'shared/authentication/bulk_api_auth_shared'
19
+ require 'shared/authentication/gssapi_shared'
20
+ require 'shared/authentication/scram_shared'
21
+
22
+
23
+ class AuthenticationTest < Test::Unit::TestCase
24
+ include Mongo
25
+ include BasicAuthTests
26
+ include SASLPlainTests
27
+ include BulkAPIAuthTests
28
+ include GSSAPITests
29
+ include SCRAMTests
30
+
31
+ def setup
32
+ @client = standard_connection
33
+ omit("auth not enabled on mongod") unless auth_enabled?(@client)
34
+ @admin = @client['admin']
35
+ @version = @client.server_version
36
+ @db = @client['ruby-test']
37
+ @host_info = host_port
38
+ end
39
+ end
@@ -0,0 +1,133 @@
1
+ # Copyright (C) 2009-2013 MongoDB, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License")
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'test_helper'
16
+
17
+ class BulkApiStressTest < Test::Unit::TestCase
18
+
19
+ # Generate a large string of 'size' MB (estimated
20
+ # by a string of 'size' * 1024 * 1024 characters).
21
+ def generate_large_string(size)
22
+ s = "a" * (size * 1024 * 1024)
23
+ end
24
+
25
+ def setup
26
+ @client = standard_connection
27
+ @db = @client[TEST_DB]
28
+ @coll = @db["bulk-api-stress-tests"]
29
+ @coll.remove
30
+ end
31
+
32
+ def test_ordered_batch_large_inserts
33
+ bulk = @coll.initialize_ordered_bulk_op
34
+ s = generate_large_string(4)
35
+
36
+ for i in 0..5
37
+ bulk.insert({:_id => i, :msg => s})
38
+ end
39
+ bulk.insert({:_id => 3}) # error
40
+ bulk.insert({:_id => 100})
41
+
42
+ ex = assert_raise BulkWriteError do
43
+ bulk.execute
44
+ end
45
+
46
+ error_details = ex.result
47
+ assert_equal 6, error_details["nInserted"]
48
+ assert_equal 1, error_details["writeErrors"].length
49
+ error = error_details["writeErrors"][0]
50
+ assert_equal 11000, error["code"] # duplicate key error
51
+ assert error["errmsg"].kind_of? String
52
+ assert_equal 6, error["index"]
53
+ assert_equal 6, @coll.count()
54
+ end
55
+
56
+ def test_unordered_batch_large_inserts
57
+ bulk = @coll.initialize_unordered_bulk_op
58
+ s = generate_large_string(4)
59
+
60
+ for i in 0..5
61
+ bulk.insert({:_id => i, :msg => s})
62
+ end
63
+ bulk.insert({:_id => 3}) # error
64
+ bulk.insert({:_id => 100})
65
+
66
+ ex = assert_raise BulkWriteError do
67
+ bulk.execute
68
+ end
69
+
70
+ error_details = ex.result
71
+ assert_equal 7, error_details["nInserted"]
72
+ assert_equal 1, error_details["writeErrors"].length
73
+ error = error_details["writeErrors"][0]
74
+ assert_equal 11000, error["code"] # duplicate key error
75
+ assert error["errmsg"].kind_of? String
76
+ assert_equal 6, error["index"]
77
+ assert_equal 7, @coll.count()
78
+ end
79
+
80
+ def test_large_single_insert
81
+ bulk = @coll.initialize_unordered_bulk_op
82
+ s = generate_large_string(17)
83
+ bulk.insert({:a => s})
84
+ # RUBY-730:
85
+ # ex = assert_raise BulkWriteError do
86
+ # bulk.execute
87
+ # end
88
+ end
89
+
90
+ def test_ordered_batch_large_batch
91
+ bulk = @coll.initialize_ordered_bulk_op
92
+
93
+ bulk.insert({:_id => 1600})
94
+ for i in 0..2000
95
+ bulk.insert({:_id => i})
96
+ end
97
+
98
+ ex = assert_raise BulkWriteError do
99
+ bulk.execute
100
+ end
101
+
102
+ error_details = ex.result
103
+ assert_equal 1601, error_details["nInserted"]
104
+ assert_equal 1, error_details["writeErrors"].length
105
+ error = error_details["writeErrors"][0]
106
+ assert_equal 11000, error["code"] # duplicate key error
107
+ assert error["errmsg"].kind_of? String
108
+ assert_equal 1601, error["index"]
109
+ assert_equal 1601, @coll.count()
110
+ end
111
+
112
+ def test_unordered_batch_large_batch
113
+ bulk = @coll.initialize_unordered_bulk_op
114
+
115
+ bulk.insert({:_id => 1600})
116
+ for i in 0..2000
117
+ bulk.insert({:_id => i})
118
+ end
119
+
120
+ ex = assert_raise BulkWriteError do
121
+ bulk.execute
122
+ end
123
+
124
+ error_details = ex.result
125
+ assert_equal 2001, error_details["nInserted"]
126
+ assert_equal 1, error_details["writeErrors"].length
127
+ error = error_details["writeErrors"][0]
128
+ assert_equal 11000, error["code"] # duplicate key error
129
+ assert error["errmsg"].kind_of? String
130
+ assert_equal 1601, error["index"]
131
+ assert_equal 2001, @coll.count()
132
+ end
133
+ end