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-05-05 15:16:27
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/os-autoinst (Old)
 and      /work/SRC/openSUSE:Factory/.os-autoinst.new.30200 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "os-autoinst"

Tue May  5 15:16:27 2026 rev:593 rq:1350832 version:5.1777891128.f572829

Changes:
--------
--- /work/SRC/openSUSE:Factory/os-autoinst/os-autoinst.changes  2026-04-30 
20:33:11.257654654 +0200
+++ /work/SRC/openSUSE:Factory/.os-autoinst.new.30200/os-autoinst.changes       
2026-05-05 15:17:51.173255564 +0200
@@ -1,0 +2,10 @@
+Mon May 04 10:38:57 UTC 2026 - [email protected]
+
+- Update to version 5.1777891128.f572829:
+  * fix: handle pre-marker pending text in script_output
+  * fix: echo json_cmd_token in isotovideo responses
+  * fix: re-install serial marker hook after console reset
+  * fix: support pretty_serial_markers in script_output regex
+  * fix(test): handle D-Bus AccessDenied in Open vSwitch test
+
+-------------------------------------------------------------------

Old:
----
  os-autoinst-5.1777537682.913fce0.obscpio

New:
----
  os-autoinst-5.1777891128.f572829.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ os-autoinst-devel-test.spec ++++++
--- /var/tmp/diff_new_pack.K2aFTi/_old  2026-05-05 15:17:52.429307647 +0200
+++ /var/tmp/diff_new_pack.K2aFTi/_new  2026-05-05 15:17:52.429307647 +0200
@@ -18,7 +18,7 @@
 
 %define         short_name os-autoinst-devel
 Name:           %{short_name}-test
-Version:        5.1777537682.913fce0
+Version:        5.1777891128.f572829
 Release:        0
 Summary:        Test package for %{short_name}
 License:        GPL-2.0-or-later

++++++ os-autoinst-openvswitch-test.spec ++++++
--- /var/tmp/diff_new_pack.K2aFTi/_old  2026-05-05 15:17:52.469309305 +0200
+++ /var/tmp/diff_new_pack.K2aFTi/_new  2026-05-05 15:17:52.469309305 +0200
@@ -19,7 +19,7 @@
 %define name_ext -test
 %define         short_name os-autoinst-openvswitch
 Name:           %{short_name}%{?name_ext}
-Version:        5.1777537682.913fce0
+Version:        5.1777891128.f572829
 Release:        0
 Summary:        test package for %{short_name}
 License:        GPL-2.0-or-later

++++++ os-autoinst-test.spec ++++++
--- /var/tmp/diff_new_pack.K2aFTi/_old  2026-05-05 15:17:52.513311130 +0200
+++ /var/tmp/diff_new_pack.K2aFTi/_new  2026-05-05 15:17:52.517311296 +0200
@@ -19,7 +19,7 @@
 %define name_ext -test
 %define         short_name os-autoinst
 Name:           %{short_name}%{?name_ext}
-Version:        5.1777537682.913fce0
+Version:        5.1777891128.f572829
 Release:        0
 Summary:        test package for os-autoinst
 License:        GPL-2.0-or-later

++++++ os-autoinst.spec ++++++
--- /var/tmp/diff_new_pack.K2aFTi/_old  2026-05-05 15:17:52.557312955 +0200
+++ /var/tmp/diff_new_pack.K2aFTi/_new  2026-05-05 15:17:52.561313121 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           os-autoinst
-Version:        5.1777537682.913fce0
+Version:        5.1777891128.f572829
 Release:        0
 Summary:        OS-level test automation
 License:        GPL-2.0-or-later

++++++ os-autoinst-5.1777537682.913fce0.obscpio -> 
os-autoinst-5.1777891128.f572829.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/os-autoinst-5.1777537682.913fce0/OpenQA/Isotovideo/CommandHandler.pm 
new/os-autoinst-5.1777891128.f572829/OpenQA/Isotovideo/CommandHandler.pm
--- old/os-autoinst-5.1777537682.913fce0/OpenQA/Isotovideo/CommandHandler.pm    
2026-04-30 10:28:02.000000000 +0200
+++ new/os-autoinst-5.1777891128.f572829/OpenQA/Isotovideo/CommandHandler.pm    
2026-05-04 12:38:48.000000000 +0200
@@ -17,6 +17,7 @@
 
 # io handles for sending data to command server and backend
 has [qw(test_fd cmd_srv_fd backend_fd backend_out_fd answer_fd)] => undef;
