Tests for GridIO#each
This commit is contained in:
parent
c80cd285fa
commit
9a8d83ad24
@ -45,7 +45,7 @@ module Mongo
|
||||
end
|
||||
|
||||
# Store a file in the file store. This method is designed only for writing new files;
|
||||
# if you need to update a given file, first delete it using #Grid#delete.
|
||||
# if you need to update a given file, first delete it using Grid#delete.
|
||||
#
|
||||
# Note that arbitary metadata attributes can be saved to the file by passing
|
||||
# them in as options.
|
||||
|
@ -191,11 +191,14 @@ module Mongo
|
||||
end
|
||||
id
|
||||
end
|
||||
|
||||
|
||||
# Read a chunk of the data from the file and yield it to the given
|
||||
# block. It will read from the current file position.
|
||||
# block.
|
||||
#
|
||||
# @param [Block] A block called with each chunk
|
||||
# Note that this method reads from the current file position.
|
||||
#
|
||||
# @yield Yields on chunk per iteration as defined by this file's
|
||||
# chunk size.
|
||||
#
|
||||
# @return [Mongo::GridIO] self
|
||||
def each
|
||||
|
Binary file not shown.
BIN
test/data/sample_data
Normal file
BIN
test/data/sample_data
Normal file
Binary file not shown.
@ -62,7 +62,6 @@ class GridIOTest < Test::Unit::TestCase
|
||||
end
|
||||
|
||||
context "Content types" do
|
||||
|
||||
if defined?(MIME)
|
||||
should "determine common content types from the extension" do
|
||||
file = GridIO.new(@files, @chunks, 'sample.pdf', 'w')
|
||||
|
@ -18,7 +18,8 @@ class GridTest < Test::Unit::TestCase
|
||||
setup do
|
||||
@data = "GRIDDATA" * 50000
|
||||
@grid = Grid.new(@db, 'test-fs')
|
||||
@id = @grid.put(@data, :filename => 'sample', :metadata => {'app' => 'photos'})
|
||||
@id = @grid.put(@data, :filename => 'sample',
|
||||
:metadata => {'app' => 'photos'})
|
||||
end
|
||||
|
||||
should "check existence" do
|
||||
@ -120,7 +121,8 @@ class GridTest < Test::Unit::TestCase
|
||||
context "Storing data with a length of zero" do
|
||||
setup do
|
||||
@grid = Grid.new(@db, 'test-fs')
|
||||
@id = @grid.put('', :filename => 'sample', :metadata => {'app' => 'photos'})
|
||||
@id = @grid.put('', :filename => 'sample',
|
||||
:metadata => {'app' => 'photos'})
|
||||
end
|
||||
|
||||
should "return the zero length" do
|
||||
@ -129,6 +131,34 @@ class GridTest < Test::Unit::TestCase
|
||||
end
|
||||
end
|
||||
|
||||
context "Grid streaming: " do
|
||||
setup do
|
||||
@grid = Grid.new(@db, 'test-fs')
|
||||
filename = 'sample_data'
|
||||
@io = File.open(File.join(File.dirname(__FILE__), 'data', filename), 'r')
|
||||
id = @grid.put(@io, :filename => filename)
|
||||
@file = @grid.get(id)
|
||||
@io.rewind
|
||||
@data = @io.read
|
||||
if @data.respond_to?(:force_encoding)
|
||||
@data.force_encoding("binary")
|
||||
end
|
||||
end
|
||||
|
||||
should "read the file" do
|
||||
read_data = ""
|
||||
@file.each do |chunk|
|
||||
read_data << chunk
|
||||
end
|
||||
assert_equal @data.length, read_data.length
|
||||
end
|
||||
|
||||
should "read the file if no block is given" do
|
||||
read_data = @file.each
|
||||
assert_equal @data.length, read_data.length
|
||||
end
|
||||
end
|
||||
|
||||
context "Streaming: " do || {}
|
||||
setup do
|
||||
def read_and_write_stream(filename, read_length, opts={})
|
||||
@ -158,12 +188,12 @@ class GridTest < Test::Unit::TestCase
|
||||
read_and_write_stream('small_data.txt', 1)
|
||||
end
|
||||
|
||||
should "put and get a large io object when reading smaller than the chunk size" do
|
||||
read_and_write_stream('sample_file.pdf', 256 * 1024)
|
||||
should "put and get a large io object if reading less than the chunk size" do
|
||||
read_and_write_stream('sample_data', 256 * 1024)
|
||||
end
|
||||
|
||||
should "put and get a large io object when reading larger than the chunk size" do
|
||||
read_and_write_stream('sample_file.pdf', 300 * 1024)
|
||||
should "put and get a large io object if reading more than the chunk size" do
|
||||
read_and_write_stream('sample_data', 300 * 1024)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user