mongo 1.10.2 → 1.11.1
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/README.md +43 -9
- data/VERSION +1 -1
- data/lib/mongo.rb +1 -0
- data/lib/mongo/collection.rb +36 -21
- data/lib/mongo/connection/pool.rb +14 -22
- data/lib/mongo/cursor.rb +13 -0
- data/lib/mongo/db.rb +18 -13
- data/lib/mongo/functional.rb +0 -2
- data/lib/mongo/functional/authentication.rb +35 -25
- data/lib/mongo/legacy.rb +4 -4
- data/mongo.gemspec +0 -5
- data/test/functional/authentication_test.rb +3 -2
- data/test/functional/bulk_write_collection_view_test.rb +9 -14
- data/test/functional/client_test.rb +42 -43
- data/test/functional/collection_test.rb +1073 -995
- data/test/functional/collection_writer_test.rb +1 -1
- data/test/functional/cursor_fail_test.rb +3 -9
- data/test/functional/cursor_message_test.rb +14 -15
- data/test/functional/cursor_test.rb +224 -166
- data/test/functional/db_api_test.rb +262 -261
- data/test/functional/db_connection_test.rb +1 -3
- data/test/functional/db_test.rb +116 -115
- data/test/functional/grid_file_system_test.rb +108 -108
- data/test/functional/pool_test.rb +73 -0
- data/test/functional/timeout_test.rb +2 -0
- data/test/helpers/test_unit.rb +146 -11
- data/test/replica_set/authentication_test.rb +4 -2
- data/test/replica_set/basic_test.rb +5 -13
- data/test/replica_set/client_test.rb +8 -6
- data/test/replica_set/complex_connect_test.rb +3 -0
- data/test/replica_set/count_test.rb +2 -0
- data/test/replica_set/cursor_test.rb +5 -0
- data/test/replica_set/insert_test.rb +1 -1
- data/test/replica_set/max_values_test.rb +1 -1
- data/test/replica_set/pinning_test.rb +1 -1
- data/test/replica_set/query_test.rb +1 -1
- data/test/replica_set/read_preference_test.rb +7 -1
- data/test/replica_set/refresh_test.rb +11 -8
- data/test/replica_set/replication_ack_test.rb +2 -1
- data/test/sharded_cluster/basic_test.rb +17 -11
- data/test/shared/authentication/basic_auth_shared.rb +59 -98
- data/test/shared/authentication/bulk_api_auth_shared.rb +11 -21
- data/test/shared/authentication/gssapi_shared.rb +28 -21
- data/test/test_helper.rb +5 -0
- data/test/tools/mongo_config.rb +96 -11
- metadata +4 -5
- metadata.gz.sig +0 -0
- data/lib/mongo/functional/sasl_java.rb +0 -48
@@ -17,9 +17,7 @@ require 'test_helper'
|
|
17
17
|
class DBConnectionTest < Test::Unit::TestCase
|
18
18
|
|
19
19
|
def test_no_exceptions
|
20
|
-
|
21
|
-
port = ENV['MONGO_RUBY_DRIVER_PORT'] || MongoClient::DEFAULT_PORT
|
22
|
-
db = MongoClient.new(host, port).db(TEST_DB)
|
20
|
+
db = standard_connection.db(TEST_DB)
|
23
21
|
coll = db.collection('test')
|
24
22
|
coll.remove
|
25
23
|
db.get_last_error
|
data/test/functional/db_test.rb
CHANGED
@@ -28,35 +28,37 @@ class DBTest < Test::Unit::TestCase
|
|
28
28
|
|
29
29
|
include Mongo
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
|
31
|
+
def setup
|
32
|
+
@client = standard_connection
|
33
|
+
@db = @client.db(TEST_DB)
|
34
|
+
@version = @client.server_version
|
35
|
+
end
|
34
36
|
|
35
37
|
def test_close
|
36
|
-
|
37
|
-
assert
|
38
|
+
@client.close
|
39
|
+
assert !@client.connected?
|
38
40
|
begin
|
39
|
-
|
41
|
+
@db.collection('test').insert('a' => 1)
|
40
42
|
fail "expected 'NilClass' exception"
|
41
43
|
rescue => ex
|
42
44
|
assert_match(/NilClass/, ex.to_s)
|
43
45
|
ensure
|
44
|
-
|
46
|
+
@db = standard_connection.db(TEST_DB)
|
45
47
|
end
|
46
48
|
end
|
47
49
|
|
48
50
|
def test_create_collection
|
49
|
-
col =
|
50
|
-
assert_equal
|
51
|
+
col = @db.create_collection('foo')
|
52
|
+
assert_equal @db['foo'].name, col.name
|
51
53
|
|
52
|
-
col =
|
53
|
-
assert_equal
|
54
|
+
col = @db.create_collection(:foo)
|
55
|
+
assert_equal @db['foo'].name, col.name
|
54
56
|
|
55
|
-
|
57
|
+
@db.drop_collection('foo')
|
56
58
|
end
|
57
59
|
|
58
60
|
def test_get_and_drop_collection
|
59
|
-
db =
|
61
|
+
db = @client.db(TEST_DB, :strict => true)
|
60
62
|
db.create_collection('foo')
|
61
63
|
assert db.collection('foo')
|
62
64
|
assert db.drop_collection('foo')
|
@@ -78,15 +80,15 @@ class DBTest < Test::Unit::TestCase
|
|
78
80
|
end
|
79
81
|
|
80
82
|
def test_full_coll_name
|
81
|
-
coll =
|
82
|
-
assert_equal "#{TEST_DB}.test",
|
83
|
+
coll = @db.collection('test')
|
84
|
+
assert_equal "#{TEST_DB}.test", @db.full_collection_name(coll.name)
|
83
85
|
end
|
84
86
|
|
85
87
|
def test_collection_names
|
86
|
-
|
87
|
-
|
88
|
+
@db.collection("test").insert("foo" => 5)
|
89
|
+
@db.collection("test.mike").insert("bar" => 0)
|
88
90
|
|
89
|
-
colls =
|
91
|
+
colls = @db.collection_names()
|
90
92
|
assert colls.include?("test")
|
91
93
|
assert colls.include?("test.mike")
|
92
94
|
colls.each { |name|
|
@@ -95,10 +97,10 @@ class DBTest < Test::Unit::TestCase
|
|
95
97
|
end
|
96
98
|
|
97
99
|
def test_collections
|
98
|
-
|
99
|
-
|
100
|
+
@db.collection("test.durran").insert("foo" => 5)
|
101
|
+
@db.collection("test.les").insert("bar" => 0)
|
100
102
|
|
101
|
-
colls =
|
103
|
+
colls = @db.collections()
|
102
104
|
assert_not_nil colls.select { |coll| coll.name == "test.durran" }
|
103
105
|
assert_not_nil colls.select { |coll| coll.name == "test.les" }
|
104
106
|
assert_equal [], colls.select { |coll| coll.name == "does_not_exist" }
|
@@ -145,91 +147,92 @@ class DBTest < Test::Unit::TestCase
|
|
145
147
|
|
146
148
|
def test_command
|
147
149
|
assert_raise OperationFailure do
|
148
|
-
|
150
|
+
@db.command({:non_command => 1}, :check_response => true)
|
149
151
|
end
|
150
152
|
|
151
|
-
result =
|
153
|
+
result = @db.command({:non_command => 1}, :check_response => false)
|
152
154
|
assert !Mongo::Support.ok?(result)
|
153
155
|
end
|
154
156
|
|
155
157
|
def test_error
|
156
|
-
|
157
|
-
assert_nil
|
158
|
-
assert
|
159
|
-
assert_nil
|
160
|
-
|
161
|
-
|
162
|
-
assert
|
163
|
-
assert_not_nil
|
164
|
-
assert_not_nil
|
165
|
-
|
166
|
-
|
167
|
-
assert
|
168
|
-
assert
|
169
|
-
prev_error =
|
158
|
+
@db.reset_error_history
|
159
|
+
assert_nil @db.get_last_error['err']
|
160
|
+
assert !@db.error?
|
161
|
+
assert_nil @db.previous_error
|
162
|
+
|
163
|
+
@db.command({:forceerror => 1}, :check_response => false)
|
164
|
+
assert @db.error?
|
165
|
+
assert_not_nil @db.get_last_error['err']
|
166
|
+
assert_not_nil @db.previous_error
|
167
|
+
|
168
|
+
@db.command({:forceerror => 1}, :check_response => false)
|
169
|
+
assert @db.error?
|
170
|
+
assert @db.get_last_error['err']
|
171
|
+
prev_error = @db.previous_error
|
170
172
|
assert_equal 1, prev_error['nPrev']
|
171
|
-
assert_equal prev_error["err"],
|
172
|
-
|
173
|
-
|
174
|
-
assert_nil
|
175
|
-
assert
|
176
|
-
assert
|
177
|
-
assert_equal 2,
|
178
|
-
|
179
|
-
|
180
|
-
assert_nil
|
181
|
-
assert
|
182
|
-
assert_nil
|
173
|
+
assert_equal prev_error["err"], @db.get_last_error['err']
|
174
|
+
|
175
|
+
@db.collection('test').find_one
|
176
|
+
assert_nil @db.get_last_error['err']
|
177
|
+
assert !@db.error?
|
178
|
+
assert @db.previous_error
|
179
|
+
assert_equal 2, @db.previous_error['nPrev']
|
180
|
+
|
181
|
+
@db.reset_error_history
|
182
|
+
assert_nil @db.get_last_error['err']
|
183
|
+
assert !@db.error?
|
184
|
+
assert_nil @db.previous_error
|
183
185
|
end
|
184
186
|
|
185
187
|
def test_check_command_response
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
188
|
+
if @version >= "2.1.0"
|
189
|
+
command = {:create => "$$$$"}
|
190
|
+
expected_codes = [10356, 2]
|
191
|
+
expected_msg = "invalid"
|
192
|
+
raised = false
|
193
|
+
begin
|
194
|
+
@db.command(command)
|
195
|
+
rescue => ex
|
196
|
+
raised = true
|
197
|
+
assert ex.message.include?(expected_msg) ||
|
198
|
+
(ex.result.has_key?("assertion") &&
|
199
|
+
ex.result["assertion"].include?(expected_msg)),
|
200
|
+
"error message does not contain '#{expected_msg}'"
|
201
|
+
assert expected_codes.include?(ex.error_code)
|
202
|
+
assert expected_codes.include?(ex.result['code'])
|
203
|
+
ensure
|
204
|
+
assert raised, "No assertion raised!"
|
200
205
|
end
|
201
|
-
ensure
|
202
|
-
assert raised, "No assertion raised!"
|
203
206
|
end
|
204
207
|
end
|
205
208
|
|
206
209
|
def test_arbitrary_command_opts
|
207
|
-
with_forced_timeout(
|
210
|
+
with_forced_timeout(@client) do
|
208
211
|
assert_raise ExecutionTimeout do
|
209
212
|
cmd = OrderedHash.new
|
210
213
|
cmd[:ping] = 1
|
211
214
|
cmd[:maxTimeMS] = 100
|
212
|
-
|
215
|
+
@db.command(cmd)
|
213
216
|
end
|
214
217
|
end
|
215
218
|
end
|
216
219
|
|
217
220
|
def test_command_with_bson
|
218
|
-
normal_response =
|
221
|
+
normal_response = @db.command({:buildInfo => 1})
|
219
222
|
bson = BSON::BSON_CODER.serialize({:buildInfo => 1}, false, false)
|
220
|
-
bson_response =
|
223
|
+
bson_response = @db.command({:bson => bson})
|
221
224
|
assert_equal normal_response, bson_response
|
222
225
|
end
|
223
226
|
|
224
227
|
def test_last_status
|
225
|
-
|
226
|
-
|
228
|
+
@db['test'].remove
|
229
|
+
@db['test'].save("i" => 1)
|
227
230
|
|
228
|
-
|
229
|
-
assert
|
231
|
+
@db['test'].update({"i" => 1}, {"$set" => {"i" => 2}})
|
232
|
+
assert @db.get_last_error()["updatedExisting"]
|
230
233
|
|
231
|
-
|
232
|
-
assert
|
234
|
+
@db['test'].update({"i" => 1}, {"$set" => {"i" => 500}})
|
235
|
+
assert !@db.get_last_error()["updatedExisting"]
|
233
236
|
end
|
234
237
|
|
235
238
|
def test_text_port_number_raises_no_errors
|
@@ -239,62 +242,60 @@ class DBTest < Test::Unit::TestCase
|
|
239
242
|
end
|
240
243
|
|
241
244
|
def test_stored_function_management
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
+
grant_admin_user_eval_role(@client)
|
246
|
+
@db.add_stored_function("sum", "function (x, y) { return x + y; }")
|
247
|
+
assert_equal @db.eval("return sum(2,3);"), 5
|
248
|
+
assert @db.remove_stored_function("sum")
|
245
249
|
assert_raise OperationFailure do
|
246
|
-
|
250
|
+
@db.eval("return sum(2,3);")
|
247
251
|
end
|
248
252
|
end
|
249
253
|
|
250
254
|
def test_eval
|
251
|
-
|
252
|
-
|
255
|
+
grant_admin_user_eval_role(@client)
|
256
|
+
@db.eval("db.system.save({_id:'hello', value: function() { print('hello'); } })")
|
257
|
+
assert_equal 'hello', @db['system'].find_one['_id']
|
253
258
|
end
|
254
259
|
|
255
|
-
def
|
260
|
+
def test_eval_nook
|
261
|
+
grant_admin_user_eval_role(@client)
|
256
262
|
function = "db.system.save({_id:'hello', value: function(string) { print(string); } })"
|
257
|
-
|
258
|
-
|
263
|
+
@db.expects(:command).with do |selector, opts|
|
264
|
+
selector[:nolock] == true
|
259
265
|
end.returns({ 'ok' => 1, 'retval' => 1 })
|
260
|
-
|
266
|
+
@db.eval(function, 'hello', :nolock => true)
|
261
267
|
end
|
262
268
|
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
info = db.command(:usersInfo => 'admin')['users'].first
|
271
|
-
assert_equal 'root', info['roles'].first['role']
|
272
|
-
|
273
|
-
# read-only admin user
|
274
|
-
silently { db.add_user('ro-admin', 'pass', true) }
|
275
|
-
db.logout
|
276
|
-
db.authenticate('ro-admin', 'pass')
|
277
|
-
info = db.command(:usersInfo => 'ro-admin')['users'].first
|
278
|
-
assert_equal 'readAnyDatabase', info['roles'].first['role']
|
279
|
-
db.logout
|
280
|
-
|
281
|
-
db.authenticate('admin', 'pass')
|
282
|
-
db.command(:dropAllUsersFromDatabase => 1)
|
283
|
-
db.logout
|
269
|
+
def test_default_admin_roles
|
270
|
+
return unless @version >= '2.5.3'
|
271
|
+
# admin user
|
272
|
+
@db.stubs(:command).returns({}, true)
|
273
|
+
@db.expects(:command).with do |command, cmd_opts|
|
274
|
+
command[:createUser] == TEST_USER
|
275
|
+
cmd_opts[:roles] == ['root'] if cmd_opts
|
284
276
|
end
|
285
|
-
end
|
286
277
|
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
278
|
+
silently { @db.add_user(TEST_USER, TEST_USER_PWD) }
|
279
|
+
|
280
|
+
@db.stubs(:command).returns({}, true)
|
281
|
+
@db.expects(:command).with do |command, cmd_opts|
|
282
|
+
command[:createUser] == TEST_USER
|
283
|
+
cmd_opts[:roles] == ['readAnyDatabase'] if cmd_opts
|
292
284
|
end
|
285
|
+
|
286
|
+
silently { @db.add_user(TEST_USER, TEST_USER_PWD, true) }
|
287
|
+
end
|
288
|
+
|
289
|
+
def test_db_stats
|
290
|
+
return unless @version >= "1.3.5"
|
291
|
+
stats = @db.stats
|
292
|
+
assert stats.has_key?('collections')
|
293
|
+
assert stats.has_key?('dataSize')
|
293
294
|
end
|
294
295
|
|
295
296
|
context "database profiling" do
|
296
297
|
setup do
|
297
|
-
@db =
|
298
|
+
@db = @client[TEST_DB]
|
298
299
|
@coll = @db['test']
|
299
300
|
@coll.remove
|
300
301
|
@r1 = @coll.insert('a' => 1) # collection not created until it's used
|
@@ -319,7 +320,7 @@ class DBTest < Test::Unit::TestCase
|
|
319
320
|
end
|
320
321
|
|
321
322
|
should "return profiling info" do
|
322
|
-
if
|
323
|
+
if @version >= "2.2"
|
323
324
|
@db.profiling_level = :all
|
324
325
|
@coll.find()
|
325
326
|
@db.profiling_level = :off
|
@@ -335,7 +336,7 @@ class DBTest < Test::Unit::TestCase
|
|
335
336
|
|
336
337
|
should "validate collection" do
|
337
338
|
doc = @db.validate_collection(@coll.name)
|
338
|
-
if
|
339
|
+
if @version >= "1.9.1"
|
339
340
|
assert doc['valid']
|
340
341
|
else
|
341
342
|
assert doc['result']
|
@@ -97,114 +97,114 @@ class GridFileSystemTest < Test::Unit::TestCase
|
|
97
97
|
end
|
98
98
|
|
99
99
|
context "When writing:" do
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
100
|
+
setup do
|
101
|
+
@data = "BYTES" * 50
|
102
|
+
@grid = GridFileSystem.new(@db)
|
103
|
+
@grid.open('sample', 'w') do |f|
|
104
|
+
f.write @data
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
should "read sample data" do
|
109
|
+
data = @grid.open('sample', 'r') { |f| f.read }
|
110
|
+
assert_equal data.length, @data.length
|
111
|
+
end
|
112
|
+
|
113
|
+
should "return the total number of bytes written" do
|
114
|
+
data = 'a' * 300000
|
115
|
+
assert_equal 300000, @grid.open('sample', 'w') {|f| f.write(data) }
|
116
|
+
end
|
117
|
+
|
118
|
+
should "more read sample data" do
|
119
|
+
data = @grid.open('sample', 'r') { |f| f.read }
|
120
|
+
assert_equal data.length, @data.length
|
121
|
+
end
|
122
|
+
|
123
|
+
should "raise exception if file not found" do
|
124
|
+
assert_raise GridFileNotFound do
|
125
|
+
@grid.open('io', 'r') { |f| f.write('hello') }
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
should "raise exception if not opened for write" do
|
130
|
+
assert_raise GridError do
|
131
|
+
@grid.open('sample', 'r') { |f| f.write('hello') }
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
context "and when overwriting the file" do
|
136
|
+
setup do
|
137
|
+
@old = @grid.open('sample', 'r')
|
138
|
+
|
139
|
+
@new_data = "DATA" * 10
|
140
|
+
@grid.open('sample', 'w') do |f|
|
141
|
+
f.write @new_data
|
142
|
+
end
|
143
|
+
|
144
|
+
@new = @grid.open('sample', 'r')
|
145
|
+
end
|
146
|
+
|
147
|
+
should "have a newer upload date" do
|
148
|
+
assert @new.upload_date > @old.upload_date, "New data is not greater than old date."
|
149
|
+
end
|
150
|
+
|
151
|
+
should "have a different files_id" do
|
152
|
+
assert_not_equal @new.files_id, @old.files_id
|
153
|
+
end
|
154
|
+
|
155
|
+
should "contain the new data" do
|
156
|
+
assert_equal @new_data, @new.read, "Expected DATA"
|
157
|
+
end
|
158
|
+
|
159
|
+
context "and on a second overwrite" do
|
160
|
+
setup do
|
161
|
+
@new_data = "NEW" * 1000
|
162
|
+
@grid.open('sample', 'w') do |f|
|
163
|
+
f.write @new_data
|
164
|
+
end
|
165
|
+
|
166
|
+
@ids = @db['fs.files'].find({'filename' => 'sample'}).map {|file| file['_id']}
|
167
|
+
end
|
168
|
+
|
169
|
+
should "write a third version of the file" do
|
170
|
+
assert_equal 3, @db['fs.files'].find({'filename' => 'sample'}).count
|
171
|
+
assert_equal 3, @db['fs.chunks'].find({'files_id' => {'$in' => @ids}}).count
|
172
|
+
end
|
173
|
+
|
174
|
+
should "remove all versions and their data on delete" do
|
175
|
+
@grid.delete('sample')
|
176
|
+
assert_equal 0, @db['fs.files'].find({'filename' => 'sample'}).count
|
177
|
+
assert_equal 0, @db['fs.chunks'].find({'files_id' => {'$in' => @ids}}).count
|
178
|
+
end
|
179
|
+
|
180
|
+
should "delete all versions which exceed the number of versions to keep specified by the option :versions" do
|
181
|
+
@versions = 1 + rand(4-1)
|
182
|
+
@grid.open('sample', 'w', :versions => @versions) do |f|
|
183
|
+
f.write @new_data
|
184
|
+
end
|
185
|
+
@new_ids = @db['fs.files'].find({'filename' => 'sample'}).map {|file| file['_id']}
|
186
|
+
assert_equal @versions, @new_ids.length
|
187
|
+
id = @new_ids.first
|
188
|
+
assert !@ids.include?(id)
|
189
|
+
assert_equal @versions, @db['fs.files'].find({'filename' => 'sample'}).count
|
190
|
+
end
|
191
|
+
|
192
|
+
should "delete old versions on write with :delete_old is passed in" do
|
193
|
+
@grid.open('sample', 'w', :delete_old => true) do |f|
|
194
|
+
f.write @new_data
|
195
|
+
end
|
196
|
+
@new_ids = @db['fs.files'].find({'filename' => 'sample'}).map {|file| file['_id']}
|
197
|
+
assert_equal 1, @new_ids.length
|
198
|
+
id = @new_ids.first
|
199
|
+
assert !@ids.include?(id)
|
200
|
+
assert_equal 1, @db['fs.files'].find({'filename' => 'sample'}).count
|
201
|
+
assert_equal 1, @db['fs.chunks'].find({'files_id' => id}).count
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
context "When writing chunks:" do
|
208
208
|
setup do
|
209
209
|
data = "B" * 50000
|
210
210
|
@grid = GridFileSystem.new(@db)
|