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-04-28 11:54:30 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/os-autoinst (Old) and /work/SRC/openSUSE:Factory/.os-autoinst.new.11940 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "os-autoinst" Tue Apr 28 11:54:30 2026 rev:591 rq:1349013 version:5.1776943886.0619ca6 Changes: -------- --- /work/SRC/openSUSE:Factory/os-autoinst/os-autoinst.changes 2026-04-23 17:10:23.807031023 +0200 +++ /work/SRC/openSUSE:Factory/.os-autoinst.new.11940/os-autoinst.changes 2026-04-28 11:55:44.903951355 +0200 @@ -2 +2 @@ -Wed Apr 22 13:24:48 UTC 2026 - [email protected] +Thu Apr 23 11:31:58 UTC 2026 - [email protected] @@ -4 +4,2 @@ -- Update to version 5.1776864280.4119300: +- Update to version 5.1776943886.0619ca6: + * feat: add absolute storage threshold to prevent over-conservative aborts @@ -9 +9,0 @@ - * fix(spec): prevent unstable OBS check failures on 28-signalblocker.t @@ -10,0 +11,12 @@ + +------------------------------------------------------------------- +Tue Apr 21 09:52:15 UTC 2026 - [email protected] + +- Update to version 5.1776765124.5d91657: + * feat: fail explicitly if always_rollback is not supported + * feat: add unique hash to pretty serial markers + * feat: include executed command in step details and serial markers + * docs: explain assert_screen semantics with multiple tags + * feat(debugviewer): Move to /usr/lib + * feat(snd2png): Move to /usr/lib + * feat: Prefer modules in CASEDIR/lib over test module paths Old: ---- os-autoinst-5.1776864280.4119300.obscpio New: ---- os-autoinst-5.1776943886.0619ca6.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ os-autoinst-devel-test.spec ++++++ --- /var/tmp/diff_new_pack.MPRsSB/_old 2026-04-28 11:55:46.043999184 +0200 +++ /var/tmp/diff_new_pack.MPRsSB/_new 2026-04-28 11:55:46.043999184 +0200 @@ -18,7 +18,7 @@ %define short_name os-autoinst-devel Name: %{short_name}-test -Version: 5.1776864280.4119300 +Version: 5.1776943886.0619ca6 Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ os-autoinst-openvswitch-test.spec ++++++ --- /var/tmp/diff_new_pack.MPRsSB/_old 2026-04-28 11:55:46.084000862 +0200 +++ /var/tmp/diff_new_pack.MPRsSB/_new 2026-04-28 11:55:46.088001030 +0200 @@ -19,7 +19,7 @@ %define name_ext -test %define short_name os-autoinst-openvswitch Name: %{short_name}%{?name_ext} -Version: 5.1776864280.4119300 +Version: 5.1776943886.0619ca6 Release: 0 Summary: test package for %{short_name} License: GPL-2.0-or-later ++++++ os-autoinst-test.spec ++++++ --- /var/tmp/diff_new_pack.MPRsSB/_old 2026-04-28 11:55:46.128002709 +0200 +++ /var/tmp/diff_new_pack.MPRsSB/_new 2026-04-28 11:55:46.128002709 +0200 @@ -19,7 +19,7 @@ %define name_ext -test %define short_name os-autoinst Name: %{short_name}%{?name_ext} -Version: 5.1776864280.4119300 +Version: 5.1776943886.0619ca6 Release: 0 Summary: test package for os-autoinst License: GPL-2.0-or-later ++++++ os-autoinst.spec ++++++ --- /var/tmp/diff_new_pack.MPRsSB/_old 2026-04-28 11:55:46.180004890 +0200 +++ /var/tmp/diff_new_pack.MPRsSB/_new 2026-04-28 11:55:46.184005058 +0200 @@ -17,7 +17,7 @@ Name: os-autoinst -Version: 5.1776864280.4119300 +Version: 5.1776943886.0619ca6 Release: 0 Summary: OS-level test automation License: GPL-2.0-or-later ++++++ os-autoinst-5.1776864280.4119300.obscpio -> os-autoinst-5.1776943886.0619ca6.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1776864280.4119300/bmwqemu.pm new/os-autoinst-5.1776943886.0619ca6/bmwqemu.pm --- old/os-autoinst-5.1776864280.4119300/bmwqemu.pm 2026-04-22 15:24:40.000000000 +0200 +++ new/os-autoinst-5.1776943886.0619ca6/bmwqemu.pm 2026-04-23 13:31:26.000000000 +0200 @@ -78,6 +78,7 @@ MIB => 1024 * 1024, GIB => 1024 * 1024 * 1024, STORAGE_KEEP_FREE_RATIO => $ENV{OS_AUTOINST_STORAGE_KEEP_FREE_RATIO} // .2, + STORAGE_KEEP_FREE_GB => $ENV{OS_AUTOINST_STORAGE_KEEP_FREE_GB} // 50, }; # Write a JSON representation of the process termination to disk @@ -182,7 +183,10 @@ return warn "Could not determine available storage space\n" unless defined $total_storage; my $requested_bytes = $total_hdd_size_gb * GIB; my $min_free_bytes = $total_storage * $keep_free; - return undef if $requested_bytes <= $available - $min_free_bytes; + my $keep_free_gb = $vars{STORAGE_KEEP_FREE_GB} // STORAGE_KEEP_FREE_GB; + my $relative_exceeded = $requested_bytes > $available - $min_free_bytes; + my $absolute_exceeded = $keep_free_gb > 0 && $requested_bytes > $available - ($keep_free_gb * GIB); + return undef unless $relative_exceeded && $absolute_exceeded; my $msg = sprintf 'Not enough storage for requested HDDSIZEGB (requested %d GiB, available %d GiB, total %d GiB, keep-free %d%%)', $total_hdd_size_gb, int($available / GIB), int($total_storage / GIB), int($keep_free * 100); serialize_state(result => 'incomplete', msg => $msg); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1776864280.4119300/doc/backend_vars.md new/os-autoinst-5.1776943886.0619ca6/doc/backend_vars.md --- old/os-autoinst-5.1776864280.4119300/doc/backend_vars.md 2026-04-22 15:24:40.000000000 +0200 +++ new/os-autoinst-5.1776943886.0619ca6/doc/backend_vars.md 2026-04-23 13:31:26.000000000 +0200 @@ -61,6 +61,7 @@ | ENABLE_MODERN_PERL_FEATURES | boolean | 0 | Enables use of modern Perl features in test modules avoiding the need to use e.g. `use Mojo::Base 'basetest', -signatures;` in all test modules. This variable must be set before invoking `autotest::loadtest`. It only applies to the test modules themselves. It does *not* apply to e.g. `main.pm` and other Perl modules used via e.g. `use some::module`. | | _HIDE_SECRETS_REGEX | string | | If set, any test variables whose **NAME** (key) matches the specified regular expression, in addition to the default '^_SECRET_' and '_PASSWORD', are excluded from being saved into vars.json or further processing. For example, to hide all variables starting with 'SCC_REGCODE', use '^SCC_REGCODE'. | | STORAGE_KEEP_FREE_RATIO | float | 0.2 | Ratio of total storage space to keep free (e.g. 0.2 for 20%). If the total requested HDD size exceeds the available space while keeping this ratio of total storage size free, the job is aborted early with "incomplete" status. Set to 0 to disable this check. | +| STORAGE_KEEP_FREE_GB | integer | 50 | Absolute free space threshold in GiB. If the total requested HDD size leaves less than this amount of free space, the job can only run if the relative check (`STORAGE_KEEP_FREE_RATIO`) is also satisfied. Set to 0 to disable the absolute threshold. | | FAIL_ON_ALWAYS_ROLLBACK_NOT_SUPPORTED | boolean | 0 | Fail explicitly if a test module is scheduled with the `always_rollback` flag but snapshots are not supported by the backend. | | | diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1776864280.4119300/t/12-bmwqemu.t new/os-autoinst-5.1776943886.0619ca6/t/12-bmwqemu.t --- old/os-autoinst-5.1776864280.4119300/t/12-bmwqemu.t 2026-04-22 15:24:40.000000000 +0200 +++ new/os-autoinst-5.1776943886.0619ca6/t/12-bmwqemu.t 2026-04-23 13:31:26.000000000 +0200 @@ -186,49 +186,42 @@ subtest 'abort on low disk space' => sub { my $bmw_mock = Test::MockModule->new('bmwqemu', no_auto => 1); - $bmw_mock->mock(_get_storage_stats => sub { return (1024**3, 1024**3) }); - - my $dir = "$data_dir/tests"; - unlink bmwqemu::STATE_FILE; - create_vars({CASEDIR => $dir, HDDSIZEGB => 1}); - - throws_ok { - bmwqemu::init; - bmwqemu::ensure_valid_vars(); - } qr/Not enough storage for requested HDDSIZEGB/, 'abort if requested HDDSIZEGB exceeds default threshold'; - - is decode_json(path(bmwqemu::STATE_FILE)->slurp)->{result}, 'incomplete', 'serialized result is incomplete'; - - $bmw_mock->mock(_get_storage_stats => sub { return (100 * 1024**3, 100 * 1024**3) }); - unlink bmwqemu::STATE_FILE; - lives_ok { - bmwqemu::init; - bmwqemu::ensure_valid_vars(); - } 'succeed if requested HDDSIZEGB is well within available space'; - - unlink bmwqemu::STATE_FILE; - create_vars({CASEDIR => $dir, HDDSIZEGB => 1, STORAGE_KEEP_FREE_RATIO => 0.9}); - $bmw_mock->mock(_get_storage_stats => sub { return (5 * 1024**3, 5 * 1024**3) }); - throws_ok { - bmwqemu::init; - bmwqemu::ensure_valid_vars(); - } qr/keep-free 90%/, 'abort if requested HDDSIZEGB exceeds custom threshold'; - - unlink bmwqemu::STATE_FILE; - create_vars({CASEDIR => $dir, HDDSIZEGB => 1, STORAGE_KEEP_FREE_RATIO => 0}); - $bmw_mock->mock(_get_storage_stats => sub { return (1024**3, 100 * 1024**2) }); - lives_ok { - bmwqemu::init(); - bmwqemu::ensure_valid_vars(); - } 'succeed if requested HDDSIZEGB exceeds available space but ratio is 0'; - - unlink bmwqemu::STATE_FILE; - create_vars({CASEDIR => $dir}); # No HDDSIZEGB, uses default 10GB - $bmw_mock->mock(_get_storage_stats => sub { return (100 * 1024**3, 100 * 1024**3) }); - lives_ok { - bmwqemu::init(); - bmwqemu::ensure_valid_vars(); - } 'succeed with default HDDSIZEGB'; + my @cases = ( + {hdd_size_gb => 1, total_storage => 100, avail_storage => 10, expect => 'fail', + desc => 'abort if requested HDDSIZEGB exceeds default threshold (1GB requested with 10GB avail on 100GB disk)'}, + {hdd_size_gb => 10, total_storage => 100, avail_storage => 100, expect => 'pass', + desc => 'succeed if requested HDDSIZEGB is well within available space'}, + {hdd_size_gb => 60, total_storage => 5, avail_storage => 5, expect => 'fail', extra_vars => {STORAGE_KEEP_FREE_RATIO => 0.9}, + desc => 'abort if requested HDDSIZEGB exceeds custom threshold'}, + {hdd_size_gb => 1, total_storage => 1, avail_storage => 0.1, expect => 'pass', extra_vars => {STORAGE_KEEP_FREE_RATIO => 0}, + desc => 'succeed if requested HDDSIZEGB exceeds available space but ratio is 0'}, + {total_storage => 100, avail_storage => 100, expect => 'pass', + desc => 'succeed with default HDDSIZEGB'}, + {hdd_size_gb => 20, total_storage => 1000, avail_storage => 200, expect => 'pass', + desc => 'passes if only relative threshold exceeded but leaves > 50GB free (e.g. 20GB requested on 1000GB disk with 200GB avail)'}, + {hdd_size_gb => 160, total_storage => 1000, avail_storage => 200, expect => 'fail', + desc => 'large job fails when both relative and default 50GB absolute thresholds exceeded'}, + {hdd_size_gb => 160, total_storage => 1000, avail_storage => 500, expect => 'pass', + desc => 'large job passes when sufficient absolute storage available'}, + {hdd_size_gb => 50, total_storage => 100, avail_storage => 60, expect => 'fail', + desc => 'fails if both relative and absolute thresholds exceeded (e.g. 50GB requested on 100GB disk with 60GB avail leaves 10GB free)'}, + {hdd_size_gb => 50, total_storage => 100, avail_storage => 60, expect => 'pass', extra_vars => {STORAGE_KEEP_FREE_GB => 0}, + desc => 'passes if both thresholds would be exceeded but absolute threshold is disabled via 0'}, + ); + for my $case (@cases) { + unlink bmwqemu::STATE_FILE; + my %vars = (CASEDIR => "$data_dir/tests", %{$case->{extra_vars} // {}}); + $vars{HDDSIZEGB} = $case->{hdd_size_gb} if defined $case->{hdd_size_gb}; + create_vars(\%vars); + $bmw_mock->mock(_get_storage_stats => sub (@) { ($case->{total_storage} * 1024**3, $case->{avail_storage} * 1024**3) }); + if ($case->{expect} eq 'pass') { + lives_ok { bmwqemu::init(); bmwqemu::ensure_valid_vars(); } $case->{desc}; + } + else { + throws_ok { bmwqemu::init(); bmwqemu::ensure_valid_vars(); } qr/Not enough storage for requested HDDSIZEGB/, $case->{desc}; + is decode_json(path(bmwqemu::STATE_FILE)->slurp)->{result}, 'incomplete', "serialized result is incomplete for: $case->{desc}"; + } + } }; subtest '_get_storage_stats' => sub { ++++++ os-autoinst.obsinfo ++++++ --- /var/tmp/diff_new_pack.MPRsSB/_old 2026-04-28 11:55:49.176130589 +0200 +++ /var/tmp/diff_new_pack.MPRsSB/_new 2026-04-28 11:55:49.184130925 +0200 @@ -1,5 +1,5 @@ name: os-autoinst -version: 5.1776864280.4119300 -mtime: 1776864280 -commit: 411930079c2988d5602e92036a130fc0d6496820 +version: 5.1776943886.0619ca6 +mtime: 1776943886 +commit: 0619ca6d84bded836782df071cfa1de4a96c6f3c