+has [qw(current_command_token backend_requester_token postponed_token)];
 
 # the name of the current test (full name includes category prefix, eg. 
installation-)
 has [qw(current_test_name current_test_full_name)];
@@ -76,6 +77,7 @@
 sub process_command ($self, $answer_fd, $command_to_process) {
     my $cmd = $command_to_process->{cmd} or die 'isotovideo: no command 
specified';
     $self->answer_fd($answer_fd);
+    local $self->{current_command_token} = 
$command_to_process->{json_cmd_token};
 
     # invoke handler for the command
     if (my $handler = $self->can('_handle_command_' . $cmd)) {
@@ -108,6 +110,7 @@
 
     # postpone execution of command
     $self->postponed_answer_fd($self->answer_fd);
+    $self->postponed_token($self->current_command_token);
     $self->postponed_command($response);
 
     # send no reply to autotest, just let it wait
@@ -119,18 +122,30 @@
 sub _send_to_backend ($self, $data) { myjsonrpc::send_json($self->backend_fd, 
$data) }
 
 sub send_to_backend_requester ($self, $data) {
-    myjsonrpc::send_json($self->backend_requester, $data);
+    local $self->{current_command_token} = $self->backend_requester_token;
+    $self->_send_response($self->backend_requester, $data);
     $self->backend_requester(undef);
+    $self->backend_requester_token(undef);
 }
 
-sub _respond ($self, $data) { myjsonrpc::send_json($self->answer_fd, $data) }
+sub _add_token ($self, $data) {
+    my $token = $self->current_command_token or return $data;
+    return $data if exists $data->{json_cmd_token};
+    return {%$data, json_cmd_token => $token};
+}
+
+sub _send_response ($self, $fd, $data) {
+    myjsonrpc::send_json($fd, $self->_add_token($data));
+}
+
+sub _respond ($self, $data) { $self->_send_response($self->answer_fd, $data) }
 
 sub _respond_ok ($self) { $self->_respond({ret => 1}) }
 
 sub _respond_ok_or_postpone_if_paused ($self) {
     return $self->_respond_ok unless my $reason_for_pause = 
$self->reason_for_pause;
     $self->_send_to_cmd_srv({paused => 1, reason => $reason_for_pause});
-    $self->postponed_answer_fd($self->answer_fd)->postponed_command(undef);
+    
$self->postponed_answer_fd($self->answer_fd)->postponed_token($self->current_command_token)->postponed_command(undef);
 }
 
 sub _pass_command_to_backend_unless_paused ($self, $response, $backend_cmd) {
@@ -138,12 +153,13 @@
 
     die 'isotovideo: we need to implement a backend queue' if 
$self->backend_requester;
     $self->backend_requester($self->answer_fd);
+    $self->backend_requester_token($self->current_command_token);
 
     $self->_send_to_cmd_srv({
             $backend_cmd => $response,
             current_api_function => $backend_cmd,
     });
-    $self->_send_to_backend({cmd => $backend_cmd, arguments => $response});
+    $self->_send_to_backend($self->_add_token({cmd => $backend_cmd, arguments 
=> $response}));
     $self->current_api_function($backend_cmd);
 }
 
@@ -169,6 +185,7 @@
 
     # postpone sending the reply
     $self->postponed_answer_fd($self->answer_fd);
+    $self->postponed_token($self->current_command_token);
     $self->postponed_command(undef);
 }
 
@@ -213,12 +230,12 @@
 }
 
 sub _handle_command_pause_test_execution ($self, $response, @) {
-    return $self->_respond_ok if $self->reason_for_pause;    # do nothing if 
already paused
-    return $self->_respond_ok if $response->{due_to_failure} && 
!$self->pause_on_failure;
+    return $self->_respond_ok() if $self->reason_for_pause;    # do nothing if 
already paused
+    return $self->_respond_ok() if $response->{due_to_failure} && 
!$self->pause_on_failure;
     my $reason_for_pause = $response->{reason} // 'manually paused';
     $self->reason_for_pause($reason_for_pause);
     $self->_send_to_cmd_srv({paused => 1, reason => $reason_for_pause});
-    $self->postponed_answer_fd($self->answer_fd)->postponed_command(undef);
+    
$self->postponed_answer_fd($self->answer_fd)->postponed_token($self->current_command_token)->postponed_command(undef);
 }
 
 sub _handle_command_resume_test_execution ($self, $response, @) {
@@ -238,6 +255,8 @@
     my $downloader = OpenQA::Isotovideo::NeedleDownloader->new();
     $downloader->download_missing_needles($response->{new_needles} // []);
 
+    $self->_respond_ok();
+
     # skip resuming last command if receiving a resume command without having 
previously postponed an answer
     # note: This should normally not be the case. However, the JavaScript 
client can technically send the command
     #       to resume at any time and that apparently also happens sometimes 
in the fullstack test (see poo#101734).
@@ -245,11 +264,13 @@
 
     # if no command has been postponed (because paused due to timeout or on 
set_current_test) just return 1
     if (!$postponed_command) {
-        myjsonrpc::send_json($postponed_answer_fd, {
+        local $self->{current_command_token} = $self->postponed_token;
+        $self->_send_response($postponed_answer_fd, {
                 ret => ($response->{options} // 1),
                 new_needles => $response->{new_needles},
         });
         $self->postponed_answer_fd(undef);
+        $self->postponed_token(undef);
         return;
     }
 
@@ -259,6 +280,7 @@
 
     $self->postponed_command(undef);
     $self->postponed_answer_fd(undef);
+    $self->postponed_token(undef);
     $self->process_command($postponed_answer_fd, $postponed_command);
 }
 
@@ -285,13 +307,13 @@
         $self->reason_for_pause('reached module ' . $pause_test_name);
     }
     $self->update_status_file;
-    $self->_respond_ok_or_postpone_if_paused;
+    $self->_respond_ok_or_postpone_if_paused();
 }
 
 sub _handle_command_tests_done ($self, $response, @) {
     $self->test_died($response->{died});
     $self->test_completed($response->{completed});
-    $self->_respond_ok;
+    $self->_respond_ok();
     $self->emit(tests_done => $response);
     $self->current_test_name('');
     $self->status('finished');
@@ -312,7 +334,7 @@
             check_screen => \%arguments,
             current_api_function => $current_api_function,
     });
-    my $tags_resp = $bmwqemu::backend->_send_json({cmd => 
'set_tags_to_assert', arguments => \%arguments});
+    my $tags_resp = $bmwqemu::backend->_send_json($self->_add_token({cmd => 
'set_tags_to_assert', arguments => \%arguments}));
     $self->tags(($tags_resp // {})->{tags} // []);
     $self->current_api_function($current_api_function);
 }
@@ -320,10 +342,10 @@
 sub _handle_command_set_assert_screen_timeout ($self, $response, @) {
     my $timeout = $response->{timeout};
     $self->_send_to_cmd_srv({set_assert_screen_timeout => $timeout});
-    $bmwqemu::backend->_send_json({
-            cmd => 'set_assert_screen_timeout',
-            arguments => $timeout,
-    });
+    $bmwqemu::backend->_send_json($self->_add_token({
+                cmd => 'set_assert_screen_timeout',
+                arguments => $timeout,
+    }));
     $self->_respond_ok();
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/os-autoinst-5.1777537682.913fce0/distribution.pm 
new/os-autoinst-5.1777891128.f572829/distribution.pm
--- old/os-autoinst-5.1777537682.913fce0/distribution.pm        2026-04-30 
10:28:02.000000000 +0200
+++ new/os-autoinst-5.1777891128.f572829/distribution.pm        2026-05-04 
12:38:48.000000000 +0200
@@ -354,7 +354,7 @@
     }
 
     # and the markers including internal exit catcher
-    my $out = $output =~ 
/(?:^|\r?\n)$marker\r?\n(?<expected_output>.*?)SCRIPT_FINISHED$marker-\d+-/s ? 
$+ : '';
+    my $out = $output =~ 
/$marker\r?\n(?<expected_output>.*?)SCRIPT_FINISHED$marker-\d+-/s ? $+ : '';
     # trim whitespaces
     $out =~ s/^\s+|\s+$//g;
     return $out;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/os-autoinst-5.1777537682.913fce0/t/03-testapi.t 
new/os-autoinst-5.1777891128.f572829/t/03-testapi.t
--- old/os-autoinst-5.1777537682.913fce0/t/03-testapi.t 2026-04-30 
10:28:02.000000000 +0200
+++ new/os-autoinst-5.1777891128.f572829/t/03-testapi.t 2026-05-04 
12:38:48.000000000 +0200
@@ -805,6 +805,9 @@
     $mock_testapi->redefine(wait_serial => "XXX\nfoo\nSCRIPT_FINISHEDXXX-1-");
     is(script_output('echo foo', undef, proceed_on_failure => 1), 'foo', 
'proceed_on_failure=1 retrieves retrieves output of script and do not die');
 
+    $mock_testapi->redefine(wait_serial => "login: 
XXX\nfoo\nSCRIPT_FINISHEDXXX-0-");
+    is(script_output('echo foo'), 'foo', 'script_output handles pre-marker 
pending text correctly');
+
     $mock_testapi->redefine(wait_serial => sub { return 'none' unless $_[0] =~ 
/SCRIPT_FINISHEDXXX/; return; });
     throws_ok { script_output('timeout'); } qr/timeout/, 'die expected with 
timeout';
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/os-autoinst-5.1777537682.913fce0/t/19-isotovideo-command-processing.t 
new/os-autoinst-5.1777891128.f572829/t/19-isotovideo-command-processing.t
--- old/os-autoinst-5.1777537682.913fce0/t/19-isotovideo-command-processing.t   
2026-04-30 10:28:02.000000000 +0200
+++ new/os-autoinst-5.1777891128.f572829/t/19-isotovideo-command-processing.t   
2026-05-04 12:38:48.000000000 +0200
@@ -399,6 +399,31 @@
     } qr/isotovideo received signal INT/, 'Signal logged';
     is($last_signal, 'INT', 'Event emitted');
 };
+subtest token_echo => sub {
+    reset_state();
+    my $token = 'echo-test-token';
+    $command_handler->process_command($answer_fd, {cmd => 'status', 
json_cmd_token => $token});
+    is($last_received_msg_by_fd[$answer_fd]->{json_cmd_token}, $token, 
'json_cmd_token echoed back in status response');
+
+    reset_state();
+    $token = 'backend-token';
+    $command_handler->process_command($answer_fd, {cmd => 'backend_some_cmd', 
json_cmd_token => $token});
+    $command_handler->send_to_backend_requester({ret => 1});
+    is($last_received_msg_by_fd[$answer_fd]->{json_cmd_token}, $token, 
'json_cmd_token echoed back in backend response (auto-injected)');
+
+    subtest 'interleaved commands' => sub {
+        reset_state();
+        my $token1 = 'token-1';
+        my $token2 = 'token-2';
+        $command_handler->process_command($answer_fd, {cmd => 'backend_cmd1', 
json_cmd_token => $token1});
+        $command_handler->process_command($answer_fd, {cmd => 'status', 
json_cmd_token => $token2});
+        is($last_received_msg_by_fd[$answer_fd]->{json_cmd_token}, $token2, 
'interleaved command gets correct token');
+
+        $command_handler->send_to_backend_requester({ret => 1});
+        is($last_received_msg_by_fd[$answer_fd]->{json_cmd_token}, $token1, 
'deferred backend response gets correct token');
+    };
+};
+
 subtest 'Check exit_code_from_test_results' => sub {
     my $mock_runner = Test::MockModule->new('OpenQA::Isotovideo::Runner');
     my @diags;

++++++ os-autoinst.obsinfo ++++++
--- /var/tmp/diff_new_pack.K2aFTi/_old  2026-05-05 15:17:54.761404347 +0200
+++ /var/tmp/diff_new_pack.K2aFTi/_new  2026-05-05 15:17:54.769404679 +0200
@@ -1,5 +1,5 @@
 name: os-autoinst
-version: 5.1777537682.913fce0
-mtime: 1777537682
-commit: 913fce00a14c6d0b215fec654944b9f6f3954a62
+version: 5.1777891128.f572829
+mtime: 1777891128
+commit: f5728294afb1ee469327074230e3df21639643cd
 

Reply via email to