From 91be6bb36e60f808c3af2b8edc116388620138aa Mon Sep 17 00:00:00 2001 From: Evgeni Golov Date: Thu, 10 Oct 2024 11:00:44 +0200 Subject: [PATCH] move the logic which versions are supported into the downstream concern --- definitions/features/satellite.rb | 2 +- definitions/scenarios/satellite_upgrade.rb | 5 ++--- lib/foreman_maintain/concerns/downstream.rb | 19 +++++++++++++++++++ .../scenarios/capsule_upgrade_test.rb | 1 + .../scenarios/satellite_upgrade_test.rb | 1 + .../scenarios/self_upgrade_test.rb | 2 ++ test/definitions/scenarios/update_test.rb | 4 ++++ test/definitions/test_helper.rb | 9 +++++++++ 8 files changed, 39 insertions(+), 4 deletions(-) diff --git a/definitions/features/satellite.rb b/definitions/features/satellite.rb index 724535497..cb17444de 100644 --- a/definitions/features/satellite.rb +++ b/definitions/features/satellite.rb @@ -11,7 +11,7 @@ class Features::Satellite < ForemanMaintain::Feature end def target_version - '6.16' + satellite_maintain_target_version end def current_version diff --git a/definitions/scenarios/satellite_upgrade.rb b/definitions/scenarios/satellite_upgrade.rb index 6036aac82..ae8de8f00 100644 --- a/definitions/scenarios/satellite_upgrade.rb +++ b/definitions/scenarios/satellite_upgrade.rb @@ -4,15 +4,14 @@ def self.upgrade_metadata(&block) metadata do tags :upgrade_scenario confine do - (feature(:instance).downstream&.current_minor_version == '6.15' || \ - ForemanMaintain.upgrade_in_progress == '6.16') + feature(:instance).downstream&.satellite_upgrade_allowed? end instance_eval(&block) end end def target_version - '6.16' + feature(:instance).downstream&.satellite_maintain_target_version end end diff --git a/lib/foreman_maintain/concerns/downstream.rb b/lib/foreman_maintain/concerns/downstream.rb index f96f1e04f..ae738debe 100644 --- a/lib/foreman_maintain/concerns/downstream.rb +++ b/lib/foreman_maintain/concerns/downstream.rb @@ -1,6 +1,8 @@ module ForemanMaintain module Concerns module Downstream + SATELLITE_MAINTAIN_CONFIG = '/usr/share/satellite-maintain/config.yml'.freeze + def current_version raise NotImplementedError end @@ -46,8 +48,25 @@ def fm_pkg_and_cmd_name %w[satellite-maintain satellite-maintain] end + def satellite_maintain_target_version + satellite_maintain_config['current_satellite_version'] + end + + def satellite_upgrade_allowed? + current_minor_version == satellite_maintain_config['previous_satellite_version'] || + ForemanMaintain.upgrade_in_progress == satellite_maintain_target_version + end + private + def satellite_maintain_config + if File.exist?(SATELLITE_MAINTAIN_CONFIG) + YAML.load_file(SATELLITE_MAINTAIN_CONFIG) + else + raise "Could not load satellite-maintain configuration file #{SATELLITE_MAINTAIN_CONFIG}." + end + end + def rh_repos(server_version) server_version = version(server_version) rh_repos = main_rh_repos diff --git a/test/definitions/scenarios/capsule_upgrade_test.rb b/test/definitions/scenarios/capsule_upgrade_test.rb index aeac1ccc7..b1854caf0 100644 --- a/test/definitions/scenarios/capsule_upgrade_test.rb +++ b/test/definitions/scenarios/capsule_upgrade_test.rb @@ -5,6 +5,7 @@ before(:each) do assume_feature_present(:capsule) + mock_satellite_maintain_config end describe Scenarios::Satellite::PreUpgradeCheck do diff --git a/test/definitions/scenarios/satellite_upgrade_test.rb b/test/definitions/scenarios/satellite_upgrade_test.rb index cc0419d71..0002b9292 100644 --- a/test/definitions/scenarios/satellite_upgrade_test.rb +++ b/test/definitions/scenarios/satellite_upgrade_test.rb @@ -5,6 +5,7 @@ before(:each) do assume_satellite_present + mock_satellite_maintain_config end describe Scenarios::Satellite::Abstract do diff --git a/test/definitions/scenarios/self_upgrade_test.rb b/test/definitions/scenarios/self_upgrade_test.rb index a5077be55..6984323e9 100644 --- a/test/definitions/scenarios/self_upgrade_test.rb +++ b/test/definitions/scenarios/self_upgrade_test.rb @@ -7,6 +7,7 @@ before do File.stubs(:exist?).with('/etc/redhat-release').returns(true) + mock_satellite_maintain_config end let(:scenario) do @@ -59,6 +60,7 @@ before do File.stubs(:exist?).with('/etc/redhat-release').returns(true) + mock_satellite_maintain_config end it 'runs successfully for downstream Satellite' do diff --git a/test/definitions/scenarios/update_test.rb b/test/definitions/scenarios/update_test.rb index 39b9700e5..ef7376499 100644 --- a/test/definitions/scenarios/update_test.rb +++ b/test/definitions/scenarios/update_test.rb @@ -3,6 +3,10 @@ describe "update scenarios" do include DefinitionsTestHelper + before(:each) do + mock_satellite_maintain_config + end + it 'runs if versions match' do assume_satellite_present Features::Instance.any_instance.expects(:current_version).returns('6.16') diff --git a/test/definitions/test_helper.rb b/test/definitions/test_helper.rb index 0099aff5c..d6b6848a2 100644 --- a/test/definitions/test_helper.rb +++ b/test/definitions/test_helper.rb @@ -209,6 +209,15 @@ def assume_service_missing(name, priority = 30) yield service if block_given? end end + + def mock_satellite_maintain_config + config = { + 'current_satellite_version' => '6.16', + 'previous_satellite_version' => '6.15', + } + Features::Satellite.any_instance.stubs(:satellite_maintain_config).returns(config) + Features::Capsule.any_instance.stubs(:satellite_maintain_config).returns(config) + end end TEST_DIR = File.dirname(__FILE__)