1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
| | # -*- encoding: binary -*-
require './test/integration'
class TestMogileFSIntegration < TestMogIntegration
def setup
super
@client = MogileFS::MogileFS.new(:hosts => @trackers, :domain => @domain)
end
def test_CRUD
assert_equal 4, @client.store_content("CRUD", "default", "DATA")
assert_equal 4, @client.size("CRUD")
assert_equal "DATA", @client.get_file_data("CRUD")
assert_equal "DAT", @client.get_file_data("CRUD", nil, 3)
assert_equal "AT", @client.get_file_data("CRUD", nil, 2, 1)
sio = StringIO.new("")
rv = @client.get_file_data("CRUD", sio)
assert_equal 4, rv
assert_equal "DATA", sio.string
assert_equal 8, @client.store_content("CRUD", "default", "MOARDATA")
assert_equal "MOARDATA", @client.get_file_data("CRUD")
assert_equal true, @client.delete("CRUD")
assert_raises(MogileFS::Backend::UnknownKeyError) { @client.delete("CRUD") }
data = "hello world\n".freeze
tmp = tmpfile("blob")
tmp.sync = true
tmp.write(data)
tmp.rewind
assert_equal tmp.size, @client.store_file("blob", nil, tmp)
assert_equal(data, @client.get_file_data("blob"))
data = "pipe!\n".freeze
r, w = IO.pipe
th = Thread.new do
w.write(data)
w.close
end
assert_equal data.size, @client.store_file("pipe", nil, r)
assert_nothing_raised do
r.close
th.join
end
assert_equal(data, @client.get_file_data("pipe"))
cbk = MogileFS::Util::StoreContent.new(nil) do |write_callback|
10.times { write_callback.call("data") }
end
assert_nil cbk.length
nr = @client.store_content('store_content', nil, cbk)
assert_equal 40, nr
assert_equal("data" * 10, @client.get_file_data('store_content'))
end
def test_store_non_rewindable
tmp = Object.new
def tmp.size
666
end
assert_raises(MogileFS::HTTPFile::NonRetryableError) do
@client.store_file("non_rewindable", nil, tmp)
end
end
def test_file_info
assert_equal 3, @client.store_content("file_info", "default", "FOO")
res = @client.file_info("file_info")
assert_kind_of Integer, res["fid"]
assert_equal 3, res["length"]
assert ! res.include?("devids")
assert_kind_of Integer, res["devcount"]
res = @client.file_info("file_info", :devices => true)
assert_kind_of Integer, res["fid"]
assert_equal 3, res["length"]
assert_kind_of Integer, res["devcount"]
devids = res.delete("devids")
assert_instance_of Array, devids
devids.each { |devid| assert_kind_of Integer, devid }
assert_equal res["devcount"], devids.size
end
def test_file_debug
assert_equal 3, @client.store_content("file_debug", "default", "BUG")
a = @client.file_debug("file_debug")
b = @client.file_debug(:key => "file_debug")
fid = @client.file_info("file_debug")["fid"]
c = @client.file_debug(fid)
d = @client.file_debug(:fid => fid)
[ a, b, c, d ].each do |res|
assert_equal fid, res["fid_fid"]
assert_equal 0, res["fid_classid"]
assert_equal "file_debug", res["fid_dkey"]
assert_equal 3, res["fid_length"]
assert_kind_of Array, res["devids"]
assert_kind_of Integer, res["devids"][0]
res["devids"].each do |devid|
uri = URI.parse(res["devpath_#{devid}"])
assert_equal "http", uri.scheme
end
assert_equal "default", res["fid_class"]
end
@client.delete("file_debug")
rv = @client.file_debug(fid)
assert rv.keys.grep(/\Afid_/).empty?, rv.inspect
end
def test_file_debug_in_progress
rv = @client.new_file("file_debug_in_progress") do |http_file|
http_file << "ZZZZ"
dests = http_file.instance_variable_get(:@dests)
dests[0][1] =~ %r{/(\d+)\.fid\z}
fid = $1.to_i
rv = @client.file_debug(fid)
devids = dests.map { |x| x[0].to_i }.sort
assert_equal devids, rv["tempfile_devids"].sort
assert_equal "file_debug_in_progress", rv["tempfile_dkey"]
end
assert_equal 4, rv
end
end
|