Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package openQA for openSUSE:Factory checked 
in at 2025-12-12 21:41:01
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openQA (Old)
 and      /work/SRC/openSUSE:Factory/.openQA.new.1939 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "openQA"

Fri Dec 12 21:41:01 2025 rev:783 rq:1322254 version:5.1765469360.5c0525b5

Changes:
--------
--- /work/SRC/openSUSE:Factory/openQA/openQA.changes    2025-12-11 
18:38:00.129054072 +0100
+++ /work/SRC/openSUSE:Factory/.openQA.new.1939/openQA.changes  2025-12-12 
21:42:06.975208218 +0100
@@ -2 +2 @@
-Wed Dec 10 15:10:39 UTC 2025 - [email protected]
+Thu Dec 11 17:35:22 UTC 2025 - [email protected]
@@ -4 +4,5 @@
-- Update to version 5.1765365298.9af08171:
+- Update to version 5.1765469360.5c0525b5:
+  * worker: Add coverage for OVS DBus checks
+  * Fix overview when filtering by test and module result at the same time
+  * Return signal as part of run_cmd result
+  * Add scanner for untracked screenshots

Old:
----
  openQA-5.1765365298.9af08171.obscpio

New:
----
  openQA-5.1765469360.5c0525b5.obscpio

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

Other differences:
------------------
++++++ openQA-client-test.spec ++++++
--- /var/tmp/diff_new_pack.B8xSqO/_old  2025-12-12 21:42:08.411268745 +0100
+++ /var/tmp/diff_new_pack.B8xSqO/_new  2025-12-12 21:42:08.411268745 +0100
@@ -18,7 +18,7 @@
 
 %define         short_name openQA-client
 Name:           %{short_name}-test
-Version:        5.1765365298.9af08171
+Version:        5.1765469360.5c0525b5
 Release:        0
 Summary:        Test package for %{short_name}
 License:        GPL-2.0-or-later

++++++ openQA-devel-test.spec ++++++
--- /var/tmp/diff_new_pack.B8xSqO/_old  2025-12-12 21:42:08.447270262 +0100
+++ /var/tmp/diff_new_pack.B8xSqO/_new  2025-12-12 21:42:08.447270262 +0100
@@ -18,7 +18,7 @@
 
 %define         short_name openQA-devel
 Name:           %{short_name}-test
-Version:        5.1765365298.9af08171
+Version:        5.1765469360.5c0525b5
 Release:        0
 Summary:        Test package for %{short_name}
 License:        GPL-2.0-or-later

++++++ openQA-test.spec ++++++
--- /var/tmp/diff_new_pack.B8xSqO/_old  2025-12-12 21:42:08.483271779 +0100
+++ /var/tmp/diff_new_pack.B8xSqO/_new  2025-12-12 21:42:08.487271948 +0100
@@ -18,7 +18,7 @@
 
 %define         short_name openQA
 Name:           %{short_name}-test
-Version:        5.1765365298.9af08171
+Version:        5.1765469360.5c0525b5
 Release:        0
 Summary:        Test package for openQA
 License:        GPL-2.0-or-later

++++++ openQA-worker-test.spec ++++++
--- /var/tmp/diff_new_pack.B8xSqO/_old  2025-12-12 21:42:08.523273465 +0100
+++ /var/tmp/diff_new_pack.B8xSqO/_new  2025-12-12 21:42:08.523273465 +0100
@@ -18,7 +18,7 @@
 
 %define         short_name openQA-worker
 Name:           %{short_name}-test
-Version:        5.1765365298.9af08171
+Version:        5.1765469360.5c0525b5
 Release:        0
 Summary:        Test package for %{short_name}
 License:        GPL-2.0-or-later

++++++ openQA.spec ++++++
--- /var/tmp/diff_new_pack.B8xSqO/_old  2025-12-12 21:42:08.571275489 +0100
+++ /var/tmp/diff_new_pack.B8xSqO/_new  2025-12-12 21:42:08.575275658 +0100
@@ -99,7 +99,7 @@
 %define devel_requires %devel_no_selenium_requires chromedriver
 
 Name:           openQA
-Version:        5.1765365298.9af08171
+Version:        5.1765469360.5c0525b5
 Release:        0
 Summary:        The openQA web-frontend, scheduler and tools
 License:        GPL-2.0-or-later

