1 # -*- encoding: binary -*-
2 require './test/integration'
4 class TestMogileFSIntegration < TestMogIntegration
7 @client = MogileFS::MogileFS.new(:hosts => @trackers, :domain => @domain)
11 assert_equal 4, @client.store_content("CRUD", "default", "DATA")
12 assert_equal 4, @client.size("CRUD")
13 assert_equal "DATA", @client.get_file_data("CRUD")
14 sio = StringIO.new("")
15 rv = @client.get_file_data("CRUD", sio)
17 assert_equal "DATA", sio.string
18 assert_equal 8, @client.store_content("CRUD", "default", "MOARDATA")
19 assert_equal "MOARDATA", @client.get_file_data("CRUD")
20 assert_equal true, @client.delete("CRUD")
21 assert_raises(MogileFS::Backend::UnknownKeyError) { @client.delete("CRUD") }
23 data = "hello world\n".freeze
28 assert_equal tmp.size, @client.store_file("blob", nil, tmp)
29 assert_equal(data, @client.get_file_data("blob"))
31 data = "pipe!\n".freeze
37 assert_equal data.size, @client.store_file("pipe", nil, r)
38 assert_nothing_raised do
42 assert_equal(data, @client.get_file_data("pipe"))
44 cbk = MogileFS::Util::StoreContent.new(nil) do |write_callback|
45 10.times { write_callback.call("data") }
48 nr = @client.store_content('store_content', nil, cbk)
50 assert_equal("data" * 10, @client.get_file_data('store_content'))
53 def test_store_non_rewindable
59 assert_raises(MogileFS::HTTPFile::NonRetryableError) do
60 @client.store_file("non_rewindable", nil, tmp)
65 assert_equal 3, @client.store_content("file_info", "default", "FOO")
66 res = @client.file_info("file_info")
67 assert_kind_of Integer, res["fid"]
68 assert_equal 3, res["length"]
69 assert ! res.include?("devids")
70 assert_kind_of Integer, res["devcount"]
72 res = @client.file_info("file_info", :devices => true)
73 assert_kind_of Integer, res["fid"]
74 assert_equal 3, res["length"]
75 assert_kind_of Integer, res["devcount"]
76 devids = res.delete("devids")
77 assert_instance_of Array, devids
78 devids.each { |devid| assert_kind_of Integer, devid }
79 assert_equal res["devcount"], devids.size
83 assert_equal 3, @client.store_content("file_debug", "default", "BUG")
84 a = @client.file_debug("file_debug")
85 b = @client.file_debug(:key => "file_debug")
86 fid = @client.file_info("file_debug")["fid"]
87 c = @client.file_debug(fid)
88 d = @client.file_debug(:fid => fid)
90 [ a, b, c, d ].each do |res|
91 assert_equal fid, res["fid_fid"]
92 assert_equal 0, res["fid_classid"]
93 assert_equal "file_debug", res["fid_dkey"]
94 assert_equal 3, res["fid_length"]
95 assert_kind_of Array, res["devids"]
96 assert_kind_of Integer, res["devids"][0]
97 res["devids"].each do |devid|
98 uri = URI.parse(res["devpath_#{devid}"])
99 assert_equal "http", uri.scheme
101 assert_equal "default", res["fid_class"]
103 @client.delete("file_debug")
104 rv = @client.file_debug(fid)
105 assert rv.keys.grep(/\Afid_/).empty?, rv.inspect
108 def test_file_debug_in_progress
109 rv = @client.new_file("file_debug_in_progress") do |http_file|
111 dests = http_file.instance_variable_get(:@dests)
112 dests[0][1] =~ %r{/(\d+)\.fid\z}
114 rv = @client.file_debug(fid)
115 devids = dests.map { |x| x[0].to_i }.sort
116 assert_equal devids, rv["tempfile_devids"].sort
117 assert_equal "file_debug_in_progress", rv["tempfile_dkey"]