From 63cc3ee529250a6b09dd7e032dc73ec509000c0f Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Fri, 16 Jan 2015 03:09:09 +0000 Subject: tests: create fresh intances for all integration tests This should make it easier to fully test on machines without access to an existing MogileFS instance. You'll still need mogilefsd and mogstored available, however, but these tests are skipped on machines without them. --- test/fresh.rb | 71 ---------------------------- test/integration.rb | 43 ----------------- test/test_fresh.rb | 71 ++++++++++++++++++++++++++++ test/test_mogilefs_integration.rb | 20 ++++++-- test/test_mogilefs_integration_large_pipe.rb | 8 ++-- test/test_mogilefs_integration_list_keys.rb | 10 ++-- test/test_mogtool_bigfile.rb | 8 ++-- 7 files changed, 102 insertions(+), 129 deletions(-) delete mode 100644 test/integration.rb diff --git a/test/fresh.rb b/test/fresh.rb index e614b7d..6afacde 100644 --- a/test/fresh.rb +++ b/test/fresh.rb @@ -63,59 +63,6 @@ EOF raise "#@test_host:#{port} never became ready" end - def test_admin_setup_new_host_and_devices - assert_equal [], @admin.get_hosts - args = { :ip => @test_host, :port => @mogstored_http_port } - @admin.create_host("me", args) - yield_for_monitor_update { @admin.get_hosts.empty? or break } - hosts = @admin.get_hosts - assert_equal 1, hosts.size - host = @admin.get_hosts[0] - assert_equal "me", host["hostname"] - assert_equal @mogstored_http_port, host["http_port"] - assert_nil host["http_get_port"] - assert_equal @test_host, host["hostip"] - assert_kind_of Integer, host["hostid"] - assert_equal hosts, @admin.get_hosts(host["hostid"]) - - assert_equal [], @admin.get_devices - end - - def test_replicate_now - assert_equal({"count" => 0}, @admin.replicate_now) - end - - def test_clear_cache - assert_nil @admin.clear_cache - end - - def test_create_update_delete_class - domain = "rbmogtest#{Time.now.strftime('%Y%m%d%H%M%S')}.#{uuid}" - @admin.create_domain(domain) - yield_for_monitor_update { @admin.get_domains.include?(domain) and break } - - @admin.create_class(domain, "klassy", 1) - - assert_raises(MogileFS::Backend::ClassExistsError) do - @admin.create_class(domain, "klassy", 1) - end - - @admin.update_class(domain, "klassy", - :mindevcount => 1, :replpolicy => "MultipleHosts(1)") - - tmp = nil - yield_for_monitor_update do - tmp = @admin.get_domains[domain]["klassy"] - break if tmp && tmp["replpolicy"] == "MultipleHosts(1)" - end - assert tmp, "domain did not show up" - assert_equal 1, tmp["mindevcount"] - assert_equal "MultipleHosts(1)", tmp["replpolicy"] - @admin.update_class(domain, "klassy", 2) - ensure - @admin.delete_class(domain, "klassy") rescue nil - end - def add_host_device_domain assert_equal [], @admin.get_hosts args = { :ip => @test_host, :port => @mogstored_http_port } @@ -161,24 +108,6 @@ EOF @domain = domain end - def test_device_file_add - add_host_device_domain - 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_mogilefs if @mogstored_pid pid = File.read(@mogstored_pid.path).to_i diff --git a/test/integration.rb b/test/integration.rb deleted file mode 100644 index a0c876b..0000000 --- a/test/integration.rb +++ /dev/null @@ -1,43 +0,0 @@ -# -*- encoding: binary -*- -require './test/exec' - -class TestMogIntegration < Test::Unit::TestCase - include TestExec - - def test_dummy - assert true, "Ruby 1.8 Test::Unit is broken" - end unless defined?(MiniTest) - - def setup - @to_close = [] - @trackers = ENV["MOG_TEST_TRACKERS"].split(/,/) - domain = "rbmogtest#{Time.now.strftime('%Y%m%d%H%M%S')}.#{uuid}" - @admin = MogileFS::Admin.new(:hosts => @trackers) - @admin.create_domain(domain) - yield_for_monitor_update do - @admin.get_domains.include?(domain) and break - end - @domain = domain - end - - def teardown - if defined?(@domain) - client = MogileFS::MogileFS.new :hosts => @trackers, :domain => @domain - client.each_key("") { |key| - p [ :delete, key ] if $VERBOSE - client.delete(key) - } - assert_equal true, @admin.delete_domain(@domain) - assert_raises(MogileFS::Backend::DomainNotFoundError) do - @admin.delete_domain(@domain) - end - end - @to_close.each do |io| - io.closed? or io.close - end - end -end if ENV["MOG_TEST_TRACKERS"] - -class TestMogIntegration - warn "MOG_TEST_TRACKERS not defined" -end unless ENV["MOG_TEST_TRACKERS"] diff --git a/test/test_fresh.rb b/test/test_fresh.rb index 5f420de..f3d3df1 100644 --- a/test/test_fresh.rb +++ b/test/test_fresh.rb @@ -197,4 +197,75 @@ class TestMogFresh < Test::Unit::TestCase @mogilefsd_pid = nil assert_raises(MogileFS::UnreachableBackendError) { client.list_keys } end + + def test_admin_setup_new_host_and_devices + assert_equal [], @admin.get_hosts + args = { :ip => @test_host, :port => @mogstored_http_port } + @admin.create_host("me", args) + yield_for_monitor_update { @admin.get_hosts.empty? or break } + hosts = @admin.get_hosts + assert_equal 1, hosts.size + host = @admin.get_hosts[0] + assert_equal "me", host["hostname"] + assert_equal @mogstored_http_port, host["http_port"] + assert_nil host["http_get_port"] + assert_equal @test_host, host["hostip"] + assert_kind_of Integer, host["hostid"] + assert_equal hosts, @admin.get_hosts(host["hostid"]) + + assert_equal [], @admin.get_devices + end + + def test_replicate_now + assert_equal({"count" => 0}, @admin.replicate_now) + end + + def test_clear_cache + assert_nil @admin.clear_cache + end + + def test_create_update_delete_class + domain = "rbmogtest#{Time.now.strftime('%Y%m%d%H%M%S')}.#{uuid}" + @admin.create_domain(domain) + yield_for_monitor_update { @admin.get_domains.include?(domain) and break } + + @admin.create_class(domain, "klassy", 1) + + assert_raises(MogileFS::Backend::ClassExistsError) do + @admin.create_class(domain, "klassy", 1) + end + + @admin.update_class(domain, "klassy", + :mindevcount => 1, :replpolicy => "MultipleHosts(1)") + + tmp = nil + yield_for_monitor_update do + tmp = @admin.get_domains[domain]["klassy"] + break if tmp && tmp["replpolicy"] == "MultipleHosts(1)" + end + assert tmp, "domain did not show up" + assert_equal 1, tmp["mindevcount"] + assert_equal "MultipleHosts(1)", tmp["replpolicy"] + @admin.update_class(domain, "klassy", 2) + ensure + @admin.delete_class(domain, "klassy") rescue nil + end + + def test_device_file_add + add_host_device_domain + 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 end diff --git a/test/test_mogilefs_integration.rb b/test/test_mogilefs_integration.rb index 3c79308..6d16cd7 100644 --- a/test/test_mogilefs_integration.rb +++ b/test/test_mogilefs_integration.rb @@ -1,12 +1,16 @@ # -*- encoding: binary -*- -require './test/integration' +require './test/fresh' -class TestMogileFSIntegration < TestMogIntegration +class TestMogileFSIntegration < Test::Unit::TestCase + include TestFreshSetup def setup - super + setup_mogilefs + add_host_device_domain @client = MogileFS::MogileFS.new(:hosts => @trackers, :domain => @domain) end + alias teardown teardown_mogilefs + def test_CRUD assert ! @client.exist?("CRUD") assert_equal 4, @client.store_content("CRUD", "default", "DATA") @@ -157,9 +161,14 @@ class TestMogileFSIntegration < TestMogIntegration end end - # TODO: move this to a fresh instance def test_admin_each_fid admin = MogileFS::Admin.new(:hosts => @trackers) + input = %w(a b c d e) + input.each do |k| + rv = @client.new_file(k) + rv.write(k) + assert_nil rv.close + end seen = {} count = admin.each_fid do |info| seen[info["fid"]] = true @@ -171,7 +180,8 @@ class TestMogileFSIntegration < TestMogIntegration assert_kind_of String, info["domain"] end assert_equal count, seen.size - end if ENV["TEST_EXPENSIVE"] + assert_equal count, input.size + end def test_new_file_no_block rv = @client.new_file("no_block") diff --git a/test/test_mogilefs_integration_large_pipe.rb b/test/test_mogilefs_integration_large_pipe.rb index 49b9397..16f6d58 100644 --- a/test/test_mogilefs_integration_large_pipe.rb +++ b/test/test_mogilefs_integration_large_pipe.rb @@ -1,10 +1,12 @@ # -*- encoding: binary -*- -require './test/integration' +require './test/fresh' require "digest/sha1" -class TestMogileFSLargePipe< TestMogIntegration +class TestMogileFSLargePipe < Test::Unit::TestCase + include TestFreshSetup def setup - super + setup_mogilefs + add_host_device_domain @client = MogileFS::MogileFS.new(:hosts => @trackers, :domain => @domain) end diff --git a/test/test_mogilefs_integration_list_keys.rb b/test/test_mogilefs_integration_list_keys.rb index 1de6cda..8492a2a 100644 --- a/test/test_mogilefs_integration_list_keys.rb +++ b/test/test_mogilefs_integration_list_keys.rb @@ -1,10 +1,12 @@ - # -*- encoding: binary -*- -require './test/integration' +require './test/fresh' + +class TestMogileFSIntegrationListKeys < Test::Unit::TestCase + include TestFreshSetup -class TestMogileFSIntegrationListKeys < TestMogIntegration def setup - super + setup_mogilefs + add_host_device_domain @client = MogileFS::MogileFS.new(:hosts => @trackers, :domain => @domain) end diff --git a/test/test_mogtool_bigfile.rb b/test/test_mogtool_bigfile.rb index e424def..01de78e 100644 --- a/test/test_mogtool_bigfile.rb +++ b/test/test_mogtool_bigfile.rb @@ -1,5 +1,5 @@ # -*- encoding: binary -*- -require "./test/integration" +require "./test/fresh" require "net/http" ok = true unless File.executable?(`which mogtool 2>/dev/null`.strip) @@ -7,7 +7,8 @@ unless File.executable?(`which mogtool 2>/dev/null`.strip) ok = false end -class TestMogtoolBigfile < TestMogIntegration +class TestMogtoolBigfile < Test::Unit::TestCase + include TestFreshSetup buf = File.open("/dev/urandom") { |fp| fp.read(1024) } buf *= 1024 RAND = Tempfile.new("rand") @@ -18,7 +19,8 @@ class TestMogtoolBigfile < TestMogIntegration RAND_SHA1 = sha1.hexdigest def setup - super + setup_mogilefs + add_host_device_domain RAND.rewind @big_uuid = "big-#{uuid}" @client = MogileFS::MogileFS.new(:hosts => @trackers, :domain => @domain) -- cgit v1.2.3-24-ge0c7