From 18aef076ee3e984074b0266a5378ec1928d8e9a6 Mon Sep 17 00:00:00 2001 From: Adam Ruzicka Date: Tue, 12 Nov 2024 09:49:34 +0000 Subject: [PATCH] Fixes #38006 - Allow extension of list of packages with scap contents --- lib/foreman_openscap/bulk_upload.rb | 21 ++++++++++++------- test/lib/foreman_openscap/bulk_upload_test.rb | 6 +++--- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/lib/foreman_openscap/bulk_upload.rb b/lib/foreman_openscap/bulk_upload.rb index 81ada2e85..3e0c6ef89 100644 --- a/lib/foreman_openscap/bulk_upload.rb +++ b/lib/foreman_openscap/bulk_upload.rb @@ -7,21 +7,28 @@ def initialize @result = OpenStruct.new(:errors => [], :results => []) end - def files_from_guide - `rpm -ql scap-security-guide | grep ds.xml`.split + def security_guide_packages + %w(scap-security-guide) end - def scap_guide_installed? - `rpm -qa | grep scap-security-guide`.present? + def files_from_guide(package) + `rpm -ql #{package} | grep ds.xml`.split + end + + def package_installed?(package) + `rpm -qa | grep #{package}`.present? end def upload_from_scap_guide - unless scap_guide_installed? - @result.errors.push(_("Can't find scap-security-guide RPM, are you sure it is installed on your server?")) + package = security_guide_packages.find { |p| package_installed? p } + unless package + joined_packages = security_guide_packages.join(', ') + msg = _("Can't find %{packages} RPM(s), are you sure it is installed on your server?") + @result.errors.push(msg % {packages: joined_packages}) return @result end - upload_from_files(files_from_guide, true) + upload_from_files(files_from_guide(package), true) end def upload_from_files(files_array, from_scap_guide = false) diff --git a/test/lib/foreman_openscap/bulk_upload_test.rb b/test/lib/foreman_openscap/bulk_upload_test.rb index 1aa714340..d3088e694 100644 --- a/test/lib/foreman_openscap/bulk_upload_test.rb +++ b/test/lib/foreman_openscap/bulk_upload_test.rb @@ -48,14 +48,14 @@ class BulkUploadTest < ActiveSupport::TestCase test 'should handle case when scap security guide is not installed' do upload = ForemanOpenscap::BulkUpload.new - upload.stubs(:scap_guide_installed?).returns(false) + upload.stubs(:package_installed?).returns(false) res = upload.upload_from_scap_guide - assert_equal "Can't find scap-security-guide RPM, are you sure it is installed on your server?", res.errors.first + assert_equal "Can't find scap-security-guide RPM(s), are you sure it is installed on your server?", res.errors.first end test 'should upload files from guide' do upload = ForemanOpenscap::BulkUpload.new - upload.stubs(:scap_guide_installed?).returns(true) + upload.stubs(:package_installed?).returns(true) upload.stubs(:files_from_guide).returns(["#{ForemanOpenscap::Engine.root}/test/files/scap_contents/ssg-fedora-ds.xml"]) assert_difference('ForemanOpenscap::ScapContent.count', 1) do upload.upload_from_scap_guide