++++++ openQA-5.1765365298.9af08171.obscpio -> 
openQA-5.1765469360.5c0525b5.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1765365298.9af08171/lib/OpenQA/Schema/ResultSet/Screenshots.pm 
new/openQA-5.1765469360.5c0525b5/lib/OpenQA/Schema/ResultSet/Screenshots.pm
--- old/openQA-5.1765365298.9af08171/lib/OpenQA/Schema/ResultSet/Screenshots.pm 
2025-12-10 12:14:58.000000000 +0100
+++ new/openQA-5.1765469360.5c0525b5/lib/OpenQA/Schema/ResultSet/Screenshots.pm 
2025-12-11 17:09:20.000000000 +0100
@@ -1,4 +1,4 @@
-# Copyright 2019 SUSE LLC
+# Copyright SUSE LLC
 # SPDX-License-Identifier: GPL-2.0-or-later
 
 package OpenQA::Schema::ResultSet::Screenshots;
@@ -6,7 +6,9 @@
 
 use Mojo::Base 'DBIx::Class::ResultSet', -signatures;
 
-use OpenQA::Log qw(log_trace);
+use Mojo::File qw(path);
+use OpenQA::Log qw(log_trace log_error);
+use OpenQA::Utils qw(imagesdir);
 
 sub create_screenshot ($self, $img) {
     my $dbh = $self->result_source->schema->storage->dbh;
@@ -30,4 +32,26 @@
     
$self->result_source->schema->resultset('ScreenshotLinks')->populate([[qw(screenshot_id
 job_id)], @data]);
 }
 
