diff --git a/t/05-scheduler-full.t b/t/05-scheduler-full.t index 47fce181ceb..320adfbcff6 100644 --- a/t/05-scheduler-full.t +++ b/t/05-scheduler-full.t @@ -35,7 +35,7 @@ use OpenQA::Test::Utils qw( create_webapi setup_share_dir create_websocket_server stop_service unstable_worker unresponsive_worker broken_worker rejective_worker - wait_for + wait_for simulate_load ); use OpenQA::Test::TimeLimit '150'; @@ -45,11 +45,7 @@ plan skip_all => "set FULLSTACK=1 (be careful)" unless $ENV{FULLSTACK}; setup_mojo_app_with_default_worker_timeout; OpenQA::Setup::read_config(OpenQA::App->singleton); -# fake "/proc/loadavg" to ensure the test works under a heavy load -my $load_avg_file = tempfile('worker-overall-load-avg-XXXXX'); -my $load_avg_file_realpath = $load_avg_file->realpath; -$load_avg_file->spew('0.93 0.95 3.25 2/2207 1212'); -$ENV{OPENQA_LOAD_AVG_FILE} = $load_avg_file_realpath; +my $load_avg_file = simulate_load('0.93 0.95 3.25 2/2207 1212', '05-scheduler-full'); # setup directories and database my $tempdir = setup_fullstack_temp_dir('scheduler'); diff --git a/t/24-worker-overall.t b/t/24-worker-overall.t index 6786e9957a3..94424e8ab3f 100755 --- a/t/24-worker-overall.t +++ b/t/24-worker-overall.t @@ -9,6 +9,7 @@ use FindBin; use lib "$FindBin::Bin/lib", "$FindBin::Bin/../external/os-autoinst-common/lib"; use Mojo::Base -signatures; use OpenQA::Test::TimeLimit '10'; +use OpenQA::Test::Utils qw(simulate_load); use Data::Dumper; use Mojo::File qw(tempdir tempfile path); use Mojo::Util 'scope_guard'; @@ -28,11 +29,7 @@ $ENV{OPENQA_CONFIG} = "$FindBin::Bin/data/24-worker-overall"; # file specified via OPENQA_LOGFILE instead of stdout/stderr. $ENV{OPENQA_LOGFILE} = undef; -# fake "/proc/loadavg" -my $load_avg_file = tempfile('worker-overall-load-avg-XXXXX'); -my $load_avg_file_realpath = $load_avg_file->realpath; -$load_avg_file->spew('0.93 0.95 10.25 2/2207 1212'); -$ENV{OPENQA_LOAD_AVG_FILE} = $load_avg_file_realpath; +my $load_avg_file = simulate_load('0.93 0.95 10.25 2/2207 1212', 'worker-overall-load-avg'); # define fake isotovideo { @@ -825,7 +822,7 @@ qr/Job 42 from some-host finished - reason: done.*A QEMU instance using.*Skippin like $worker->current_error, qr/load 10\.25.*exceeding.*10/, 'error shows current load and threshold'; # assume the error is gone - $load_avg_file_realpath->remove; + $load_avg_file->remove; combined_like { is $worker->status->{status}, 'free', 'worker is free to take another job' } qr/unable to determine average load/i, 'warning about not being able to detect average load logged'; is $worker->current_error, undef, 'current error is cleared by the querying the status'; diff --git a/t/43-scheduling-and-worker-scalability.t b/t/43-scheduling-and-worker-scalability.t index d5607813851..72a0f681440 100644 --- a/t/43-scheduling-and-worker-scalability.t +++ b/t/43-scheduling-and-worker-scalability.t @@ -20,10 +20,10 @@ use OpenQA::Utils qw(service_port); require OpenQA::Test::Database; use OpenQA::Jobs::Constants; use OpenQA::Log qw(setup_log); -use OpenQA::Test::Utils - qw(mock_service_ports setup_mojo_app_with_default_worker_timeout), - qw(create_user_for_workers create_webapi create_websocket_server), - qw(stop_service setup_fullstack_temp_dir); +use OpenQA::Test::Utils qw( + mock_service_ports setup_mojo_app_with_default_worker_timeout + create_user_for_workers create_webapi create_websocket_server + stop_service setup_fullstack_temp_dir simulate_load); use OpenQA::Test::TimeLimit '20'; use OpenQA::Utils 'testcasedir'; @@ -41,11 +41,7 @@ BEGIN { setup_mojo_app_with_default_worker_timeout; OpenQA::Setup::read_config(OpenQA::App->singleton); -# fake "/proc/loadavg" to ensure the test works under a heavy load -my $load_avg_file = tempfile('worker-overall-load-avg-XXXXX'); -my $load_avg_file_realpath = $load_avg_file->realpath; -$load_avg_file->spew('0.93 0.95 3.25 2/2207 1212'); -$ENV{OPENQA_LOAD_AVG_FILE} = $load_avg_file_realpath; +my $load_avg_file = simulate_load('0.93 0.95 3.25 2/2207 1212', '43-scheduling-and-worker-scalability'); # read number of workers to spawn from environment variable; skip test entirely if variable not present # similar to other fullstack tests diff --git a/t/lib/OpenQA/Test/Utils.pm b/t/lib/OpenQA/Test/Utils.pm index 655bd7417f5..8af8a3c93d1 100644 --- a/t/lib/OpenQA/Test/Utils.pm +++ b/t/lib/OpenQA/Test/Utils.pm @@ -47,15 +47,16 @@ BEGIN { } our (@EXPORT, @EXPORT_OK); -@EXPORT_OK = ( - qw(mock_service_ports setup_mojo_app_with_default_worker_timeout), - qw(redirect_output create_user_for_workers), - qw(create_webapi create_websocket_server create_scheduler create_live_view_handler), - qw(unresponsive_worker broken_worker rejective_worker setup_share_dir setup_fullstack_temp_dir run_gru_job), - qw(stop_service start_worker unstable_worker fake_asset_server), - qw(cache_minion_worker cache_worker_service shared_hash embed_server_for_testing), - qw(run_cmd test_cmd wait_for wait_for_or_bail_out perform_minion_jobs), - qw(prepare_clean_needles_dir prepare_default_needle mock_io_loop assume_all_assets_exist schedule_iso) +@EXPORT_OK = qw( + mock_service_ports setup_mojo_app_with_default_worker_timeout + redirect_output create_user_for_workers + create_webapi create_websocket_server create_scheduler create_live_view_handler + unresponsive_worker broken_worker rejective_worker setup_share_dir setup_fullstack_temp_dir run_gru_job + stop_service start_worker unstable_worker fake_asset_server + cache_minion_worker cache_worker_service shared_hash embed_server_for_testing + run_cmd test_cmd wait_for wait_for_or_bail_out perform_minion_jobs + prepare_clean_needles_dir prepare_default_needle mock_io_loop assume_all_assets_exist schedule_iso + simulate_load ); # The function OpenQA::Utils::service_port method hardcodes ports in a @@ -667,4 +668,13 @@ sub schedule_iso ($t, $args, $status = 200, $query_params = {}, $msg = undef) { $t->post_ok(Mojo::URL->new('/api/v1/isos')->query($query_params), form => $args)->status_is($status, $msg)->tx->res; } +sub simulate_load ($load, $from) { + # fake "/proc/loadavg" + my $load_avg_file = tempfile("$from-XXXXX"); + my $load_avg_file_realpath = $load_avg_file->realpath; + $load_avg_file->spew($load); + $ENV{OPENQA_LOAD_AVG_FILE} = $load_avg_file_realpath; + return $load_avg_file_realpath; +} + 1;