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
 

Reply via email to