Disable retries when storing non-rewindable data
[ruby-mogilefs-client.git] / test / test_mogilefs_integration.rb
blob5f3640428f969e5a46819c15d53ced9f57b188a4
1 # -*- encoding: binary -*-
2 require './test/integration'
4 class TestMogileFSIntegration < TestMogIntegration
5   def setup
6     super
7     @client = MogileFS::MogileFS.new(:hosts => @trackers, :domain => @domain)
8   end
10   def test_CRUD
11     assert_equal 4, @client.store_content("CRUD", "default", "DATA")
12     assert_equal "DATA", @client.get_file_data("CRUD")
13     sio = StringIO.new("")
14     rv = @client.get_file_data("CRUD") do |rd|
15       MogileFS::X.copy_stream(rd, sio)
16     end
17     assert_equal 4, rv
18     assert_equal "DATA", sio.string
19     assert_equal 8, @client.store_content("CRUD", "default", "MOARDATA")
20     assert_equal "MOARDATA", @client.get_file_data("CRUD")
21     assert_equal true, @client.delete("CRUD")
22     assert_raises(MogileFS::Backend::UnknownKeyError) { @client.delete("CRUD") }
24     data = "hello world\n".freeze
25     tmp = tmpfile("blob")
26     tmp.sync = true
27     tmp.write(data)
28     tmp.rewind
29     assert_equal tmp.size, @client.store_file("blob", nil, tmp)
30     assert_equal(data, @client.get_file_data("blob"))
32     data = "pipe!\n".freeze
33     r, w = IO.pipe
34     th = Thread.new do
35       w.write(data)
36       w.close
37     end
38     assert_equal data.size, @client.store_file("pipe", nil, r)
39     assert_nothing_raised do
40       r.close
41       th.join
42     end
43     assert_equal(data, @client.get_file_data("pipe"))
45     cbk = MogileFS::Util::StoreContent.new(nil) do |write_callback|
46       10.times { write_callback.call("data") }
47     end
48     assert_nil cbk.length
49     nr = @client.store_content('store_content', nil, cbk)
50     assert_equal 40, nr
51     assert_equal("data" * 10, @client.get_file_data('store_content'))
52   end
54   def test_store_non_rewindable
55     tmp = Object.new
56     def tmp.size
57       666
58     end
60     assert_raises(MogileFS::HTTPFile::NonRetryableError) do
61       @client.store_file("non_rewindable", nil, tmp)
62     end
63   end
64 end