From a5d56e3b5443263b53b0487c81125123411bd0cf Mon Sep 17 00:00:00 2001 From: Philip Hands Date: Wed, 11 May 2016 17:11:01 +0200 Subject: move cucumber things under cucumber/ --- cucumber/features/step_definitions/snapshots.rb | 257 ++++++++++++++++++++++++ 1 file changed, 257 insertions(+) create mode 100644 cucumber/features/step_definitions/snapshots.rb (limited to 'cucumber/features/step_definitions/snapshots.rb') diff --git a/cucumber/features/step_definitions/snapshots.rb b/cucumber/features/step_definitions/snapshots.rb new file mode 100644 index 00000000..13e4a5b6 --- /dev/null +++ b/cucumber/features/step_definitions/snapshots.rb @@ -0,0 +1,257 @@ +def checkpoints + { + 'boot-d-i-to-tasksel' => { + :description => "I have started Debian Installer and stopped at the Tasksel prompt", + #:parent_checkpoint => 'no-network-logged-in', + :steps => [ + 'I create a 8 GiB disk named "target"', + 'I plug ide drive "target"', + 'I start the computer', + 'the computer boots DebianInstaller', + 'I select British English', + 'I accept the hostname, using "example.com" as the domain', + 'I set the root password to "rootme"', + 'I set the password for "Philip Hands" to be "verysecret"', + 'I select full-disk, single-filesystem partitioning', + 'I note that the Base system is being installed', + 'I accept the default mirror', + 'I ignore Popcon', + 'we reach the Tasksel prompt', + ], + }, + + 'debian-minimal-install' => { + :description => "I have installed Minimal Debian", + :parent_checkpoint => 'boot-d-i-to-tasksel', + :steps => [ + 'I hit ENTER', + 'I install GRUB', + 'I allow reboot after the install is complete', + 'I wait for the reboot', + 'I power off the computer', + 'the computer is set to boot from ide drive "target"', + ], + }, + + 'debian-gnome-install' => { + :description => "I have installed Gnome Desktop Debian", + :parent_checkpoint => 'boot-d-i-to-tasksel', + :steps => [ + 'I select the Desktop task', + 'I install GRUB', + 'I allow reboot after the install is complete', + 'I wait for the reboot', + 'I power off the computer', + 'the computer is set to boot from ide drive "target"', + ], + }, + + 'tails-greeter' => { + :description => "I have started Tails from DVD without network and stopped at Tails Greeter's login screen", + :parent_checkpoint => nil, + :steps => [ + 'the network is unplugged', + 'I start the computer', + 'the computer boots Tails' + ], + }, + + 'no-network-logged-in' => { + :description => "I have started Tails from DVD without network and logged in", + :parent_checkpoint => "tails-greeter", + :steps => [ + 'I log in to a new session', + 'Tails Greeter has dealt with the sudo password', + 'the Tails desktop is ready', + ], + }, + + 'with-no-network-and-i2p' => { + :temporary => true, + :description => 'I have started Tails from DVD with I2P enabled and logged in', + :steps => [ + 'I set Tails to boot with options "i2p"', + 'the network is unplugged', + 'I start the computer', + 'the computer boots Tails', + 'I log in to a new session', + 'the Tails desktop is ready', + ], + }, + + 'with-network-and-i2p' => { + :temporary => true, + :description => 'I have started Tails from DVD with I2P enabled and logged in and the network is connected', + :parent_checkpoint => "with-no-network-and-i2p", + :steps => [ + 'the network is plugged', + 'Tor is ready', + 'I2P is running', + 'all notifications have disappeared', + 'available upgrades have been checked', + "I2P's reseeding completed", + ], + }, + + 'with-network-logged-in' => { + :description => "I have started Tails from DVD and logged in and the network is connected", + :parent_checkpoint => "no-network-logged-in", + :steps => [ + 'the network is plugged', + 'Tor is ready', + 'all notifications have disappeared', + 'available upgrades have been checked', + ], + }, + + 'no-network-bridge-mode' => { + :temporary => true, + :description => "I have started Tails from DVD without network and logged in with bridge mode enabled", + :parent_checkpoint => "tails-greeter", + :steps => [ + 'I enable more Tails Greeter options', + 'I enable the specific Tor configuration option', + 'I log in to a new session', + 'Tails Greeter has dealt with the sudo password', + 'the Tails desktop is ready', + 'all notifications have disappeared', + ], + }, + + 'no-network-logged-in-sudo-passwd' => { + :temporary => true, + :description => "I have started Tails from DVD without network and logged in with an administration password", + :parent_checkpoint => "tails-greeter", + :steps => [ + 'I enable more Tails Greeter options', + 'I set an administration password', + 'I log in to a new session', + 'Tails Greeter has dealt with the sudo password', + 'the Tails desktop is ready', + ], + }, + + 'with-network-logged-in-sudo-passwd' => { + :temporary => true, + :description => "I have started Tails from DVD and logged in with an administration password and the network is connected", + :parent_checkpoint => "no-network-logged-in-sudo-passwd", + :steps => [ + 'the network is plugged', + 'Tor is ready', + 'all notifications have disappeared', + 'available upgrades have been checked', + ], + }, + + 'usb-install-tails-greeter' => { + :description => "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen", + :parent_checkpoint => 'no-network-logged-in', + :steps => [ + 'I create a 4 GiB disk named "__internal"', + 'I plug USB drive "__internal"', + 'I "Clone & Install" Tails to USB drive "__internal"', + 'the running Tails is installed on USB drive "__internal"', + 'there is no persistence partition on USB drive "__internal"', + 'I shutdown Tails and wait for the computer to power off', + 'I start Tails from USB drive "__internal" with network unplugged', + 'the boot device has safe access rights', + 'Tails is running from USB drive "__internal"', + 'there is no persistence partition on USB drive "__internal"', + 'process "udev-watchdog" is running', + 'udev-watchdog is monitoring the correct device', + ], + }, + + 'usb-install-logged-in' => { + :description => "I have started Tails without network from a USB drive without a persistent partition and logged in", + :parent_checkpoint => 'usb-install-tails-greeter', + :steps => [ + 'I log in to a new session', + 'the Tails desktop is ready', + ], + }, + + 'usb-install-with-persistence-tails-greeter' => { + :description => "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen", + :parent_checkpoint => 'usb-install-logged-in', + :steps => [ + 'I create a persistent partition', + 'a Tails persistence partition exists on USB drive "__internal"', + 'I shutdown Tails and wait for the computer to power off', + 'I start Tails from USB drive "__internal" with network unplugged', + 'the boot device has safe access rights', + 'Tails is running from USB drive "__internal"', + 'process "udev-watchdog" is running', + 'udev-watchdog is monitoring the correct device', + ], + }, + + 'usb-install-with-persistence-logged-in' => { + :description => "I have started Tails without network from a USB drive with a persistent partition enabled and logged in", + :parent_checkpoint => 'usb-install-with-persistence-tails-greeter', + :steps => [ + 'I enable persistence', + 'I log in to a new session', + 'the Tails desktop is ready', + 'all persistence presets are enabled', + 'all persistent filesystems have safe access rights', + 'all persistence configuration files have safe access rights', + 'all persistent directories have safe access rights', + ], + }, + } +end + +def reach_checkpoint(name) + scenario_indent = " "*4 + step_indent = " "*6 + + step "a computer" + if VM.snapshot_exists?(name) + $vm.restore_snapshot(name) + post_snapshot_restore_hook + else + checkpoint = checkpoints[name] + checkpoint_description = checkpoint[:description] + parent_checkpoint = checkpoint[:parent_checkpoint] + steps = checkpoint[:steps] + if parent_checkpoint + if VM.snapshot_exists?(parent_checkpoint) + $vm.restore_snapshot(parent_checkpoint) + else + reach_checkpoint(parent_checkpoint) + end + post_snapshot_restore_hook + end + debug_log(scenario_indent + "Checkpoint: #{checkpoint_description}", + :color => :white) + step_action = "Given" + if parent_checkpoint + parent_description = checkpoints[parent_checkpoint][:description] + debug_log(step_indent + "#{step_action} #{parent_description}", + :color => :green) + step_action = "And" + end + steps.each do |s| + begin + step(s) + rescue Exception => e + debug_log(scenario_indent + + "Step failed while creating checkpoint: #{s}", + :color => :red) + raise e + end + debug_log(step_indent + "#{step_action} #{s}", :color => :green) + step_action = "And" + end + $vm.save_snapshot(name) + end +end + +# For each checkpoint we generate a step to reach it. +checkpoints.each do |name, desc| + step_regex = Regexp.new("^#{Regexp.escape(desc[:description])}$") + Given step_regex do + reach_checkpoint(name) + end +end -- cgit v1.2.3-70-g09d2