about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2011-11-20 02:22:19 +0000
committerEric Wong <normalperson@yhbt.net>2011-11-20 02:22:19 +0000
commit9922005b9da00d4709202d87b434ca93c6b53a01 (patch)
tree8fc7b5383757fbc72fa7e66b16e1676a325a0b25
parent7f721b1608882afa15c28be0ec6071fb1e4e5872 (diff)
downloadmogilefs-client-9922005b9da00d4709202d87b434ca93c6b53a01.tar.gz
We'll support alternate mogstored setups...
-rw-r--r--test/test_fresh.rb116
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