mongo 1.10.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/LICENSE +190 -0
  5. data/README.md +149 -0
  6. data/Rakefile +31 -0
  7. data/VERSION +1 -0
  8. data/bin/mongo_console +43 -0
  9. data/ext/jsasl/target/jsasl.jar +0 -0
  10. data/lib/mongo.rb +90 -0
  11. data/lib/mongo/bulk_write_collection_view.rb +380 -0
  12. data/lib/mongo/collection.rb +1164 -0
  13. data/lib/mongo/collection_writer.rb +364 -0
  14. data/lib/mongo/connection.rb +19 -0
  15. data/lib/mongo/connection/node.rb +239 -0
  16. data/lib/mongo/connection/pool.rb +347 -0
  17. data/lib/mongo/connection/pool_manager.rb +325 -0
  18. data/lib/mongo/connection/sharding_pool_manager.rb +67 -0
  19. data/lib/mongo/connection/socket.rb +18 -0
  20. data/lib/mongo/connection/socket/socket_util.rb +37 -0
  21. data/lib/mongo/connection/socket/ssl_socket.rb +95 -0
  22. data/lib/mongo/connection/socket/tcp_socket.rb +86 -0
  23. data/lib/mongo/connection/socket/unix_socket.rb +39 -0
  24. data/lib/mongo/cursor.rb +719 -0
  25. data/lib/mongo/db.rb +735 -0
  26. data/lib/mongo/exception.rb +88 -0
  27. data/lib/mongo/functional.rb +21 -0
  28. data/lib/mongo/functional/authentication.rb +318 -0
  29. data/lib/mongo/functional/logging.rb +85 -0
  30. data/lib/mongo/functional/read_preference.rb +174 -0
  31. data/lib/mongo/functional/sasl_java.rb +48 -0
  32. data/lib/mongo/functional/uri_parser.rb +374 -0
  33. data/lib/mongo/functional/write_concern.rb +66 -0
  34. data/lib/mongo/gridfs.rb +18 -0
  35. data/lib/mongo/gridfs/grid.rb +112 -0
  36. data/lib/mongo/gridfs/grid_ext.rb +53 -0
  37. data/lib/mongo/gridfs/grid_file_system.rb +163 -0
  38. data/lib/mongo/gridfs/grid_io.rb +484 -0
  39. data/lib/mongo/legacy.rb +140 -0
  40. data/lib/mongo/mongo_client.rb +702 -0
  41. data/lib/mongo/mongo_replica_set_client.rb +523 -0
  42. data/lib/mongo/mongo_sharded_client.rb +159 -0
  43. data/lib/mongo/networking.rb +370 -0
  44. data/lib/mongo/utils.rb +19 -0
  45. data/lib/mongo/utils/conversions.rb +110 -0
  46. data/lib/mongo/utils/core_ext.rb +70 -0
  47. data/lib/mongo/utils/server_version.rb +69 -0
  48. data/lib/mongo/utils/support.rb +80 -0
  49. data/lib/mongo/utils/thread_local_variable_manager.rb +25 -0
  50. data/mongo.gemspec +36 -0
  51. data/test/functional/authentication_test.rb +35 -0
  52. data/test/functional/bulk_api_stress_test.rb +133 -0
  53. data/test/functional/bulk_write_collection_view_test.rb +1129 -0
  54. data/test/functional/client_test.rb +565 -0
  55. data/test/functional/collection_test.rb +2073 -0
  56. data/test/functional/collection_writer_test.rb +83 -0
  57. data/test/functional/conversions_test.rb +163 -0
  58. data/test/functional/cursor_fail_test.rb +63 -0
  59. data/test/functional/cursor_message_test.rb +57 -0
  60. data/test/functional/cursor_test.rb +625 -0
  61. data/test/functional/db_api_test.rb +819 -0
  62. data/test/functional/db_connection_test.rb +27 -0
  63. data/test/functional/db_test.rb +344 -0
  64. data/test/functional/grid_file_system_test.rb +285 -0
  65. data/test/functional/grid_io_test.rb +252 -0
  66. data/test/functional/grid_test.rb +273 -0
  67. data/test/functional/pool_test.rb +62 -0
  68. data/test/functional/safe_test.rb +98 -0
  69. data/test/functional/ssl_test.rb +29 -0
  70. data/test/functional/support_test.rb +62 -0
  71. data/test/functional/timeout_test.rb +58 -0
  72. data/test/functional/uri_test.rb +330 -0
  73. data/test/functional/write_concern_test.rb +118 -0
  74. data/test/helpers/general.rb +50 -0
  75. data/test/helpers/test_unit.rb +317 -0
  76. data/test/replica_set/authentication_test.rb +35 -0
  77. data/test/replica_set/basic_test.rb +174 -0
  78. data/test/replica_set/client_test.rb +341 -0
  79. data/test/replica_set/complex_connect_test.rb +77 -0
  80. data/test/replica_set/connection_test.rb +138 -0
  81. data/test/replica_set/count_test.rb +64 -0
  82. data/test/replica_set/cursor_test.rb +212 -0
  83. data/test/replica_set/insert_test.rb +140 -0
  84. data/test/replica_set/max_values_test.rb +145 -0
  85. data/test/replica_set/pinning_test.rb +55 -0
  86. data/test/replica_set/query_test.rb +73 -0
  87. data/test/replica_set/read_preference_test.rb +214 -0
  88. data/test/replica_set/refresh_test.rb +175 -0
  89. data/test/replica_set/replication_ack_test.rb +94 -0
  90. data/test/replica_set/ssl_test.rb +32 -0
  91. data/test/sharded_cluster/basic_test.rb +197 -0
  92. data/test/shared/authentication/basic_auth_shared.rb +286 -0
  93. data/test/shared/authentication/bulk_api_auth_shared.rb +259 -0
  94. data/test/shared/authentication/gssapi_shared.rb +164 -0
  95. data/test/shared/authentication/sasl_plain_shared.rb +96 -0
  96. data/test/shared/ssl_shared.rb +235 -0
  97. data/test/test_helper.rb +56 -0
  98. data/test/threading/basic_test.rb +120 -0
  99. data/test/tools/mongo_config.rb +608 -0
  100. data/test/tools/mongo_config_test.rb +160 -0
  101. data/test/unit/client_test.rb +347 -0
  102. data/test/unit/collection_test.rb +166 -0
  103. data/test/unit/connection_test.rb +325 -0
  104. data/test/unit/cursor_test.rb +299 -0
  105. data/test/unit/db_test.rb +136 -0
  106. data/test/unit/grid_test.rb +76 -0
  107. data/test/unit/mongo_sharded_client_test.rb +48 -0
  108. data/test/unit/node_test.rb +93 -0
  109. data/test/unit/pool_manager_test.rb +142 -0
  110. data/test/unit/read_pref_test.rb +115 -0
  111. data/test/unit/read_test.rb +159 -0
  112. data/test/unit/safe_test.rb +158 -0
  113. data/test/unit/sharding_pool_manager_test.rb +84 -0
  114. data/test/unit/write_concern_test.rb +175 -0
  115. metadata +260 -0
  116. metadata.gz.sig +0 -0