+# scans the image directories for untracked screenshots and deletes them
+# This can take a very long time to execute if $images_dir is big. So this is 
meant to be executed manually, e.g.:
+# OPENQA_LOGFILE=scan.log script/openqa eval 'say(STDERR 
app->schema->resultset("Screenshots")->scan_untracked_screenshots)' > 
to-delete.txt
+sub scan_untracked_screenshots ($self, $images_dir = imagesdir, $delete = 0) {
+    my $dbh = $self->result_source->schema->storage->dbh;
+    my $sth = $dbh->prepare('SELECT count(id) FROM screenshots WHERE filename 
= ?');
+    my $screenshots_path = path($images_dir);
+    my $screenshot_paths = $screenshots_path->list_tree({max_depth => 
3})->grep(qr/.*\.png/i);
+    my $error_count = 0;
+    my $handle_error = sub ($msg) { log_error $msg; ++$error_count; return 0 };
+    for my $screenshot_path_abs (@$screenshot_paths) {
+        my $screenshot_path = $screenshot_path_abs->to_rel($screenshots_path);
+        $sth->execute($screenshot_path);
+        my ($count) = $sth->fetchrow_array;
+        $handle_error->("Unable to lookup $screenshot_path in DB: " . 
$sth->errstr) and next if defined $sth->err;
+        next if $count;
+        say $screenshot_path_abs;
+        unlink $screenshot_path_abs or $handle_error->("Unable to delete 
$screenshot_path_abs: $!") if $delete;
+    }
+    return $error_count;
+}
+
 1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1765365298.9af08171/lib/OpenQA/Utils.pm 
new/openQA-5.1765469360.5c0525b5/lib/OpenQA/Utils.pm
--- old/openQA-5.1765365298.9af08171/lib/OpenQA/Utils.pm        2025-12-10 
12:14:58.000000000 +0100
+++ new/openQA-5.1765469360.5c0525b5/lib/OpenQA/Utils.pm        2025-12-11 
17:09:20.000000000 +0100
@@ -311,11 +311,17 @@
         my @out_args = defined $output_file ? ('>', $output_file, '2>', 
\$stderr) : (\$stdout, \$stderr);
         my $ipc_run_succeeded = IPC::Run::run($cmd, \$stdin, @out_args);
         my $error_code = $?;
-        my $return_code = ($error_code & 127) ? (undef) : ($error_code >> 8);
-        my $message
-          = defined $return_code
-          ? ("cmd returned $return_code")
-          : sprintf('cmd died with signal %d', $error_code & 127);
+        my $return_code;
+        my $signal;
+        my $message;
+        if ($error_code & 127) {
+            $signal = $error_code & 127;
+            $message = "cmd died with signal $signal";
+        }
+        else {
+            $return_code = $error_code >> 8;
+            $message = "cmd returned $return_code";
+        }
         my $expected_return_codes = $args{expected_return_codes};
         chomp $stderr;
         if (
@@ -337,6 +343,7 @@
             return_code => $return_code,
             stdout => $stdout,
             stderr => $stderr,
+            signal => $signal,
         };
     }
     catch ($e) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1765365298.9af08171/lib/OpenQA/WebAPI/Plugin/Helpers.pm 
new/openQA-5.1765469360.5c0525b5/lib/OpenQA/WebAPI/Plugin/Helpers.pm
--- old/openQA-5.1765365298.9af08171/lib/OpenQA/WebAPI/Plugin/Helpers.pm        
2025-12-10 12:14:58.000000000 +0100
+++ new/openQA-5.1765469360.5c0525b5/lib/OpenQA/WebAPI/Plugin/Helpers.pm        
2025-12-11 17:09:20.000000000 +0100
@@ -518,9 +518,9 @@
     my $machines = $c->every_non_empty_param('machine');
     my $failed_modules = $c->every_non_empty_param('failed_modules');
     my %filters;
-    $filters{state} = {-in => $states} if @$states;
-    $filters{result} = {-in => $results} if @$results;
-    $filters{result} = FAILED if @$failed_modules;
+    $filters{'me.state'} = {-in => $states} if @$states;
+    $filters{'me.result'} = {-in => $results} if @$results;
+    $filters{'me.result'} = FAILED if @$failed_modules;
     $filters{ARCH} = {-in => $archs} if @$archs;
     $filters{MACHINE} = {-in => $machines} if @$machines;
     return [\%filters];
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1765365298.9af08171/t/16-utils-runcmd.t 
new/openQA-5.1765469360.5c0525b5/t/16-utils-runcmd.t
--- old/openQA-5.1765365298.9af08171/t/16-utils-runcmd.t        2025-12-10 
12:14:58.000000000 +0100
+++ new/openQA-5.1765469360.5c0525b5/t/16-utils-runcmd.t        2025-12-11 
17:09:20.000000000 +0100
@@ -63,6 +63,7 @@
     qr/.*cmd died with signal 9\n.*/i;
     is $res->{return_code}, undef, 'no exit code returned if command dies with 
a signal';
     ok !$res->{status}, 'status not ok if command dies with a signal';
+    is $res->{signal}, 9, 'signal returned in result';
 };
 
 subtest 'invoke Git commands for real testing error handling' => sub {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1765365298.9af08171/t/24-worker-overall.t 
new/openQA-5.1765469360.5c0525b5/t/24-worker-overall.t
--- old/openQA-5.1765365298.9af08171/t/24-worker-overall.t      2025-12-10 
12:14:58.000000000 +0100
+++ new/openQA-5.1765469360.5c0525b5/t/24-worker-overall.t      2025-12-11 
17:09:20.000000000 +0100
@@ -16,6 +16,7 @@
 use Mojolicious;
 use Test::Output qw(combined_like combined_from);
 use Test::MockModule;
+use Test::MockObject;
 use OpenQA::Constants qw(WORKER_COMMAND_QUIT WORKER_SR_API_FAILURE 
WORKER_SR_DIED WORKER_SR_DONE WORKER_SR_FINISH_OFF);
 use OpenQA::Worker;
 use OpenQA::Worker::Job;
@@ -594,6 +595,16 @@
     is $worker->check_availability, undef, 'worker considered always available 
if not a tap worker';
 };
 
+subtest 'check is_ovs_dbus_service_running of D-Bus service' => sub {
+    my $mock_net_dbus = Test::MockObject->new();
+    $worker->{_system_dbus} = $mock_net_dbus;
+    $mock_net_dbus->set_true('get_service');
+    is $worker->is_ovs_dbus_service_running, 1, 'OvS D-Bus service passed on 
passing get_service';
+    $mock_net_dbus->mock(get_service => sub { die "Fake error" });
+    is $worker->is_ovs_dbus_service_running, 0, 'OvS D-Bus service failed on 
failing get_service';
+};
+
+
 subtest 'handle client status changes' => sub {
     my $fake_client = OpenQA::Worker::WebUIConnection->new('some-host', 
{apikey => 'foo', apisecret => 'bar'});
     my $fake_client_2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1765365298.9af08171/t/42-screenshots.t 
new/openQA-5.1765469360.5c0525b5/t/42-screenshots.t
--- old/openQA-5.1765365298.9af08171/t/42-screenshots.t 2025-12-10 
12:14:58.000000000 +0100
+++ new/openQA-5.1765469360.5c0525b5/t/42-screenshots.t 2025-12-11 
17:09:20.000000000 +0100
@@ -15,7 +15,7 @@
 use OpenQA::ScreenshotDeletion;
 use Mojo::File qw(path tempdir);
 use Mojo::Log;
-use Test::Output qw(combined_like);
+use Test::Output qw(combined_like combined_unlike);
 use Test::Mojo;
 use Test::Warnings ':report_warnings';
 use DateTime;
@@ -244,4 +244,23 @@
     unlike $log, qr/duplicate.*violates unique constraint 
"screenshots_filename"/, 'no unique constraint error';
 };
 
