about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2015-01-22 04:08:34 +0000
committerEric Wong <normalperson@yhbt.net>2015-01-22 04:08:34 +0000
commit9738138e9266b1c8f955bc92eabd27313a0e853f (patch)
tree9311e8b3d087c34a5883199b83ce636576e65309
parentea6ea79399288737ced11fe60a47a5161fc447ed (diff)
downloadmogilefs-client-9738138e9266b1c8f955bc92eabd27313a0e853f.tar.gz
This should prevent stray processes from being leftover
after tests are run as well as cleaning up tmpdirs
more thoroughly.
-rw-r--r--test/fresh.rb21
-rw-r--r--test/setup.rb8
-rw-r--r--test/test_mogilefs.rb54
-rw-r--r--test/test_mogilefs_integration_large_pipe.rb2
-rw-r--r--test/test_mogilefs_integration_list_keys.rb2
-rw-r--r--test/test_mogtool_bigfile.rb2
6 files changed, 43 insertions, 46 deletions
diff --git a/test/fresh.rb b/test/fresh.rb
index 6afacde..8d452c7 100644
--- a/test/fresh.rb
+++ b/test/fresh.rb
@@ -7,24 +7,22 @@ require "net/http"
 module TestFreshSetup
   include TestExec
 
-  def setup
-    setup_mogilefs
-  end
-
   def setup_mogilefs(plugins = nil)
+    @teardown_pid = $$
     @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"])
+    @dbname = Tempfile.new(["mogfresh", ".sqlite3"], @docroot)
+    @mogilefsd_conf = Tempfile.new(["mogilefsd", "conf"], @docroot)
+    @mogilefsd_pid = Tempfile.new(["mogilefsd", "pid"], @docroot)
+    @dbpath = @dbname.path
 
-    cmd = %w(mogdbsetup --yes --type=SQLite --dbname) << @dbname.path
+    cmd = %w(mogdbsetup --yes --type=SQLite --dbname) << @dbpath
     x!(*cmd)
 
-    @mogilefsd_conf.puts "db_dsn DBI:SQLite:#{@dbname.path}"
+    @mogilefsd_conf.puts "db_dsn DBI:SQLite:#@dbpath"
     @mogilefsd_conf.write <<EOF
 conf_port #@tracker_port
 listen #@test_host
@@ -109,6 +107,7 @@ EOF
   end
 
   def teardown_mogilefs
+    return if $$ != @teardown_pid
     if @mogstored_pid
       pid = File.read(@mogstored_pid.path).to_i
       Process.kill(:TERM, pid) if pid > 0
@@ -144,8 +143,8 @@ EOF
     @mogstored_http = TCPServer.new(@test_host, 0)
     @mogstored_mgmt_port = @mogstored_mgmt.addr[1]
     @mogstored_http_port = @mogstored_http.addr[1]
-    @mogstored_conf = Tempfile.new(["mogstored", "conf"])
-    @mogstored_pid = Tempfile.new(["mogstored", "pid"])
+    @mogstored_conf = Tempfile.new(["mogstored", "conf"], @docroot)
+    @mogstored_pid = Tempfile.new(["mogstored", "pid"], @docroot)
     @mogstored_conf.write <<EOF
 pidfile = #{@mogstored_pid.path}
 maxconns = 1000
diff --git a/test/setup.rb b/test/setup.rb
index 8fda7f1..3c64c2b 100644
--- a/test/setup.rb
+++ b/test/setup.rb
@@ -58,13 +58,8 @@ require 'socket'
 class TempServer
   attr_reader :port, :pid
 
-  def self.destroy_all!
-    ObjectSpace.each_object(TempServer) { |t| t.destroy! }
-  end
-
-  at_exit { TempServer.destroy_all! }
-
   def initialize(server_proc, port = nil)
+    @destroy_pid = $$
     @pid = @sock = nil
     @port = port
     retries = 10
@@ -85,6 +80,7 @@ class TempServer
   end
 
   def destroy!
+    return if @destroy_pid != $$
     @sock.close rescue nil
     Process.kill('KILL', @pid) rescue nil
   end
diff --git a/test/test_mogilefs.rb b/test/test_mogilefs.rb
index a6bcf35..186e88a 100644
--- a/test/test_mogilefs.rb
+++ b/test/test_mogilefs.rb
@@ -6,10 +6,17 @@ require 'fileutils'
 
 class TestMogileFS__MogileFS < TestMogileFS
   def setup
+    @tmpsrv = []
     @klass = MogileFS::MogileFS
     super
   end
 