@@ -0,0 +1,252 @@
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 GridIOTest < Test::Unit::TestCase
18
+
19
+ context "GridIO" do
20
+ setup do
21
+ @db = standard_connection.db(TEST_DB)
22
+ @files = @db.collection('fs.files')
23
+ @chunks = @db.collection('fs.chunks')
24
+ @chunks.create_index([['files_id', Mongo::ASCENDING], ['n', Mongo::ASCENDING]])
25
+ end
26
+
27
+ teardown do
28
+ @files.remove
29
+ @chunks.remove
30
+ end
31
+
32
+ context "Options" do
33
+ setup do
34
+ @filename = 'test'
35
+ @mode = 'w'
36
+ end
37
+
38
+ should "set default 255k chunk size" do
39
+ file = GridIO.new(@files, @chunks, @filename, @mode)
40
+ assert_equal 255 * 1024, file.chunk_size
41
+ end
42
+
43
+ should "set chunk size" do
44
+ file = GridIO.new(@files, @chunks, @filename, @mode, :chunk_size => 1000)
45
+ assert_equal 1000, file.chunk_size
46
+ end
47
+ end
48
+
49
+ context "StringIO methods" do
50
+ setup do
51
+ @filename = 'test'
52
+ @mode = 'w'
53
+ @data = "012345678\n" * 100000
54
+ @file = GridIO.new(@files, @chunks, @filename, @mode)
55
+ @file.write(@data)
56
+ @file.close
57
+ end
58
+
59
+ should "read data character by character using" do
60
+ bytes = 0
61
+ file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
62
+ while file.getc
63
+ bytes += 1
64
+ end
65
+ assert_equal bytes, 1_000_000
66
+ end
67
+
68
+ should "read length is a length is given" do
69
+ file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
70
+ string = file.gets(1000)
71
+ assert_equal string.length, 1000
72
+ bytes = 0
73
+ bytes += string.length
74
+ while string = file.gets(1000)
75
+ bytes += string.length
76
+ end
77
+ assert_equal bytes, 1_000_000
78
+ end
79
+
80
+ should "read to the end of the line by default and assign to $_" do
81
+ file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
82
+ string = file.gets
83
+ assert_equal 10, string.length
84
+ end
85
+
86
+ should "read to the end of the file one line at a time" do
87
+ file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
88
+ bytes = 0
89
+ while string = file.gets
90
+ bytes += string.length
91
+ end
92
+ assert_equal 1_000_000, bytes
93
+ end
94
+
95
+ should "read to the end of the file one multi-character separator at a time" do
96
+ file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
97
+ bytes = 0
98
+ while string = file.gets("45")
99
+ bytes += string.length
100
+ end
101
+ assert_equal 1_000_000, bytes
102
+ end
103
+
104
+ should "read to a given separator" do
105
+ file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
106
+ string = file.gets("5")
107
+ assert_equal 6, string.length
108
+ end
109
+
110
+ should "read a multi-character separator" do
111
+ file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
112
+ string = file.gets("45")
113
+ assert_equal 6, string.length
114
+ string = file.gets("45")
115
+ assert_equal "678\n012345", string
116
+ string = file.gets("\n01")
117
+ assert_equal "678\n01", string
118
+ end
119
+
120
+ should "read a mult-character separator with a length" do
121
+ file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
122
+ string = file.gets("45", 3)
123
+ assert_equal 3, string.length
124
+ end
125
+
126
+ should "tell position, eof, and rewind" do
127
+ file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
128
+ file.read(1000)
129
+ assert_equal 1000, file.pos
130
+ assert !file.eof?
131
+ file.read
132
+ assert file.eof?
133
+ file.rewind
134
+ assert_equal 0, file.pos
135
+ assert_equal 1_000_000, file.read.length
136
+ end
137
+ end
138
+
139
+ context "Writing" do
140
+ setup do
141
+ @filename = 'test'
142
+ @length = 50000
143
+ @times = 10
144
+ end
145
+
146
+ should "correctly write multiple chunks from mutiple writes" do
147
+ file = GridIO.new(@files, @chunks, @filename, 'w')
148
+
149
+ @times.times do
150
+ file.write("1" * @length)
151
+ end
152
+
153
+ file.close
154
+
155
+ file = GridIO.new(@files, @chunks, @filename, 'r')
156
+
157
+ total_size = 0
158
+ while !file.eof?
159
+ total_size += file.read(@length).length
160
+ end
161
+
162
+ file.close
163
+
164
+ assert_equal total_size, @times * @length
165
+ end
166
+ end
167
+
168
+ context "Seeking" do
169
+ setup do
170
+ @filename = 'test'
171
+ @mode = 'w'
172
+ @data = "1" * 1024 * 1024
173
+ @file = GridIO.new(@files, @chunks, @filename, @mode)
174
+ @file.write(@data)
175
+ @file.close
176
+ end
177
+
178
+ should "read all data using read_length and then be able to seek" do
179
+ file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
180
+ assert_equal @data, file.read(1024 * 1024)
181
+ file.seek(0)
182
+ assert_equal @data, file.read
183
+ end
184
+
185
+ should "read all data using read_all and then be able to seek" do
186
+ file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
187
+ assert_equal @data, file.read
188
+ file.seek(0)
189
+ assert_equal @data, file.read
190
+ file.seek(1024 * 512)
191
+ assert_equal 524288, file.file_position
192
+ assert_equal @data.length / 2, file.read.length
193
+ assert_equal 1048576, file.file_position
194
+ assert_nil file.read
195
+ file.seek(1024 * 512)
196
+ assert_equal 524288, file.file_position
197
+ end
198
+
199
+ end
200
+
201
+ context "Grid MD5 check" do
202
+ should "run in safe mode" do
203
+ file = GridIO.new(@files, @chunks, 'smallfile', 'w')
204
+ file.write("DATA" * 100)
205
+ assert file.close
206
+ assert_equal file.server_md5, file.client_md5
207
+ end
208
+
209
+ should "validate with a large file" do
210
+ io = File.open(File.join(TEST_DATA, 'sample_file.pdf'), 'r')
211
+ file = GridIO.new(@files, @chunks, 'bigfile', 'w')
212
+ file.write(io)
213
+ assert file.close
214
+ assert_equal file.server_md5, file.client_md5
215
+ end
216
+
217
+ should "raise an exception when check fails" do
218
+ io = File.open(File.join(TEST_DATA, 'sample_file.pdf'), 'r')
219
+ @db.stubs(:command).returns({'md5' => '12345'})
220
+ file = GridIO.new(@files, @chunks, 'bigfile', 'w')
221
+ file.write(io)
222
+ assert_raise GridMD5Failure do
223
+ assert file.close
224
+ end
225
+ assert_not_equal file.server_md5, file.client_md5
226
+ end
227
+ end
228
+
229
+ context "Content types" do
230
+ if defined?(MIME)
231
+ should "determine common content types from the extension" do
232
+ file = GridIO.new(@files, @chunks, 'sample.pdf', 'w')
233
+ assert_equal 'application/pdf', file.content_type
234
+
235
+ file = GridIO.new(@files, @chunks, 'sample.txt', 'w')
236
+ assert_equal 'text/plain', file.content_type
237
+ end
238
+ end
239
+
240
+ should "default to binary/octet-stream when type is unknown" do
241
+ file = GridIO.new(@files, @chunks, 'sample.l33t', 'w')
242
+ assert_equal 'binary/octet-stream', file.content_type
243
+ end
244
+
245
+ should "use any provided content type by default" do
246
+ file = GridIO.new(@files, @chunks, 'sample.l33t', 'w', :content_type => 'image/jpg')
247
+ assert_equal 'image/jpg', file.content_type
248
+ end
249
+ end
250
+ end
251
+
252
+ end
@@ -0,0 +1,273 @@
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
+ include Mongo
17
+
18
+ def read_and_write_stream(filename, read_length, opts={})
19
+ io = File.open(File.join(TEST_DATA, filename), 'r+b')
20
+ id = @grid.put(io, opts.merge!(:filename => filename + read_length.to_s))
21
+ file = @grid.get(id)
22
+ io.rewind
23
+ data = io.read
24
+ if data.respond_to?(:force_encoding)
25
+ data.force_encoding("binary")
26
+ end
27
+ read_data = ""
28
+ while(chunk = file.read(read_length))
29
+ read_data << chunk
30
+ break if chunk.empty?
31
+ end
32
+ assert_equal data.length, read_data.length
33
+ end
34
+
35
+ class GridTest < Test::Unit::TestCase
36
+ context "Tests:" do
37
+ setup do
38
+ @db = standard_connection.db(TEST_DB)
39
+ @files = @db.collection('test-fs.files')
40
+ @chunks = @db.collection('test-fs.chunks')
41
+ end
42
+
43
+ teardown do
44
+ @files.remove
45
+ @chunks.remove
46
+ end
47
+
48
+ context "A one-chunk grid-stored file" do
49
+ setup do
50
+ @data = "GRIDDATA" * 5
51
+ @grid = Grid.new(@db, 'test-fs')
52
+ @id = @grid.put(@data, :filename => 'sample',
53
+ :metadata => {'app' => 'photos'})
54
+ end
55
+
56
+ should "retrieve the file" do
57
+ data = @grid.get(@id).data
58
+ assert_equal @data, data
59
+ end
60
+
61
+ end
62
+
63
+ context "A basic grid-stored file" do
64
+ setup do
65
+ @data = "GRIDDATA" * 50000
66
+ @grid = Grid.new(@db, 'test-fs')
67
+ @id = @grid.put(@data, :filename => 'sample',
68
+ :metadata => {'app' => 'photos'})
69
+ end
70
+
71
+ should "check existence" do
72
+ file = @grid.exist?(:filename => 'sample')
73
+ assert_equal 'sample', file['filename']
74
+ end
75
+
76
+ should "return nil if it doesn't exist" do
77
+ assert_nil @grid.exist?(:metadata => 'foo')
78
+ end
79
+
80
+ should "retrieve the stored data" do
81
+ data = @grid.get(@id).data
82
+ assert_equal @data.length, data.length
83
+ end
84
+
85
+ should "have a unique index on chunks" do
86
+ assert @chunks.index_information['files_id_1_n_1']['unique']
87
+ end
88
+
89
+ should "store the filename" do
90
+ file = @grid.get(@id)
91
+ assert_equal 'sample', file.filename
92
+ end
93
+
94
+ should "store any relevant metadata" do
95
+ file = @grid.get(@id)
96
+ assert_equal 'photos', file.metadata['app']
97
+ end
98
+
99
+ should "delete the file and any chunks" do
100
+ @grid.delete(@id)
101
+ assert_raise GridFileNotFound do
102
+ @grid.get(@id)
103
+ end
104
+ assert_equal nil, @db['test-fs']['chunks'].find_one({:files_id => @id})
105
+ end
106
+ end
107
+
108
+ context "Filename not required" do
109
+ setup do
110
+ @data = "GRIDDATA" * 50000
111
+ @grid = Grid.new(@db, 'test-fs')
112
+ @metadata = {'app' => 'photos'}
113
+ end
114
+
115
+ should "store the file with the old filename api" do
116
+ id = @grid.put(@data, :filename => 'sample', :metadata => @metadata)
117
+ file = @grid.get(id)
118
+ assert_equal 'sample', file.filename
119
+ assert_equal @metadata, file.metadata
120
+ end
121
+
122
+ should "store without a filename" do
123
+ id = @grid.put(@data, :metadata => @metadata)
124
+ file = @grid.get(id)
125
+ assert_nil file.filename
126
+ file_doc = @files.find_one({'_id' => id})
127
+ assert !file_doc.has_key?('filename')
128
+ assert_equal @metadata, file.metadata
129
+ end
130
+
131
+ should "store with filename and metadata with the new api" do
132
+ id = @grid.put(@data, :filename => 'sample', :metadata => @metadata)
133
+ file = @grid.get(id)
134
+ assert_equal 'sample', file.filename
135
+ assert_equal @metadata, file.metadata
136
+ end
137
+ end
138
+
139
+ context "Writing arbitrary data fields" do
140
+ setup do
141
+ @data = "GRIDDATA" * 50000
142
+ @grid = Grid.new(@db, 'test-fs')
143
+ end
144
+
145
+ should "write random keys to the files collection" do
146
+ id = @grid.put(@data, :phrases => ["blimey", "ahoy!"])
147
+ file = @grid.get(id)
148
+
149
+ assert_equal ["blimey", "ahoy!"], file['phrases']
150
+ end
151
+
152
+ should "ignore special keys" do
153
+ id = silently do
154
+ @grid.put(@data, :file_length => 100, :phrase => "blimey")
155
+ end
156
+ file = @grid.get(id)
157
+
158
+ assert_equal "blimey", file['phrase']
159
+ assert_equal 400_000, file.file_length
160
+ end
161
+ end
162
+
163
+ context "Storing data with a length of zero" do
164
+ setup do
165
+ @grid = Grid.new(@db, 'test-fs')
166
+ @id = silently do
167
+ @grid.put('', :filename => 'sample', :metadata => {'app' => 'photos'})
168
+ end
169
+ end
170
+
171
+ should "return the zero length" do
172
+ data = @grid.get(@id)
173
+ assert_equal 0, data.read.length
174
+ end
175
+ end
176
+
177
+ context "Grid streaming: " do
178
+ setup do
179
+ @grid = Grid.new(@db, 'test-fs')
180
+ filename = 'sample_data'
181
+ @io = File.open(File.join(TEST_DATA, filename), 'r')
182
+ id = @grid.put(@io, :filename => filename)
183
+ @file = @grid.get(id)
184
+ @io.rewind
185
+ @data = @io.read
186
+ if @data.respond_to?(:force_encoding)
187
+ @data.force_encoding("binary")
188
+ end
189
+ end
190
+
191
+ should "be equal in length" do
192
+ @io.rewind
193
+ assert_equal @io.read.length, @file.read.length
194
+ end
195
+
196
+ should "read the file" do
197
+ read_data = ""
198
+ @file.each do |chunk|
199
+ read_data << chunk
200
+ end
201
+ assert_equal @data.length, read_data.length
202
+ end
203
+
204
+ should "read the file if no block is given" do
205
+ read_data = @file.each
206
+ assert_equal @data.length, read_data.length
207
+ end
208
+ end
209
+
210
+ context "Grid streaming an empty file: " do
211
+ setup do
212
+ @grid = Grid.new(@db, 'test-fs')
213
+ filename = 'empty_data'
214
+ @io = File.open(File.join(TEST_DATA, filename), 'r')
215
+ id = silently do
216
+ @grid.put(@io, :filename => filename)
217
+ end
218
+ @file = @grid.get(id)
219
+ @io.rewind
220
+ @data = @io.read
221
+ if @data.respond_to?(:force_encoding)
222
+ @data.force_encoding("binary")
223
+ end
224
+ end
225
+
226
+ should "be equal in length" do
227
+ @io.rewind
228
+ assert_equal @io.read.length, @file.read.length
229
+ end
230
+
231
+ should "read the file" do
232
+ read_data = ""
233
+ @file.each do |chunk|
234
+ read_data << chunk
235
+ end
236
+ assert_equal @data.length, read_data.length
237
+ end
238
+
239
+ should "read the file if no block is given" do
240
+ read_data = @file.each
241
+ assert_equal @data.length, read_data.length
242
+ end
243
+ end
244
+
245
+ context "Streaming: " do || {}
246
+ setup do
247
+ @grid = Grid.new(@db, 'test-fs')
248
+ end
249
+
250
+ should "put and get a small io object with a small chunk size" do
251
+ read_and_write_stream('small_data.txt', 1, :chunk_size => 2)
252
+ end
253
+
254
+ should "put and get an empty io object" do
255
+ silently do
256
+ read_and_write_stream('empty_data', 1)
257
+ end
258
+ end
259
+
260
+ should "put and get a small io object" do
261
+ read_and_write_stream('small_data.txt', 1)
262
+ end
263
+
264
+ should "put and get a large io object if reading less than the chunk size" do
265
+ read_and_write_stream('sample_data', 255 * 1024)
266
+ end
267
+
268
+ should "put and get a large io object if reading more than the chunk size" do
269
+ read_and_write_stream('sample_data', 300 * 1024)
270
+ end
271
+ end
272
+ end
273
+ end