+subtest 'deleting untracked screenshots' => sub {
+    my $tempdir = tempdir;
+    my $subdir = $tempdir->child('0a4/a66')->make_path;
+    my $image = $subdir->child('0647f51a4bef105e96ad0fad32.png')->touch;
+    my $screenshot_path = '0a4/a66/0647f51a4bef105e96ad0fad32.png';
+    my $screenshot = $screenshots->create({filename => $screenshot_path, 
t_created => '2025-01-01'});
+    my $error_count;
+    combined_unlike { $error_count = 
$screenshots->scan_untracked_screenshots($tempdir, 1) }
+    qr/0647f51a4bef105e96ad0fad32/, 'filename of screenshot not logged';
+    ok -e $image, 'image that is still present in the database has been 
preserved';
+
+    is $error_count, 0, 'deletion happened without errors (0)';
+    $screenshot->delete;
+    combined_like { $error_count = 
$screenshots->scan_untracked_screenshots($tempdir, 1) }
+    qr/0647f51a4bef105e96ad0fad32/, 'filename of screenshot logged';
+    ok !-e $image, 'image that was deleted from the database has been deleted 
on disk as well';
+    is $error_count, 0, 'deletion happened without errors (1)';
+};
+
 done_testing();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1765365298.9af08171/t/ui/10-tests_overview.t 
new/openQA-5.1765469360.5c0525b5/t/ui/10-tests_overview.t
--- old/openQA-5.1765365298.9af08171/t/ui/10-tests_overview.t   2025-12-10 
12:14:58.000000000 +0100
+++ new/openQA-5.1765469360.5c0525b5/t/ui/10-tests_overview.t   2025-12-11 
17:09:20.000000000 +0100
@@ -399,6 +399,8 @@
 subtest 'filtering by module' => sub {
     my $module = 'kate';
     my $JOB_ICON_SELECTOR = 'td[id^="res_DVD_"]';
+    my $query_all_job_ids_sorted
+      = qq|return 
Array.from(document.querySelectorAll('[name^="jobid_td"')).map(e => 
e.attributes.name.value).sort()|;
     my $result = 'failed';
 
     subtest 'jobs containing the module with any result are present' => sub {
@@ -432,8 +434,8 @@
         element_visible('#res_DVD_i586_textmode');
         element_visible('#res_DVD_x86_64_doc');
     };
+    my $modules = 'kate,zypper_up';
     subtest 'jobs containing all the modules separated by comma are present' 
=> sub {
-        my $modules = 'kate,zypper_up';
         my $number_of_found_jobs = 2;
         
$driver->get("/tests/overview?arch=&distri=opensuse&modules=$modules&modules_result=$result");
         my @jobs = $driver->find_elements($JOB_ICON_SELECTOR);
@@ -442,6 +444,11 @@
         element_visible('#res_DVD_i586_kde');
         element_visible('#res_DVD_i586_textmode');
     };
+    subtest 'combining module result and test result filters' => sub {
+        $driver->get("/tests/overview?result=$result&modules_result=$result");
+        my $jobs = $driver->execute_script($query_all_job_ids_sorted);
+        is_deeply $jobs, [qw(jobid_td_99938 jobid_td_99946)], 'expected jobs 
present';
+    };
 };
 
 subtest 'filtering by module_re' => sub {

++++++ openQA.obsinfo ++++++
--- /var/tmp/diff_new_pack.B8xSqO/_old  2025-12-12 21:42:26.304023181 +0100
+++ /var/tmp/diff_new_pack.B8xSqO/_new  2025-12-12 21:42:26.308023350 +0100
@@ -1,5 +1,5 @@
 name: openQA
-version: 5.1765365298.9af08171
-mtime: 1765365298
-commit: 9af081713946f8a6bc765d509a3ce855b547fdcf
+version: 5.1765469360.5c0525b5
+mtime: 1765469360
+commit: 5c0525b50074bae31379e7f21d31810747bc1fbe
 

Reply via email to