+  def tmpsrv(blk)
+    t = TempServer.new(blk)
+    @tmpsrv << t
+    t
+  end
+
   def read_headers(client)
     headers = ""
     while line = client.gets
@@ -40,8 +47,8 @@ class TestMogileFS__MogileFS < TestMogileFS
       client.send("HTTP/1.0 200 OK\r\nContent-Length: 5\r\n\r\ndata!", 0)
       client.close
     end
-    t1 = TempServer.new(svr)
-    t2 = TempServer.new(svr)
+    t1 = tmpsrv(svr)
+    t2 = tmpsrv(svr)
     path1 = "http://127.0.0.1:#{t1.port}/dev1/0/000/000/0000000062.fid"
     path2 = "http://127.0.0.1:#{t2.port}/dev2/0/000/000/0000000062.fid"
 
@@ -49,8 +56,6 @@ class TestMogileFS__MogileFS < TestMogileFS
 
     assert_equal 'data!', @client.get_file_data('key')
     assert_equal 1, accept.stat.size
-    ensure
-      TempServer.destroy_all!
   end
 
   def test_get_file_data_http_not_found_failover
@@ -80,16 +85,14 @@ class TestMogileFS__MogileFS < TestMogileFS
       client.close
     end
 
-    t1 = TempServer.new(svr1)
-    t2 = TempServer.new(svr2)
+    t1 = tmpsrv(svr1)
+    t2 = tmpsrv(svr2)
     path1 = "http://127.0.0.1:#{t1.port}/dev1/0/000/000/0000000062.fid"
     path2 = "http://127.0.0.1:#{t2.port}/dev2/0/000/000/0000000062.fid"
     @backend.get_paths = { 'paths' => 2, 'path1' => path1, 'path2' => path2 }
 
     assert_equal 'data!', @client.get_file_data('key')
     assert_equal 2, accept.stat.size
-    ensure
-      TempServer.destroy_all!
   end
 
   def test_get_file_data_http_block
@@ -117,8 +120,8 @@ class TestMogileFS__MogileFS < TestMogileFS
       client.close
       exit 0
     end
-    t1 = TempServer.new(svr)
-    t2 = TempServer.new(svr)
+    t1 = tmpsrv(svr)
+    t2 = tmpsrv(svr)
     path1 = "http://127.0.0.1:#{t1.port}/dev1/0/000/000/0000000062.fid"
     path2 = "http://127.0.0.1:#{t2.port}/dev2/0/000/000/0000000062.fid"
 
@@ -237,7 +240,7 @@ class TestMogileFS__MogileFS < TestMogileFS
     to_store = Tempfile.new('small')
     to_store.syswrite('data')
 
