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 2025-05-26 18:40:26 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/os-autoinst (Old) and /work/SRC/openSUSE:Factory/.os-autoinst.new.2732 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "os-autoinst" Mon May 26 18:40:26 2025 rev:514 rq:1280102 version:5.1747913329.a855b3a Changes: -------- --- /work/SRC/openSUSE:Factory/os-autoinst/os-autoinst.changes 2025-05-02 15:03:37.064598160 +0200 +++ /work/SRC/openSUSE:Factory/.os-autoinst.new.2732/os-autoinst.changes 2025-05-26 18:41:37.982785011 +0200 @@ -1,0 +2,17 @@ +Thu May 22 11:28:58 UTC 2025 - ok...@suse.com + +- Update to version 5.1747913329.a855b3a: + * t: Catch output in 23-baseclass.t + * ci: Ensure 100% coverage without threshold + * Fix coverage for package statements + * Create link to the common prove_wrapper + * Sync os-autoinst-common with the subrepo external/os-autoinst-common + * Try to increase pipe size for external video encoder + * Avoid warning about uninitialized value + * video_stream: add RGB<->BGR swapping support + * t: fix frame format used in video_stream + * video_stream: use ustreamer --persistent + * tinycv: scale starting search position if size is different + * Avoid sporadic test failures of fullstack test + +------------------------------------------------------------------- Old: ---- os-autoinst-5.1745509934.49afb50.obscpio New: ---- os-autoinst-5.1747913329.a855b3a.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ os-autoinst-devel-test.spec ++++++ --- /var/tmp/diff_new_pack.W8birA/_old 2025-05-26 18:41:39.082831217 +0200 +++ /var/tmp/diff_new_pack.W8birA/_new 2025-05-26 18:41:39.082831217 +0200 @@ -18,7 +18,7 @@ %define short_name os-autoinst-devel Name: %{short_name}-test -Version: 5.1745509934.49afb50 +Version: 5.1747913329.a855b3a Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ os-autoinst-openvswitch-test.spec ++++++ --- /var/tmp/diff_new_pack.W8birA/_old 2025-05-26 18:41:39.110832393 +0200 +++ /var/tmp/diff_new_pack.W8birA/_new 2025-05-26 18:41:39.110832393 +0200 @@ -19,7 +19,7 @@ %define name_ext -test %define short_name os-autoinst-openvswitch Name: %{short_name}%{?name_ext} -Version: 5.1745509934.49afb50 +Version: 5.1747913329.a855b3a Release: 0 Summary: test package for %{short_name} License: GPL-2.0-or-later ++++++ os-autoinst-test.spec ++++++ --- /var/tmp/diff_new_pack.W8birA/_old 2025-05-26 18:41:39.142833737 +0200 +++ /var/tmp/diff_new_pack.W8birA/_new 2025-05-26 18:41:39.146833906 +0200 @@ -19,7 +19,7 @@ %define name_ext -test %define short_name os-autoinst Name: %{short_name}%{?name_ext} -Version: 5.1745509934.49afb50 +Version: 5.1747913329.a855b3a Release: 0 Summary: test package for os-autoinst License: GPL-2.0-or-later ++++++ os-autoinst.spec ++++++ --- /var/tmp/diff_new_pack.W8birA/_old 2025-05-26 18:41:39.178835249 +0200 +++ /var/tmp/diff_new_pack.W8birA/_new 2025-05-26 18:41:39.178835249 +0200 @@ -17,7 +17,7 @@ Name: os-autoinst -Version: 5.1745509934.49afb50 +Version: 5.1747913329.a855b3a Release: 0 Summary: OS-level test automation License: GPL-2.0-or-later ++++++ os-autoinst-5.1745509934.49afb50.obscpio -> os-autoinst-5.1747913329.a855b3a.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1745509934.49afb50/.github/workflows/ci.yml new/os-autoinst-5.1747913329.a855b3a/.github/workflows/ci.yml --- old/os-autoinst-5.1745509934.49afb50/.github/workflows/ci.yml 2025-04-24 17:52:14.000000000 +0200 +++ new/os-autoinst-5.1747913329.a855b3a/.github/workflows/ci.yml 2025-05-22 13:28:49.000000000 +0200 @@ -10,7 +10,7 @@ runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - name: Static checks, unit- and integration tests + - name: Static checks, unit tests and integration tests run: tools/container_run_ci - name: Upload coverage to Codecov uses: codecov/codecov-action@v5 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1745509934.49afb50/backend/baseclass.pm new/os-autoinst-5.1747913329.a855b3a/backend/baseclass.pm --- old/os-autoinst-5.1745509934.49afb50/backend/baseclass.pm 2025-04-24 17:52:14.000000000 +0200 +++ new/os-autoinst-5.1747913329.a855b3a/backend/baseclass.pm 2025-05-22 13:28:49.000000000 +0200 @@ -343,6 +343,16 @@ sub _invoke_video_encoder ($self, $pipe_name, $display_name, @cmd) { my $pid = open($self->{$pipe_name}, '|-', @cmd); my $pipe = $self->{$pipe_name}; + # Try to make pipe big enough to fit full frame at once, instead of sending + # it in several chunks. Limit it to custom resolutions, as with the default + # the impact of sending it in several chunks is not too bad, and default + # Linux's pipe-max-size is too small for 2.3MB size (so it wouldn't work + # without raising the limit anyway). + if ($bmwqemu::vars{XRES} && $bmwqemu::vars{YRES}) { + my $pipe_size = $bmwqemu::vars{XRES} * $bmwqemu::vars{YRES} * 3; + no autodie; + fcntl($pipe, Fcntl::F_SETPIPE_SZ, $pipe_size) or bmwqemu::fctwarn("Can't increase video encoder pipe size to $pipe_size: $!. Consider increasing /proc/sys/fs/pipe-max-size and/or /proc/sys/fs/pipe-user-pages-soft"); + } $self->{video_encoders}->{$pid} = {name => $display_name, pipe => $pipe, cmd => join ' ', @cmd}; $pipe->blocking(!!$bmwqemu::vars{VIDEO_ENCODER_BLOCKING_PIPE}); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1745509934.49afb50/codecov.yml new/os-autoinst-5.1747913329.a855b3a/codecov.yml --- old/os-autoinst-5.1745509934.49afb50/codecov.yml 2025-04-24 17:52:14.000000000 +0200 +++ new/os-autoinst-5.1747913329.a855b3a/codecov.yml 2025-05-22 13:28:49.000000000 +0200 @@ -12,7 +12,7 @@ project: default: target: 100.0 - threshold: 0.1 + threshold: 0 patch: default: branches: null diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1745509934.49afb50/consoles/video_stream.pm new/os-autoinst-5.1747913329.a855b3a/consoles/video_stream.pm --- old/os-autoinst-5.1745509934.49afb50/consoles/video_stream.pm 2025-04-24 17:52:14.000000000 +0200 +++ new/os-autoinst-5.1747913329.a855b3a/consoles/video_stream.pm 2025-05-22 13:28:49.000000000 +0200 @@ -135,16 +135,22 @@ sub _get_ustreamer_cmd ($self, $url, $sink_name) { my $fps = $1 if ($url =~ s/[\?&]fps=([0-9]+)//); - my $format = $1 if ($url =~ s/[\?&]format=([A-Z0-9]+)//); + my $format = $1 if ($url =~ s/[\?&]format=([A-Z0-9]+(swap)?)//); $fps //= 5; $format //= 'UYVY'; - return [ + my $swap = ($format =~ /swap$/); + $format =~ s/swap$//; + my $cmd = [ 'ustreamer', '--device', $url, '-f', $fps, '-m', $format, # specify preferred format '-c', 'NOOP', # do not produce JPEG stream '--raw-sink', $sink_name, '--raw-sink-rm', # raw memsink + '--persistent', # smarter watching for reconnecting HDMI, and since ustreamer 6.0 - necessary for --dv-timings to work '--dv-timings', # enable using DV timings (getting resolution, and reacting to changes) ]; + # workaround for https://github.com/raspberrypi/linux/issues/6068 + push(@$cmd, ('--format-swap-rgb', '1')) if ($swap); + return $cmd; } sub connect_remote_video ($self, $url) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1745509934.49afb50/doc/backend_vars.asciidoc new/os-autoinst-5.1747913329.a855b3a/doc/backend_vars.asciidoc --- old/os-autoinst-5.1745509934.49afb50/doc/backend_vars.asciidoc 2025-04-24 17:52:14.000000000 +0200 +++ new/os-autoinst-5.1747913329.a855b3a/doc/backend_vars.asciidoc 2025-05-22 13:28:49.000000000 +0200 @@ -325,7 +325,7 @@ GENERAL_HW_VNC_DEPTH;integer;16;Color depth for VNC server GENERAL_HW_VNC_JPEG;integer;0;Advertise support for Tight JPEG encoding GENERAL_HW_NO_SERIAL;boolean;;Don't use serial -GENERAL_HW_VIDEO_STREAM_URL;string;;Video stream URL (in ffmpeg's syntax) to receive, for example 'udp://@:5004' or '/dev/video0'. Using 'ustreamer:///dev/videoN' will use ustreamer from PiKVM instead of ffmpeg to read '/dev/videoN'. The URL can have '?fps=..' appended to specify desired FPS to capture with. The URL can also have 'format=' parameter to specify ustream format (default is UYVY, can be also set to BGR24 or RGB24). Ustreamer support requires pack("D") working, which rules out openSUSE 15.5's perl. +GENERAL_HW_VIDEO_STREAM_URL;string;;Video stream URL (in ffmpeg's syntax) to receive, for example 'udp://@:5004' or '/dev/video0'. Using 'ustreamer:///dev/videoN' will use ustreamer from PiKVM instead of ffmpeg to read '/dev/videoN'. The URL can have '?fps=..' appended to specify desired FPS to capture with. The URL can also have 'format=' parameter to specify ustream format (default is UYVY, can be also set to BGR24, RGB24, RGB24swap). Ustreamer support requires pack("D") working, which rules out openSUSE 15.5's perl. GENERAL_HW_VIDEO_CMD_PREFIX;string;;Prefix to prepend to 'ffmpeg' and 'v4l2-ctl' commands, can be used to run them on a different host via SSH. Example: 'ssh root@pikvm'. Note: the value is tokenized on spaces, so avoid their use in command name or any of the parameters. VIDEO_STREAM_PIPE_BUFFER_SIZE;integer;1680*1050*3+20;Buffer containing at least a single PPM frame for video capturing GENERAL_HW_KEYBOARD_URL;string;;URL to keyboard emulation device. eg. 'http://1.2.3.4/cmd' - see https://github.com/os-autoinst/os-autoinst-distri-opensuse/tree/master/data/generalhw_scripts/rpi_pico_w_keyboard[rpi_pico_w_keyboard] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1745509934.49afb50/external/os-autoinst-common/.gitrepo new/os-autoinst-5.1747913329.a855b3a/external/os-autoinst-common/.gitrepo --- old/os-autoinst-5.1745509934.49afb50/external/os-autoinst-common/.gitrepo 2025-04-24 17:52:14.000000000 +0200 +++ new/os-autoinst-5.1747913329.a855b3a/external/os-autoinst-common/.gitrepo 2025-05-22 13:28:49.000000000 +0200 @@ -6,7 +6,7 @@ [subrepo] remote = g...@github.com:os-autoinst/os-autoinst-common.git branch = master - commit = d8da3bc114304d9aa153659722b500130cd917b3 - parent = 3203a88cb7480259b91398cee8a916f94655f50a + commit = f74e4f8e87c67ef7331695735e27d10b55e2913b + parent = a79954dfef17c020ce862ccbd4c58fc94faee058 method = merge - cmdver = 0.4.6 + cmdver = 0.4.9 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1745509934.49afb50/external/os-autoinst-common/cpanfile new/os-autoinst-5.1747913329.a855b3a/external/os-autoinst-common/cpanfile --- old/os-autoinst-5.1745509934.49afb50/external/os-autoinst-common/cpanfile 2025-04-24 17:52:14.000000000 +0200 +++ new/os-autoinst-5.1747913329.a855b3a/external/os-autoinst-common/cpanfile 2025-05-22 13:28:49.000000000 +0200 @@ -17,7 +17,7 @@ requires 'Code::TidyAll'; requires 'Perl::Critic'; requires 'Perl::Critic::Community'; - requires 'Perl::Tidy', '== 20240511.0.0'; + requires 'Perl::Tidy', '== 20250311'; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1745509934.49afb50/external/os-autoinst-common/dependencies.yaml new/os-autoinst-5.1747913329.a855b3a/external/os-autoinst-common/dependencies.yaml --- old/os-autoinst-5.1745509934.49afb50/external/os-autoinst-common/dependencies.yaml 2025-04-24 17:52:14.000000000 +0200 +++ new/os-autoinst-5.1747913329.a855b3a/external/os-autoinst-common/dependencies.yaml 2025-05-22 13:28:49.000000000 +0200 @@ -17,7 +17,7 @@ perl(Module::CPANfile): develop_requires: - perl(Perl::Tidy): '== 20240511.0.0' + perl(Perl::Tidy): '== 20250311' perl(Code::TidyAll): perl(Perl::Critic): perl(Perl::Critic::Community): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1745509934.49afb50/external/os-autoinst-common/tools/prove_wrapper new/os-autoinst-5.1747913329.a855b3a/external/os-autoinst-common/tools/prove_wrapper --- old/os-autoinst-5.1745509934.49afb50/external/os-autoinst-common/tools/prove_wrapper 1970-01-01 01:00:00.000000000 +0100 +++ new/os-autoinst-5.1747913329.a855b3a/external/os-autoinst-common/tools/prove_wrapper 2025-05-22 13:28:49.000000000 +0200 @@ -0,0 +1,33 @@ +#!/usr/bin/env bash +# Copyright SUSE LLC +# SPDX-License-Identifier: GPL-2.0-or-later + +set -euo pipefail + +OUTPUT=$(mktemp) + +echo "Running prove with TAP output check ..." + +prove -I . "$@" 2>&1 | tee "$OUTPUT" +STATUS=${PIPESTATUS[0]} + +if [ "$STATUS" -ne 0 ]; then + echo "not ok - prove failed" + exit "$STATUS" +fi + +sed -E ' + s/^\[[0-9]{2}:[0-9]{2}:[0-9]{2}\][[:space:]]*// + /^All tests successful\./,$d +' "$OUTPUT" > "$OUTPUT.processed" + +UNHANDLED=$(grep -vE '^t/.*([0-9]{2}-|)([[:alnum:]]|_|-)+\.t \.+' "$OUTPUT.processed" || true) + +if [ -n "$UNHANDLED" ]; then + echo "not ok - unhandled output found" + echo "Run with PROVE_COMMAND=tools/prove_wrapper to reproduce locally" + exit 1 +else + echo "ok - no unhandled output found" + exit 0 +fi diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1745509934.49afb50/myjsonrpc.pm new/os-autoinst-5.1747913329.a855b3a/myjsonrpc.pm --- old/os-autoinst-5.1745509934.49afb50/myjsonrpc.pm 2025-04-24 17:52:14.000000000 +0200 +++ new/os-autoinst-5.1747913329.a855b3a/myjsonrpc.pm 2025-05-22 13:28:49.000000000 +0200 @@ -50,7 +50,7 @@ my $written_bytes = 0; my $bytes_to_write = length($json); while ($written_bytes < $bytes_to_write) { - $written_bytes += _syswrite($to_fd, $json, $bytes_to_write - $written_bytes, $written_bytes); + $written_bytes += _syswrite($to_fd, $json, $bytes_to_write - $written_bytes, $written_bytes) // 0; if ($!) { die('myjsonrpc: remote end terminated connection, stopping') if !DEBUG_JSON && $! =~ qr/Broken pipe/; confess sprintf "syswrite failed: err: '%s'; written_bytes: %d/%d; JSON: '%s'", $!, $written_bytes, $bytes_to_write, $json; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1745509934.49afb50/ppmclibs/tinycv_impl.cc new/os-autoinst-5.1747913329.a855b3a/ppmclibs/tinycv_impl.cc --- old/os-autoinst-5.1745509934.49afb50/ppmclibs/tinycv_impl.cc 2025-04-24 17:52:14.000000000 +0200 +++ new/os-autoinst-5.1747913329.a855b3a/ppmclibs/tinycv_impl.cc 2025-05-22 13:28:49.000000000 +0200 @@ -187,10 +187,13 @@ } // Optimization -- Search close to the original area working with ROI - int scene_x = std::max(0, int(x - margin)); - int scene_y = std::max(0, int(y - margin)); - int scene_bottom_x = std::min(scene->img.cols, int(x + width + margin)); - int scene_bottom_y = std::min(scene->img.rows, int(y + height + margin)); + // Scale the possition if object and scene have different sizes + int scaled_x = x * scene->img.cols / object->img.cols; + int scaled_y = y * scene->img.rows / object->img.rows; + int scene_x = std::max(0, int(scaled_x - margin)); + int scene_y = std::max(0, int(scaled_y - margin)); + int scene_bottom_x = std::min(scene->img.cols, int(scaled_x + width + margin)); + int scene_bottom_y = std::min(scene->img.rows, int(scaled_y + height + margin)); int scene_width = scene_bottom_x - scene_x; int scene_height = scene_bottom_y - scene_y; @@ -219,11 +222,11 @@ matchTemplate(scene_roi, object_roi, result, cv::TM_SQDIFF); // Use error at original location as upper bound - Point center = Point(x - scene_x, y - scene_y); + Point center = Point(scaled_x - scene_x, scaled_y - scene_y); double sse = result.at<float>(center); if (sse == 0) { similarity = 1; - return { (int)(x), (int)(y) }; + return { (int)(scaled_x), (int)(scaled_y) }; } // Localizing the points that are "good" - not necessarly the absolute min @@ -232,7 +235,7 @@ if (mins.empty()) return outvec; // sort it by distance to the original - and take the closest - SortByClose s(x, y); + SortByClose s(scaled_x, scaled_y); sort(mins.begin(), mins.end(), s); Point minloc = mins[0]; outvec[0] = int(minloc.x + scene_x); @@ -740,9 +743,9 @@ if (!true_colour) return colourMap[pixel]; } else if (bytes_per_pixel == 3) { - pixel = *(data + offset++) << 16 | + pixel = *(data + offset++) | *(data + offset++) << 8 | - *(data + offset++); + *(data + offset++) << 16; } else { // just fail miserably for unsupported bytes per pixel abort(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1745509934.49afb50/script/imgsearch new/os-autoinst-5.1747913329.a855b3a/script/imgsearch --- old/os-autoinst-5.1745509934.49afb50/script/imgsearch 2025-04-24 17:52:14.000000000 +0200 +++ new/os-autoinst-5.1747913329.a855b3a/script/imgsearch 2025-05-22 13:28:49.000000000 +0200 @@ -15,7 +15,7 @@ # define a basic needle package; normally `needle` should inherit from this package -package basic_needle { # uncoverable statement +package basic_needle { use base 'needle'; use Mojo::File qw(path); @@ -34,7 +34,7 @@ sub get_image ($self, $area = undef) { ($area // $self->{area}->[0])->{img} } sub from_paths ($needle_paths, @args) { [map { basic_needle->new($_, @args) } @$needle_paths] } -} +} # uncoverable statement sub usage ($r) { print "imgsearch [options] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1745509934.49afb50/t/14-isotovideo.t new/os-autoinst-5.1747913329.a855b3a/t/14-isotovideo.t --- old/os-autoinst-5.1745509934.49afb50/t/14-isotovideo.t 2025-04-24 17:52:14.000000000 +0200 +++ new/os-autoinst-5.1747913329.a855b3a/t/14-isotovideo.t 2025-05-22 13:28:49.000000000 +0200 @@ -294,7 +294,7 @@ # mock backend/driver -package FakeBackendDriver { # uncoverable statement +package FakeBackendDriver { sub new ($class, $name) { my $self = bless({class => $class}, $class); @@ -303,7 +303,7 @@ return $self; } sub extract_assets ($self, @args) { $self->{backend}->do_extract_assets(@args) } -} +} # uncoverable statement subtest 'publish assets' => sub { $bmwqemu::vars{BACKEND} = 'qemu'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1745509934.49afb50/t/18-backend-qemu.t new/os-autoinst-5.1747913329.a855b3a/t/18-backend-qemu.t --- old/os-autoinst-5.1745509934.49afb50/t/18-backend-qemu.t 2025-04-24 17:52:14.000000000 +0200 +++ new/os-autoinst-5.1747913329.a855b3a/t/18-backend-qemu.t 2025-05-22 13:28:49.000000000 +0200 @@ -89,11 +89,11 @@ my $fake_qmp_answer; $backend_mock->redefine(handle_qmp_command => sub { push @{$called{handle_qmp_command}}, $_[1]; $fake_qmp_answer }); -$backend->power({action => 'off'}); +combined_like { $backend->power({action => 'off'}); } qr/[debug]*POWER: action: off/s, 'Debug message logged for power off'; ok(exists $called{handle_qmp_command}, 'a qmp command has been called'); is_deeply($called{handle_qmp_command}, [{execute => 'quit'}], 'quit has been called for off'); $called{handle_qmp_command} = undef; -$backend->power({action => 'acpi'}); +combined_like { $backend->power({action => 'acpi'}); } qr/[debug]*POWER: action: acpi/s, 'Debug message logged for power acpi'; is_deeply($called{handle_qmp_command}, [{execute => 'system_powerdown'}], 'powerdown has been called for acpi'); $called{handle_qmp_command} = undef; @@ -796,7 +796,7 @@ $bmwqemu::vars{QEMU_ONLY_EXEC} = 0; $backend->{expected_shutdown} = 0; $backend_mock->redefine(handle_qmp_command => undef); - $backend->power({action => 'off'}); + combined_like { $backend->power({action => 'off'}); } qr/[debug]*POWER: action: off/s, 'Debug message logged for power off'; $backend_mock->unmock('handle_qmp_command'); combined_like { throws_ok { $backend->power({action => 'reset'}) } qr/Bad file descriptor/, 'die as expected' } qr/qemu was explicitly stopped from test code.*system_reset/s, 'warning as expected'; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1745509934.49afb50/t/19-isotovideo-command-processing.t new/os-autoinst-5.1747913329.a855b3a/t/19-isotovideo-command-processing.t --- old/os-autoinst-5.1745509934.49afb50/t/19-isotovideo-command-processing.t 2025-04-24 17:52:14.000000000 +0200 +++ new/os-autoinst-5.1747913329.a855b3a/t/19-isotovideo-command-processing.t 2025-05-22 13:28:49.000000000 +0200 @@ -41,7 +41,7 @@ }); # mock bmwqemu/backend -package FakeBackend { # uncoverable statement +package FakeBackend { sub new ($class) { bless({messages => []}, $class) } sub _send_json ($self, $cmd) { @@ -49,7 +49,7 @@ return $cmd->{cmd} eq 'is_shutdown' ? 'down' : {tags => [qw(some fake tags)]}; } sub stop { die "faking stop\n" } -} +} # uncoverable statement package bmwqemu { our $backend = FakeBackend->new(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1745509934.49afb50/t/23-baseclass.t new/os-autoinst-5.1747913329.a855b3a/t/23-baseclass.t --- old/os-autoinst-5.1745509934.49afb50/t/23-baseclass.t 2025-04-24 17:52:14.000000000 +0200 +++ new/os-autoinst-5.1747913329.a855b3a/t/23-baseclass.t 2025-05-22 13:28:49.000000000 +0200 @@ -729,6 +729,40 @@ is scalar @$image_data, 2, 'further image data enqueued for external encoder'; }; +subtest 'adjusting pipe size for external video encoder ' => sub { + my $cleanup_res = scope_guard sub { + $bmwqemu::vars{XRES} = undef; + $bmwqemu::vars{YRES} = undef; + }; + my $video_encoders = $baseclass->{video_encoders} = {}; + $bmwqemu::vars{EXTERNAL_VIDEO_ENCODER_CMD} = 'true -o %OUTPUT_FILE_NAME% "trailing arg"'; + $bmwqemu::vars{XRES} = '640'; + $bmwqemu::vars{YRES} = '480'; + stderr_like { ok $baseclass->_start_external_video_encoder_if_configured, 'video encoder started' } qr{Launching external video encoder}, 'message logged'; + my @video_encoder_pids = keys %$video_encoders; + is scalar @video_encoder_pids, 1, 'one video encoder started'; + my $launched_video_encoder = $video_encoders->{$video_encoder_pids[0]}; + my $pipe_sz = fcntl($launched_video_encoder->{pipe}, Fcntl::F_GETPIPE_SZ, 0); + subtest 'pipe size set' => sub { + ok $pipe_sz >= 640 * 480 * 3, 'pipe size set'; + } or always_explain $pipe_sz; + + # now a bigger size to trigger a warning + $video_encoders = $baseclass->{video_encoders} = {}; + $bmwqemu::vars{XRES} = '3840'; + $bmwqemu::vars{YRES} = '2160'; + combined_like { + ok $baseclass->_start_external_video_encoder_if_configured, 'video encoder started'; + } qr/Operation not permitted. Consider increasing/, 'warning about failed pipe size set'; + @video_encoder_pids = keys %$video_encoders; + is scalar @video_encoder_pids, 1, 'one video encoder started'; + $launched_video_encoder = $video_encoders->{$video_encoder_pids[0]}; + $pipe_sz = fcntl($launched_video_encoder->{pipe}, Fcntl::F_GETPIPE_SZ, 0); + subtest 'pipe size not set' => sub { + ok $pipe_sz < 3840 * 2160 * 3, 'pipe size not set'; + } or always_explain $pipe_sz; +}; + subtest 'console functions' => sub { my $consoles = $testapi::distri->{consoles} = {}; my @console_func = qw(reset disable activate); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1745509934.49afb50/t/26-video_stream.t new/os-autoinst-5.1747913329.a855b3a/t/26-video_stream.t --- old/os-autoinst-5.1745509934.49afb50/t/26-video_stream.t 2025-04-24 17:52:14.000000000 +0200 +++ new/os-autoinst-5.1747913329.a855b3a/t/26-video_stream.t 2025-05-22 13:28:49.000000000 +0200 @@ -142,21 +142,28 @@ '-m', 'UYVY', '-c', 'NOOP', '--raw-sink', 'raw-sink-dev-video0.raw', '--raw-sink-rm', - '--dv-timings'], "correct cmd built for ustreamer"; - $cmd = $mock_console->original('_get_ustreamer_cmd')->($console, '/dev/video0?fps=2&format=BGR3', 'raw-sink-dev-video0.raw'); + '--persistent', '--dv-timings'], "correct cmd built for ustreamer"; + $cmd = $mock_console->original('_get_ustreamer_cmd')->($console, '/dev/video0?fps=2&format=BGR24', 'raw-sink-dev-video0.raw'); is_deeply $cmd, [ 'ustreamer', '--device', '/dev/video0', '-f', '2', - '-m', 'BGR3', + '-m', 'BGR24', '-c', 'NOOP', '--raw-sink', 'raw-sink-dev-video0.raw', '--raw-sink-rm', - '--dv-timings'], "correct cmd built for fps=2 and format=BGR3"; - $cmd = $mock_console->original('_get_ustreamer_cmd')->($console, '/dev/video0&format=BGR3', 'raw-sink-dev-video0.raw'); + '--persistent', '--dv-timings'], "correct cmd built for fps=2 and format=BGR24"; + $cmd = $mock_console->original('_get_ustreamer_cmd')->($console, '/dev/video0&format=BGR24', 'raw-sink-dev-video0.raw'); is_deeply $cmd, [ 'ustreamer', '--device', '/dev/video0', '-f', '5', - '-m', 'BGR3', + '-m', 'BGR24', '-c', 'NOOP', '--raw-sink', 'raw-sink-dev-video0.raw', '--raw-sink-rm', - '--dv-timings'], "correct cmd built for format=BGR3"; + '--persistent', '--dv-timings'], "correct cmd built for format=BGR24"; + $cmd = $mock_console->original('_get_ustreamer_cmd')->($console, '/dev/video0&format=RGB24swap', 'raw-sink-dev-video0.raw'); + is_deeply $cmd, [ + 'ustreamer', '--device', '/dev/video0', '-f', '5', + '-m', 'RGB24', + '-c', 'NOOP', + '--raw-sink', 'raw-sink-dev-video0.raw', '--raw-sink-rm', + '--persistent', '--dv-timings', '--format-swap-rgb', '1'], "correct cmd built for format=RGB24swap"; }; subtest 'frames parsing' => sub { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1745509934.49afb50/t/27-consoles-vmware.t new/os-autoinst-5.1747913329.a855b3a/t/27-consoles-vmware.t --- old/os-autoinst-5.1745509934.49afb50/t/27-consoles-vmware.t 2025-04-24 17:52:14.000000000 +0200 +++ new/os-autoinst-5.1747913329.a855b3a/t/27-consoles-vmware.t 2025-05-22 13:28:49.000000000 +0200 @@ -129,7 +129,7 @@ subtest 'turning WebSocket into normal socket via dewebsockify' => sub { # define simple WebSocket server for testing - package TestWebSocketApp { # uncoverable statement + package TestWebSocketApp { use Mojo::Base 'Mojolicious', -signatures; has received_data => ''; @@ -138,8 +138,8 @@ $self->routes->any('*')->to('test#fallback'); } sub received_everything ($self) { length $self->received_data >= length 'message sent from raw socket' } - } - # uncoverable statement count:2 + } # uncoverable statement + package TestWebSocketApp::Controller::Test { use Mojo::Base 'Mojolicious::Controller', -signatures; @@ -167,7 +167,7 @@ $self->ua->ioloop->stop; }); } - } + } # uncoverable statement # start test WebSocket server my $log_level = $ENV{OS_AUTOINST_TEST_DEWEBSOCKIFY_VERBOSE} ? 'trace' : 'error'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1745509934.49afb50/t/46-os-autoinst-openvswitch.t new/os-autoinst-5.1747913329.a855b3a/t/46-os-autoinst-openvswitch.t --- old/os-autoinst-5.1745509934.49afb50/t/46-os-autoinst-openvswitch.t 2025-04-24 17:52:14.000000000 +0200 +++ new/os-autoinst-5.1747913329.a855b3a/t/46-os-autoinst-openvswitch.t 2025-05-22 13:28:49.000000000 +0200 @@ -7,7 +7,7 @@ use Test::MockObject; use Test::MockModule qw(strict); use Test::Mock::Time; -use Test::Output qw(stderr_like); +use Test::Output qw(combined_like stderr_like); use FindBin '$Bin'; use lib "$FindBin::Bin/lib", "$Bin/../external/os-autoinst-common/lib"; @@ -76,7 +76,7 @@ }; $mock_main->redefine(_ovs_check => sub { return (1, 'error') }); - is(($ovs->unset_vlan('tap0', 1))[0], 1, 'unset_vlan handles error'); + combined_like { is(($ovs->unset_vlan('tap0', 1))[0], 1, 'unset_vlan handles error'); } qr/error/, 'no unexpected log output from resultset'; $mock_main->redefine(_ovs_check => sub { return (0, 'error') }); $mock_main->redefine(_cmd => sub { return (0, '', '') }); is(($ovs->unset_vlan('tap0', 1))[0], 0, 'can call unset_vlan'); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1745509934.49afb50/t/data/tests/needles/boot-on_prompt.json new/os-autoinst-5.1747913329.a855b3a/t/data/tests/needles/boot-on_prompt.json --- old/os-autoinst-5.1745509934.49afb50/t/data/tests/needles/boot-on_prompt.json 2025-04-24 17:52:14.000000000 +0200 +++ new/os-autoinst-5.1747913329.a855b3a/t/data/tests/needles/boot-on_prompt.json 2025-05-22 13:28:49.000000000 +0200 @@ -4,7 +4,7 @@ "xpos": 2, "ypos": 64, "width": 84, - "height": 18, + "height": 12, "type": "match" } ], Binary files old/os-autoinst-5.1745509934.49afb50/t/data/ustreamer7-shared-full-frame-rgb3 and new/os-autoinst-5.1747913329.a855b3a/t/data/ustreamer7-shared-full-frame-rgb3 differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1745509934.49afb50/tools/container_run_ci new/os-autoinst-5.1747913329.a855b3a/tools/container_run_ci --- old/os-autoinst-5.1745509934.49afb50/tools/container_run_ci 2025-04-24 17:52:14.000000000 +0200 +++ new/os-autoinst-5.1747913329.a855b3a/tools/container_run_ci 2025-05-22 13:28:49.000000000 +0200 @@ -71,7 +71,7 @@ cd /opt ./tools/install-new-deps.sh export CI=1 WITH_COVER_OPTIONS=1 CHECK_GIT_STATUS=1 PERL_TEST_WARNINGS_ONLY_REPORT_WARNINGS=$PERL_TEST_WARNINGS_ONLY_REPORT_WARNINGS -cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -S . -B \"$build_dir\" +cmake -G Ninja -DPROVE_PATH=\"/opt/tools/prove_wrapper\" -DCMAKE_BUILD_TYPE=Release -S . -B \"$build_dir\" cmake --build \"$build_dir\" --verbose --target check-pkg-build cmake --build \"$build_dir\" --verbose --target $target cover -report html_minimal \"$build_dir\"/cover_db" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1745509934.49afb50/tools/invoke-tests new/os-autoinst-5.1747913329.a855b3a/tools/invoke-tests --- old/os-autoinst-5.1745509934.49afb50/tools/invoke-tests 2025-04-24 17:52:14.000000000 +0200 +++ new/os-autoinst-5.1747913329.a855b3a/tools/invoke-tests 2025-05-22 13:28:49.000000000 +0200 @@ -64,6 +64,10 @@ # set Perl module include path and coverage options export PERL5LIB="$source_directory:$source_directory/ppmclibs/blib/lib:$source_directory/ppmclibs/blib/arch/auto/tinycv:$PERL5LIB" +if [[ "${GITHUB_ACTIONS}" == "true" ]]; then + # https://progress.opensuse.org/issues/182402 + cpanm Devel::Cover +fi if [[ $WITH_COVER_OPTIONS ]]; then ignore="external/|tools/|t/data/tests/tests/|t/data/wheels_dir|/tmp|/CheckGitStatus.pm|$prove_path" # add ' -MOpenQA::Test::PatchDeparse' for older OS versions to avoid warnings diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1745509934.49afb50/tools/prove_wrapper new/os-autoinst-5.1747913329.a855b3a/tools/prove_wrapper --- old/os-autoinst-5.1745509934.49afb50/tools/prove_wrapper 1970-01-01 01:00:00.000000000 +0100 +++ new/os-autoinst-5.1747913329.a855b3a/tools/prove_wrapper 2025-05-26 18:41:40.574893889 +0200 @@ -0,0 +1 @@ +symbolic link to ../external/os-autoinst-common/tools/prove_wrapper ++++++ os-autoinst.obsinfo ++++++ --- /var/tmp/diff_new_pack.W8birA/_old 2025-05-26 18:41:40.822904306 +0200 +++ /var/tmp/diff_new_pack.W8birA/_new 2025-05-26 18:41:40.830904642 +0200 @@ -1,5 +1,5 @@ name: os-autoinst -version: 5.1745509934.49afb50 -mtime: 1745509934 -commit: 49afb509ef16be98aa94ecae795f89a604cc4064 +version: 5.1747913329.a855b3a +mtime: 1747913329 +commit: a855b3a2ed70ef02ad6d125ee95be0fb1fe28c04