about summary refs log tree commit homepage
path: root/test/test_mogilefs_integration.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_mogilefs_integration.rb')
-rw-r--r--test/test_mogilefs_integration.rb44
1 files changed, 44 insertions, 0 deletions
diff --git a/test/test_mogilefs_integration.rb b/test/test_mogilefs_integration.rb
index e7ca642..8b5e3c1 100644
--- a/test/test_mogilefs_integration.rb
+++ b/test/test_mogilefs_integration.rb
@@ -65,6 +65,9 @@ class TestMogileFSIntegration < TestMogIntegration
     def tmp.size
       666
     end
+    def tmp.read(len, buf = "")
+      raise Errno::EIO
+    end
 
     assert_raises(MogileFS::HTTPFile::NonRetryableError) do
       @client.store_file("non_rewindable", nil, tmp)
@@ -169,4 +172,45 @@ class TestMogileFSIntegration < TestMogIntegration
     end
     assert_equal count, seen.size
   end if ENV["TEST_EXPENSIVE"]
+
+  def test_new_file_no_block
+    rv = @client.new_file("no_block")
+    assert_nothing_raised { rv.write "HELLO" }
+    assert_nil rv.close
+    assert_equal "HELLO", @client.get_file_data("no_block")
+  end
+
+  def test_new_file_known_content_length
+    rv = @client.new_file("a", :content_length => 5)
+    assert_nothing_raised { rv.write "HELLO" }
+    assert_nil rv.close
+    assert_equal "HELLO", @client.get_file_data("a")
+
+    rv = @client.new_file("a", :content_length => 6)
+    assert_nothing_raised { rv.write "GOOD" }
+    assert_raises(MogileFS::SizeMismatchError) { rv.close }
+    assert_equal "HELLO", @client.get_file_data("a")
+  end
+
+  def test_new_file_content_md5
+    r, w = IO.pipe
+    b64digest = [ Digest::MD5.digest("HELLO") ].pack('m').strip
+    rv = @client.new_file("a", :content_md5 => b64digest, :content_length => 5)
+    assert_nothing_raised { rv.write "HELLO" }
+    assert_nil rv.close
+    assert_equal "HELLO", @client.get_file_data("a")
+
+    assert_nothing_raised { w.write "HIHI"; w.close }
+    assert_raises(ArgumentError) do
+      @client.new_file("a", :content_md5 => b64digest) { |f| f.big_io = r }
+    end
+    assert_equal "HELLO", @client.get_file_data("a")
+
+    assert_nothing_raised do
+      @client.new_file("a", :content_md5 => :trailer) { |f| f.big_io = r }
+    end
+    assert_equal "HIHI", @client.get_file_data("a")
+    ensure
+      r.close if r
+  end
 end