-    t = TempServer.new(Proc.new do |serv, accept|
+    t = tmpsrv(Proc.new do |serv, accept|
       client, _ = serv.accept
       while buf = client.readpartial(666)
         received.syswrite(buf)
@@ -260,14 +263,12 @@ class TestMogileFS__MogileFS < TestMogileFS
     assert_equal("data", a[-1])
     assert_equal("", a[-2])
     assert a.grep(%r{\AContent-Length: 4\z})[0]
-    ensure
-      TempServer.destroy_all!
   end
 
   def test_store_content_http
     received = Tempfile.new('received')
 
-    t = TempServer.new(Proc.new do |serv, accept|
+    t = tmpsrv(Proc.new do |serv, accept|
       client, _ = serv.accept
       client.sync = true
       seen = ""
@@ -295,8 +296,6 @@ class TestMogileFS__MogileFS < TestMogileFS
     assert_equal("data", a[-1])
     assert_equal("", a[-2])
     assert a.grep(%r{\AContent-Length: 4\z})[0]
-    ensure
-      TempServer.destroy_all!
   end
 
 
@@ -306,7 +305,7 @@ class TestMogileFS__MogileFS < TestMogileFS
     10.times do
       expected += "data"
     end
-    t = TempServer.new(Proc.new do |serv, accept|
+    t = tmpsrv(Proc.new do |serv, accept|
       client, _ = serv.accept
       client.sync = true
       nr = 0
@@ -343,8 +342,6 @@ class TestMogileFS__MogileFS < TestMogileFS
     assert_equal("data" * 10, a[-1])
     assert_equal("", a[-2])
     assert a.grep(%r{\AContent-Length: 40\z})[0]
-    ensure
-      TempServer.destroy_all!
   end
 
   def test_store_content_multi_dest_failover_path
@@ -355,7 +352,7 @@ class TestMogileFS__MogileFS < TestMogileFS
     received1 = Tempfile.new('received')
     received2 = Tempfile.new('received')
 
-    t1 = TempServer.new(Proc.new do |serv, accept|
+    t1 = tmpsrv(Proc.new do |serv, accept|
       client, _ = serv.accept
       seen = ""
       while seen !~ /\r\n\r\ndata/
@@ -367,7 +364,7 @@ class TestMogileFS__MogileFS < TestMogileFS
       client.close
     end)
 
-    t2 = TempServer.new(Proc.new do |serv, accept|
+    t2 = tmpsrv(Proc.new do |serv, accept|
       client, _ = serv.accept
       seen = ""
       while seen !~ /\r\n\r\ndata/
@@ -410,12 +407,10 @@ class TestMogileFS__MogileFS < TestMogileFS
     assert_equal("", b[-2])
     assert a.grep(%r{\AContent-Length: 4\z})[0]
     assert b.grep(%r{\AContent-Length: 4\z})[0]
-    ensure
-      TempServer.destroy_all!
   end
 
   def test_store_content_http_fail
-    t = TempServer.new(Proc.new do |serv, accept|
+    t = tmpsrv(Proc.new do |serv, accept|
       client, _ = serv.accept
       client.sync = true
       read_headers(client)
@@ -435,7 +430,7 @@ class TestMogileFS__MogileFS < TestMogileFS
 
   def test_store_content_http_empty
     received = Tempfile.new('received')
-    t = TempServer.new(Proc.new do |serv, accept|
+    t = tmpsrv(Proc.new do |serv, accept|
       client, _ = serv.accept
       client.sync = true
       received.syswrite(client.recv(4096, 0))
@@ -487,7 +482,7 @@ class TestMogileFS__MogileFS < TestMogileFS
     assert_equal expect_size, to_put.stat.size
 
     readed = Tempfile.new('readed')
-    t = TempServer.new(Proc.new do |serv, accept|
+    t = tmpsrv(Proc.new do |serv, accept|
       client, _ = serv.accept
       client.sync = true
       nr = 0
@@ -523,9 +518,6 @@ class TestMogileFS__MogileFS < TestMogileFS
       assert( system(cmp_bin, expect.path, received.path) )
       break
     end
-
-    ensure
-      TempServer.destroy_all!
   end
 
   def test_store_content_readonly
@@ -868,6 +860,10 @@ class TestMogileFS__MogileFS < TestMogileFS
     assert_equal({}, @client.sleep(2))
   end
 
+  def teardown
+    @tmpsrv.each { |t| t.destroy! }
+  end
+
   private
 
     # tested with 1000, though it takes a while
diff --git a/test/test_mogilefs_integration_large_pipe.rb b/test/test_mogilefs_integration_large_pipe.rb
index 16f6d58..f6b7dc9 100644
--- a/test/test_mogilefs_integration_large_pipe.rb
+++ b/test/test_mogilefs_integration_large_pipe.rb
@@ -10,6 +10,8 @@ class TestMogileFSLargePipe < Test::Unit::TestCase
     @client = MogileFS::MogileFS.new(:hosts => @trackers, :domain => @domain)
   end
 
+  alias teardown teardown_mogilefs
+
   def test_large_pipe_test
     junk = File.open("/dev/urandom") { |fp| fp.read(1024) }
     junk *= 32
diff --git a/test/test_mogilefs_integration_list_keys.rb b/test/test_mogilefs_integration_list_keys.rb
index 8492a2a..6f56548 100644
--- a/test/test_mogilefs_integration_list_keys.rb
+++ b/test/test_mogilefs_integration_list_keys.rb
@@ -10,6 +10,8 @@ class TestMogileFSIntegrationListKeys < Test::Unit::TestCase
     @client = MogileFS::MogileFS.new(:hosts => @trackers, :domain => @domain)
   end
 
+  alias teardown teardown_mogilefs
+
   def test_list_keys
     k = %w(a b c d e f g)
     k.each { |x| @client.store_content("lk_#{x}", nil, x) }
diff --git a/test/test_mogtool_bigfile.rb b/test/test_mogtool_bigfile.rb
index 01de78e..f5dc473 100644
--- a/test/test_mogtool_bigfile.rb
+++ b/test/test_mogtool_bigfile.rb
@@ -26,6 +26,8 @@ class TestMogtoolBigfile < Test::Unit::TestCase
     @client = MogileFS::MogileFS.new(:hosts => @trackers, :domain => @domain)
   end
 
+  alias teardown teardown_mogilefs
+
   def mogtool!(*args)
     x!("mogtool", "--trackers=#{@trackers.join(',')}",
        "--domain=#@domain", *args)