Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package os-autoinst for openSUSE:Factory checked in at 2026-07-01 16:37:55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/os-autoinst (Old) and /work/SRC/openSUSE:Factory/.os-autoinst.new.11887 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "os-autoinst" Wed Jul 1 16:37:55 2026 rev:608 rq:1362723 version:5.1782828634.82ceeb1 Changes: -------- --- /work/SRC/openSUSE:Factory/os-autoinst/os-autoinst.changes 2026-06-30 15:15:09.603552731 +0200 +++ /work/SRC/openSUSE:Factory/.os-autoinst.new.11887/os-autoinst.changes 2026-07-01 16:38:36.525176798 +0200 @@ -1,0 +2,11 @@ +Tue Jun 30 14:10:43 UTC 2026 - [email protected] + +- Update to version 5.1782828634.82ceeb1: + * docs: document testing custom os-autoinst forks within openQA + * fix: mmapi test failures and infinite loop hangs + * feat: Also output module information for wait_serial result steps + * feat: Add module name and step number to autoinst-log + * feat: Log the CASEDIR git url/hash for easy frontend access + * fix: exclude virt-firmware on older Leap ppc64 + +------------------------------------------------------------------- Old: ---- os-autoinst-5.1782809557.0ae98f8.obscpio New: ---- os-autoinst-5.1782828634.82ceeb1.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ os-autoinst-devel-test.spec ++++++ --- /var/tmp/diff_new_pack.gJPC1K/_old 2026-07-01 16:38:43.389415716 +0200 +++ /var/tmp/diff_new_pack.gJPC1K/_new 2026-07-01 16:38:43.389415716 +0200 @@ -18,7 +18,7 @@ %define short_name os-autoinst-devel Name: %{short_name}-test -Version: 5.1782809557.0ae98f8 +Version: 5.1782828634.82ceeb1 Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ os-autoinst-openvswitch-test.spec ++++++ --- /var/tmp/diff_new_pack.gJPC1K/_old 2026-07-01 16:38:43.441417525 +0200 +++ /var/tmp/diff_new_pack.gJPC1K/_new 2026-07-01 16:38:43.441417525 +0200 @@ -19,7 +19,7 @@ %define name_ext -test %define short_name os-autoinst-openvswitch Name: %{short_name}%{?name_ext} -Version: 5.1782809557.0ae98f8 +Version: 5.1782828634.82ceeb1 Release: 0 Summary: test package for %{short_name} License: GPL-2.0-or-later ++++++ os-autoinst-test.spec ++++++ --- /var/tmp/diff_new_pack.gJPC1K/_old 2026-07-01 16:38:43.505419753 +0200 +++ /var/tmp/diff_new_pack.gJPC1K/_new 2026-07-01 16:38:43.509419892 +0200 @@ -19,7 +19,7 @@ %define name_ext -test %define short_name os-autoinst Name: %{short_name}%{?name_ext} -Version: 5.1782809557.0ae98f8 +Version: 5.1782828634.82ceeb1 Release: 0 Summary: test package for os-autoinst License: GPL-2.0-or-later ++++++ os-autoinst.spec ++++++ --- /var/tmp/diff_new_pack.gJPC1K/_old 2026-07-01 16:38:43.569421981 +0200 +++ /var/tmp/diff_new_pack.gJPC1K/_new 2026-07-01 16:38:43.573422120 +0200 @@ -17,7 +17,7 @@ Name: os-autoinst -Version: 5.1782809557.0ae98f8 +Version: 5.1782828634.82ceeb1 Release: 0 Summary: OS-level test automation License: GPL-2.0-or-later ++++++ os-autoinst-5.1782809557.0ae98f8.obscpio -> os-autoinst-5.1782828634.82ceeb1.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1782809557.0ae98f8/lockapi.pm new/os-autoinst-5.1782828634.82ceeb1/lockapi.pm --- old/os-autoinst-5.1782809557.0ae98f8/lockapi.pm 2026-06-30 10:52:37.000000000 +0200 +++ new/os-autoinst-5.1782828634.82ceeb1/lockapi.pm 2026-06-30 16:10:34.000000000 +0200 @@ -22,20 +22,20 @@ sub _try_lock ($type, $name, $param) { my $log_ctx = "acquiring $type '$name'"; my %expected_return_codes = (200 => 1, 409 => 1, 410 => 1); - my $actual_return_code; for (1 .. RETRY_COUNT) { my $tx = api_call_2(post => "$type/$name", $param, \%expected_return_codes); - $actual_return_code = $tx->res->code; - last unless mmapi::handle_api_error($tx, $log_ctx, \%expected_return_codes); - last unless ($actual_return_code // 0) == 410; + my $code = $tx->res->code; + if (mmapi::handle_api_error($tx, $log_ctx, \%expected_return_codes)) { + return undef if !$code; + return 0; + } + return 1 if $code == 200; + return 0 if $code == 409; + bmwqemu::fctinfo("Retry $_ of " . RETRY_COUNT); # uncoverable statement sleep RETRY_INTERVAL; # uncoverable statement } - if ($actual_return_code) { - return 1 if $actual_return_code == 200; - bmwqemu::mydie "$log_ctx: lock owner already finished" if $actual_return_code == 410; - } - return 0; + bmwqemu::mydie "$log_ctx: lock owner already finished"; } sub _lock_action ($name, $where = undef) { @@ -72,6 +72,7 @@ while (1) { my $res = _lock_action($name, $where); return 1 if $res; + bmwqemu::mydie("mutex lock '$name' failed due to connection error") unless defined $res; bmwqemu::diag("mutex lock '$name' unavailable, sleeping " . POLL_INTERVAL . ' seconds'); # uncoverable statement sleep POLL_INTERVAL; # uncoverable statement } @@ -80,7 +81,7 @@ sub mutex_try_lock ($name, $where = undef, @) { bmwqemu::mydie('missing lock name') unless $name; bmwqemu::diag("mutex try lock '$name'"); - return _lock_action($name, $where); + return _lock_action($name, $where) // 0; } sub mutex_unlock ($name, $where = undef) { @@ -123,7 +124,7 @@ sub barrier_try_wait ($name, $where = undef, @) { bmwqemu::mydie('missing barrier name') unless $name; bmwqemu::diag("barrier try wait '$name'"); - return _wait_action($name, $where); + return _wait_action($name, $where) // 0; } sub barrier_wait (@args) { @@ -142,6 +143,7 @@ _log $name, where => $where, amend => time - $start; return 1; } + bmwqemu::mydie("barrier '$name' wait failed due to connection error") unless defined $res; my $poll_interval = POLL_INTERVAL; if ($timeout != -1) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1782809557.0ae98f8/t/30-mmapi.t new/os-autoinst-5.1782828634.82ceeb1/t/30-mmapi.t --- old/os-autoinst-5.1782809557.0ae98f8/t/30-mmapi.t 2026-06-30 10:52:37.000000000 +0200 +++ new/os-autoinst-5.1782828634.82ceeb1/t/30-mmapi.t 2026-06-30 16:10:34.000000000 +0200 @@ -47,16 +47,27 @@ } # test without a server -subtest 'mmapi: server not reachable' => sub { - combined_like { is_deeply call($_), undef, "undef returned ($_)" } qr/Connection error/, "error logged ($_)" for (qw(mmapi::get_children)); - is_deeply \@recorded_info, [], 'no info recorded' or always_explain \@recorded_info; -}; +{ + my $ua_mock = Test::MockModule->new('Mojo::UserAgent'); + $ua_mock->redefine(start => sub ($self, $tx, @args) { + $tx->res->code(0)->error({message => 'Connection refused', code => 0}); + return $tx; + }); + + subtest 'mmapi: server not reachable' => sub { + combined_like { is_deeply call($_), undef, "undef returned ($_)" } qr/Connection error/, "error logged ($_)" for (qw(mmapi::get_children)); + is_deeply \@recorded_info, [], 'no info recorded' or always_explain \@recorded_info; + }; -subtest 'lockapi: server not reachable' => sub { - combined_like { is call($_, qw(name where info)), 0, "zero returned $_" } qr/Connection error/, "error logged ($_)" - for (qw(lockapi::mutex_create lockapi::mutex_try_lock lockapi::barrier_create lockapi::barrier_try_wait)); - is_deeply \@recorded_info, [], 'no info recorded' or always_explain \@recorded_info; -}; + subtest 'lockapi: server not reachable' => sub { + combined_like { is call($_, qw(name where info)), 0, "zero returned $_" } qr/Connection error/, "error logged ($_)" + for (qw(lockapi::mutex_create lockapi::mutex_try_lock lockapi::barrier_create lockapi::barrier_try_wait)); + combined_like { throws_ok { lockapi::mutex_lock('name') } qr/mydie/, 'mutex_lock throws on connection error'; } qr/failed due to connection error/, 'mutex_lock logs error'; + combined_like { throws_ok { lockapi::barrier_wait({name => 'name'}) } qr/mydie/, 'barrier_wait throws on connection error'; } qr/failed due to connection error/, 'barrier_wait logs error'; + is_deeply \@recorded_info, [['Paused', 'Wait for name (on parent job)']], 'info recorded' or always_explain \@recorded_info; + @recorded_info = (); + }; +} # setup a fake server my $mock_srv = Mojolicious->new; @@ -64,7 +75,7 @@ message => sub ($log, $level, @lines) { note "[$level] " . join "\n", @lines, ''; }); -$mock_srv->helper(render_mutex => sub ($self, %) { +$mock_srv->helper(render_mutex => sub ($self, %args) { my $name = $self->param('name') // ''; return $self->render(status => 200, text => 'ok') if $name eq 'lucky_lock'; return $self->render(status => 404, text => 'error') if $name eq 'prone_lock'; ++++++ os-autoinst.obsinfo ++++++ --- /var/tmp/diff_new_pack.gJPC1K/_old 2026-07-01 16:38:49.749637090 +0200 +++ /var/tmp/diff_new_pack.gJPC1K/_new 2026-07-01 16:38:49.781638204 +0200 @@ -1,5 +1,5 @@ name: os-autoinst -version: 5.1782809557.0ae98f8 -mtime: 1782809557 -commit: 0ae98f87a1675ecc971059b72eb581a02863dd22 +version: 5.1782828634.82ceeb1 +mtime: 1782828634 +commit: 82ceeb196868792e4909df47e120dedee69c8973
