test/acceptance/general_test.rb in xli-dtr-0.0.5 vs test/acceptance/general_test.rb in xli-dtr-1.0.0

- old
+ new

@@ -3,204 +3,186 @@ include DTR::AgentHelper class GeneralTest < Test::Unit::TestCase def setup - #start_agents first for test files loaded would be copied into sub processes start_agents - # put these here for we don't want run them in current process - @pwd = Dir.pwd - Dir.chdir(File.expand_path(File.dirname(__FILE__) + "/../../testdata/")) - require 'a_test_case' - require 'a_test_case2' - require 'a_failed_test_case' - require 'an_error_test_case' - require 'a_file_system_test_case' - require 'scenario_test_case' - require 'setup_agent_env_test_case' - - DTR.inject end def teardown - DTR.reject - Dir.chdir(@pwd) stop_agents - $argv_dup = nil end def test_run_test_passed - $argv_dup = ['a_test_case.rb', 'a_test_case2.rb', 'a_file_system_test_case.rb'] - suite = Test::Unit::TestSuite.new('run_test_passed') - suite << ATestCase.suite - suite << ATestCase2.suite - suite << AFileSystemTestCase.suite - assert_fork_process_exits_ok do + $argv_dup = ['a_test_case.rb', 'a_test_case2.rb', 'a_file_system_test_case.rb'] + suite = Test::Unit::TestSuite.new('run_test_passed') + suite << ATestCase.suite + suite << ATestCase2.suite + suite << AFileSystemTestCase.suite @result = runit(suite) assert @result.passed? assert_equal 3, @result.run_count assert_equal 0, @result.failure_count assert_equal 0, @result.error_count end end def test_run_test_failed - $argv_dup = ['a_test_case.rb', 'a_failed_test_case.rb'] - suite = Test::Unit::TestSuite.new('test_run_test_failed') - suite << ATestCase.suite - suite << AFailedTestCase.suite - assert_fork_process_exits_ok do + $argv_dup = ['a_test_case.rb', 'a_failed_test_case.rb'] + suite = Test::Unit::TestSuite.new('test_run_test_failed') + suite << ATestCase.suite + suite << AFailedTestCase.suite @result = runit(suite) assert !@result.passed? assert_equal 2, @result.run_count assert_equal 1, @result.failure_count assert_equal 0, @result.error_count end end def test_run_test_error - $argv_dup = ['a_test_case.rb', 'an_error_test_case.rb'] - suite = Test::Unit::TestSuite.new('test_run_test_error') - suite << ATestCase.suite - suite << AnErrorTestCase.suite - assert_fork_process_exits_ok do + $argv_dup = ['a_test_case.rb', 'an_error_test_case.rb'] + suite = Test::Unit::TestSuite.new('test_run_test_error') + suite << ATestCase.suite + suite << AnErrorTestCase.suite + @result = runit(suite) assert_false @result.passed? assert_equal 2, @result.run_count assert_equal 0, @result.failure_count assert_equal 1, @result.error_count end end def test_run_suite_should_be_independence - $argv_dup = ['an_error_test_case.rb'] - suite = Test::Unit::TestSuite.new('test_run_suite_should_be_independence 1') - suite << AnErrorTestCase.suite - assert_fork_process_exits_ok do + $argv_dup = ['an_error_test_case.rb'] + suite = Test::Unit::TestSuite.new('test_run_suite_should_be_independence 1') + suite << AnErrorTestCase.suite + @result = runit(suite) assert_false @result.passed? assert_equal 1, @result.run_count assert_equal 0, @result.failure_count assert_equal 1, @result.error_count end - $argv_dup = ['a_test_case.rb'] - suite = Test::Unit::TestSuite.new('test_run_suite_should_be_independence 2') - suite << ATestCase.suite - assert_fork_process_exits_ok do + $argv_dup = ['a_test_case.rb'] + suite = Test::Unit::TestSuite.new('test_run_suite_should_be_independence 2') + suite << ATestCase.suite + @result = runit(suite) assert @result.passed? assert_equal 1, @result.run_count assert_equal 0, @result.failure_count assert_equal 0, @result.error_count end end def test_should_ignore_environment_file_not_exists - $argv_dup = ['a_test_case.rb', 'test_file_not_exists.rb'] - suite = Test::Unit::TestSuite.new('test_run_test_file_not_exist') - suite << ATestCase.suite - assert_fork_process_exits_ok do + $argv_dup = ['a_test_case.rb', 'test_file_not_exists.rb'] + suite = Test::Unit::TestSuite.new('test_run_test_file_not_exist') + suite << ATestCase.suite + @result = runit(suite) assert @result.passed? assert_equal 1, @result.run_count assert_equal 0, @result.failure_count assert_equal 0, @result.error_count end end def test_run_empty_test_suite_and_no_test_files_in_environment - $argv_dup = [] - suite = Test::Unit::TestSuite.new('test_run_without_test_files') - assert_fork_process_exits_ok do + $argv_dup = [] + suite = Test::Unit::TestSuite.new('test_run_without_test_files') + @result = runit(suite) assert @result.passed? assert_equal 0, @result.run_count assert_equal 0, @result.failure_count assert_equal 0, @result.error_count end end def test_run_empty_test_suite_should_not_crash_agent - $argv_dup = [] - suite = Test::Unit::TestSuite.new('test_run_empty_test_suite_should_not_crash_agent') - assert_fork_process_exits_ok do + $argv_dup = [] + suite = Test::Unit::TestSuite.new('test_run_empty_test_suite_should_not_crash_agent') + @result = runit(suite) assert @result.passed? assert_equal 0, @result.run_count assert_equal 0, @result.failure_count assert_equal 0, @result.error_count end - $argv_dup = ['a_test_case.rb'] - suite << ATestCase.suite assert_fork_process_exits_ok do + $argv_dup = ['a_test_case.rb'] + suite = Test::Unit::TestSuite.new('test_run_empty_test_suite_should_not_crash_agent') + suite << ATestCase.suite + @result = runit(suite) assert @result.passed? assert_equal 1, @result.run_count assert_equal 0, @result.failure_count assert_equal 0, @result.error_count end end def test_run_empty_test_suite_and_test_files_not_exist_in_environment - $argv_dup = ['test_file_not_exists.rb'] - suite = Test::Unit::TestSuite.new('test_run_empty_test_suite_and_test_files_not_exist_in_environment') - assert_fork_process_exits_ok do + $argv_dup = ['test_file_not_exists.rb'] + suite = Test::Unit::TestSuite.new('test_run_empty_test_suite_and_test_files_not_exist_in_environment') + @result = runit(suite) assert @result.passed? assert_equal 0, @result.run_count assert_equal 0, @result.failure_count assert_equal 0, @result.error_count end end def test_run_test_specified_by_load_path - lib_path = File.expand_path(File.dirname(__FILE__) + '/../../testdata/lib') - $LOAD_PATH.unshift lib_path - require 'lib_test_case' - $argv_dup = ['lib_test_case.rb'] - suite = Test::Unit::TestSuite.new('test_run_test_specified_by_load_path') - suite << LibTestCase.suite - assert_fork_process_exits_ok do + lib_path = File.expand_path(File.dirname(__FILE__) + '/../../testdata/lib') + $LOAD_PATH.unshift lib_path + require 'lib_test_case' + $argv_dup = ['lib_test_case.rb'] + suite = Test::Unit::TestSuite.new('test_run_test_specified_by_load_path') + suite << LibTestCase.suite + @result = runit(suite) assert @result.passed? assert_equal 1, @result.run_count assert_equal 0, @result.failure_count assert_equal 0, @result.error_count end - ensure - $LOAD_PATH.delete lib_path end def test_message_of_errors_and_failures_should_include_runner_host_name - $argv_dup = ['scenario_test_case.rb'] - suite = Test::Unit::TestSuite.new('test_should_wrapper_errors_by_dtr_remote_exception') - suite << ScenarioTestCase.suite - assert_fork_process_exits_ok do + $argv_dup = ['scenario_test_case.rb'] + suite = Test::Unit::TestSuite.new('test_should_wrapper_errors_by_dtr_remote_exception') + suite << ScenarioTestCase.suite + @result = runit(suite) assert !@result.passed? assert_equal 8, @result.run_count assert_equal 3, @result.failure_count @@ -214,40 +196,43 @@ end end end def test_setup_agent_env_from_master_process - $argv_dup = ['setup_agent_env_test_case.rb'] - suite = Test::Unit::TestSuite.new('setup_agent_env_from_master_process') - suite << SetupAgentEnvTestCase.suite - ENV['DTR_AGENT_ENV_SETUP_CMD'] = 'touch /tmp/test_setup_agent_env_from_master_process' assert_fork_process_exits_ok do + $argv_dup = ['setup_agent_env_test_case.rb'] + suite = Test::Unit::TestSuite.new('setup_agent_env_from_master_process') + suite << SetupAgentEnvTestCase.suite + ENV['DTR_AGENT_ENV_SETUP_CMD'] = 'touch /tmp/test_setup_agent_env_from_master_process' + @result = runit(suite) assert @result.passed? assert_equal 1, @result.run_count assert_equal 0, @result.failure_count assert_equal 0, @result.error_count end ensure File.delete('/tmp/test_setup_agent_env_from_master_process') rescue nil - ENV['DTR_AGENT_ENV_SETUP_CMD'] = nil end def test_multi_dtr_tasks_should_be_queued_and_processed_one_by_one - testdata_dir = File.expand_path('./../testdata') - $argv_dup = ['a_test_case.rb', 'a_test_case2.rb', 'a_file_system_test_case.rb'] - suite = Test::Unit::TestSuite.new('run_test_passed') - suite << ATestCase.suite - suite << ATestCase2.suite - suite << AFileSystemTestCase.suite + testdata_dir = File.expand_path(File.dirname(__FILE__) + "/../../testdata/") process_assertion = Proc.new do |master_dir| FileUtils.cp_r testdata_dir, master_dir begin Dir.chdir(master_dir) do - result = runit(suite) - assert result.passed? - assert_equal 3, result.run_count + $argv_dup = ['a_test_case.rb', 'a_test_case2.rb', 'a_file_system_test_case.rb'] + setup_test_env + suite = Test::Unit::TestSuite.new('run_test_passed') + suite << ATestCase.suite + suite << ATestCase2.suite + suite << AFileSystemTestCase.suite + with_agent_helper_group do + result = runit(suite) + assert result.passed? + assert_equal 3, result.run_count + end end ensure FileUtils.rm_rf master_dir end end @@ -267,9 +252,80 @@ assert_equal 0, $?.exitstatus Process.waitpid @test_processes[3] assert_equal 0, $?.exitstatus ensure @test_processes.each do |pid| - Process.kill 'TERM', pid rescue nil + DTR.kill_process pid + end + end + + def test_run_test_case_hacked_run_method + assert_fork_process_exits_ok do + require 'hacked_run_method_test_case' + + $argv_dup = ['hacked_run_method_test_case.rb'] + suite = Test::Unit::TestSuite.new('run_test_case_hacked_run_method') + suite << HackedRunMethodTestCase.suite + + @result = runit(suite) + + assert @result.passed? + assert_equal 1, @result.run_count + assert_equal 0, @result.failure_count + assert_equal 0, @result.error_count + end + end + + def test_should_not_break_heartbeat_of_master_process_when_run_with_a_test_case_sleep_long_time + assert_fork_process_exits_ok do + DTR.configuration.master_heartbeat_interval = 1 + DTR.configuration.follower_listen_heartbeat_timeout = 2 + + require 'sleep_3_secs_test_case' + + $argv_dup = ['sleep_3_secs_test_case.rb'] + suite = Test::Unit::TestSuite.new('run_test_case_sleep_3_secs') + suite << Sleep3SecsTestCase.suite + + @result = runit(suite) + + assert @result.passed? + assert_equal 1, @result.run_count + assert_equal 0, @result.failure_count + assert_equal 0, @result.error_count + end + end + + def test_should_add_meaningful_error_when_runner_get_a_unknown_test + assert_fork_process_exits_ok do + $argv_dup = ['a_failed_test_case.rb'] + suite = Test::Unit::TestSuite.new('should_add_meaningful_error_when_runner_get_a_unknown_test') + suite << ATestCase.suite + + @result = runit(suite) + + assert !@result.passed? + assert_equal 1, @result.run_count + assert_equal 0, @result.failure_count + assert_equal 1, @result.error_count + assert_equal "DTR::RemoteError: DTR::Agent::UnknownTestError from #{Socket.gethostname}: No such test loaded: ATestCase", @result.errors.first.message + end + end + + def test_run_test_timeout + assert_fork_process_exits_ok do + require 'sleep_3_secs_test_case' + $argv_dup = ['sleep_3_secs_test_case.rb'] + suite = Test::Unit::TestSuite.new('run_test_case_sleep_3_secs') + suite << Sleep3SecsTestCase.suite + + ENV['RUN_TEST_TIMEOUT'] = '1' + @result = runit(suite) + + assert !@result.passed? + assert_equal 1, @result.run_count + assert_equal 0, @result.failure_count + assert_equal 1, @result.error_count + assert @result.errors.first.message.include?('Timeout') end end end