diff options
author | Eric Wong <normalperson@yhbt.net> | 2011-11-20 02:22:19 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2011-11-20 02:22:19 +0000 |
commit | 9922005b9da00d4709202d87b434ca93c6b53a01 (patch) | |
tree | 8fc7b5383757fbc72fa7e66b16e1676a325a0b25 | |
parent | 7f721b1608882afa15c28be0ec6071fb1e4e5872 (diff) | |
download | mogilefs-client-9922005b9da00d4709202d87b434ca93c6b53a01.tar.gz |
We'll support alternate mogstored setups...
-rw-r--r-- | test/test_fresh.rb | 116 |
1 files changed, 92 insertions, 24 deletions
diff --git a/test/test_fresh.rb b/test/test_fresh.rb index 8c2ef53..92930b5 100644 --- a/test/test_fresh.rb +++ b/test/test_fresh.rb @@ -2,6 +2,7 @@ require "./test/exec" require "tmpdir" require "fileutils" +require "net/http" class TestMogFresh < Test::Unit::TestCase include TestExec @@ -10,21 +11,38 @@ class TestMogFresh < Test::Unit::TestCase setup_mogilefs end - def setup_mogilefs(plugins = nil) - @test_host = "127.0.0.1" - @tracker = TCPServer.new(@test_host, 0) - @tracker_port = @tracker.addr[1] - + def setup_mogstored + @docroot = Dir.mktmpdir(["mogfresh", "docroot"]) @mogstored_mgmt = TCPServer.new(@test_host, 0) @mogstored_http = TCPServer.new(@test_host, 0) @mogstored_mgmt_port = @mogstored_mgmt.addr[1] @mogstored_http_port = @mogstored_http.addr[1] - - @dbname = Tempfile.new(["mogfresh", "sqlite3"]) - @docroot = Dir.mktmpdir(["mogfresh", "docroot"]) @mogstored_conf = Tempfile.new(["mogstored", "conf"]) - @mogilefsd_conf = Tempfile.new(["mogilefsd", "conf"]) @mogstored_pid = Tempfile.new(["mogstored", "pid"]) + @mogstored_conf.write <<EOF +pidfile = #{@mogstored_pid.path} +maxconns = 1000 +httplisten = #@test_host:#{@mogstored_http_port} +mgmtlisten = #@test_host:#{@mogstored_mgmt_port} +docroot = #@docroot +EOF + @mogstored_conf.flush + @mogstored_mgmt.close + @mogstored_http.close + + x!("mogstored", "--daemon", "--config=#{@mogstored_conf.path}") + wait_for_port @mogstored_mgmt_port + wait_for_port @mogstored_http_port + end + + def setup_mogilefs(plugins = nil) + @test_host = "127.0.0.1" + setup_mogstored + @tracker = TCPServer.new(@test_host, 0) + @tracker_port = @tracker.addr[1] + + @dbname = Tempfile.new(["mogfresh", ".sqlite3"]) + @mogilefsd_conf = Tempfile.new(["mogilefsd", "conf"]) @mogilefsd_pid = Tempfile.new(["mogilefsd", "pid"]) cmd = %w(mogdbsetup --yes --type=SQLite --dbname) << @dbname.path @@ -43,22 +61,8 @@ node_timeout 10 EOF @mogilefsd_conf.flush - @mogstored_conf.write <<EOF -pidfile = #{@mogstored_pid.path} -maxconns = 1000 -httplisten = #@test_host:#{@mogstored_http_port} -mgmtlisten = #@test_host:#{@mogstored_mgmt_port} -docroot = #@docroot -EOF - @mogstored_conf.flush - - @hosts = [ "#@test_host:#@tracker_port" ] - @mogstored_mgmt.close - @mogstored_http.close + @trackers = @hosts = [ "#@test_host:#@tracker_port" ] @tracker.close - x!("mogstored", "--daemon", "--config=#{@mogstored_conf.path}") - wait_for_port @mogstored_http_port - wait_for_port @mogstored_mgmt_port x!("mogilefsd", "--daemon", "--config=#{@mogilefsd_conf.path}") wait_for_port @tracker_port @admin = MogileFS::Admin.new(:hosts => @hosts) @@ -135,6 +139,55 @@ EOF @admin.delete_class(domain, "klassy") rescue nil end + def test_device_file_add + assert_equal [], @admin.get_hosts + args = { :ip => @test_host, :port => @mogstored_http_port } + args[:status] = "alive" + @admin.create_host("me", args) + Dir.mkdir("#@docroot/dev1") + Dir.mkdir("#@docroot/dev2") + + yield_for_monitor_update { @admin.get_hosts.empty? or break } + + # TODO: allow adding devices via our MogileFS::Admin class + mogadm!("device", "add", "me", "dev1") + yield_for_monitor_update { @admin.get_devices.empty? or break } + wait_for_usage_file "dev1" + mogadm!("device", "add", "me", "dev2") + wait_for_usage_file "dev2" + out = err = nil + tries = 0 + begin + out.close! if out + err.close! if err + status, out, err = mogadm("check") + if (tries += 1) > 100 + warn err.read + puts out.read + return + end + sleep 0.1 + end until out.read =~ /write?able/ + + domain = "rbmogtest.#$$" + @admin.create_domain(domain) + yield_for_monitor_update { @admin.get_domains.include?(domain) and break } + client = MogileFS::MogileFS.new :hosts => @hosts, :domain => domain + r, w = IO.pipe + thr = Thread.new do + (0..9).each do |i| + sleep 0.05 + w.write("#{i}\n") + end + w.close + :ok + end + assert_equal 20, client.store_file("pipe", nil, r) + assert_equal :ok, thr.value + r.close + assert_equal "0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n", client.get_file_data("pipe") + end + def teardown if @mogstored_pid && @mogstored_pid.size > 0 Process.kill(:TERM, @mogstored_pid.read.to_i) @@ -146,4 +199,19 @@ EOF end FileUtils.rmtree(@docroot) end + + def wait_for_usage_file(device) + uri = URI("http://#@test_host:#@mogstored_http_port/#{device}/usage") + res = nil + 100.times do + res = Net::HTTP.get_response(uri) + if Net::HTTPOK === res + puts res.body if $DEBUG + return + end + puts res.inspect if $DEBUG + sleep 0.1 + end + raise "#{uri} failed to appear: #{res.inspect}" + end end |