From 42429f7ba4e258153a5817478d55915fa863211e Mon Sep 17 00:00:00 2001 From: Darragh Bailey Date: Thu, 7 Sep 2023 15:40:29 +0100 Subject: [PATCH] Add acceptance tests around halt behaviour (#1773) Ensure acceptance tests capture halt behaviour to prevent future regression around graceful and forced halt. Related-to: #1765 --- spec/acceptance/shutdown_halt_spec.rb | 66 +++++++++++++++++++ .../default_settings/Vagrantfile | 2 + 2 files changed, 68 insertions(+) create mode 100644 spec/acceptance/shutdown_halt_spec.rb diff --git a/spec/acceptance/shutdown_halt_spec.rb b/spec/acceptance/shutdown_halt_spec.rb new file mode 100644 index 0000000..374cd81 --- /dev/null +++ b/spec/acceptance/shutdown_halt_spec.rb @@ -0,0 +1,66 @@ +# frozen_string_literal: true + +require_relative '../spec_helper' + +describe 'shutdown and halt', acceptance: true do + include_context 'libvirt_acceptance' + + before do + environment.skeleton('default_settings') + end + + after do + assert_execute('vagrant', 'destroy', '--force') + end + + context 'when system accessible' do + it 'graceful shutdown should succeed' do + status('Test: machine is created successfully') + result = environment.execute('vagrant', 'up') + expect(result).to exit_with(0) + + status('Test: Halt') + result = environment.execute('vagrant', 'halt') + expect(result).to exit_with(0) + + status('Test: validate output') + expect(result.stdout).to match(/Attempting graceful shutdown of VM/) + expect(result.stdout).to_not match(/Halting domain.../) + end + + it 'forced halt should skip graceful and succeed' do + status('Test: machine is created successfully') + result = environment.execute('vagrant', 'up') + expect(result).to exit_with(0) + + status('Test: Halt') + result = environment.execute('vagrant', 'halt', '-f') + expect(result).to exit_with(0) + + status('Test: validate output') + expect(result.stdout).to_not match(/Attempting graceful shutdown of VM/) + expect(result.stdout).to match(/Halting domain.../) + end + end + + context 'when system hung' do + it 'should call halt after failed graceful' do + status('Test: machine is created successfully') + result = environment.execute('vagrant', 'up') + expect(result).to exit_with(0) + + status('Test: Trigger crash to prevent graceful halt working') + result = environment.execute('vagrant', 'ssh', '-c', 'nohup sudo sh -c \'echo -n c > /proc/sysrq-trigger\' >/dev/null 2>&1