summaryrefslogtreecommitdiffstats
path: root/cucumber/features/step_definitions/snapshots.rb
diff options
context:
space:
mode:
authorPhilip Hands <phil@hands.com>2016-05-11 17:11:01 +0200
committerPhilip Hands <phil@hands.com>2016-05-11 17:11:01 +0200
commita5d56e3b5443263b53b0487c81125123411bd0cf (patch)
tree71b1bdafc0a5978bca9073609eff33e228e29a12 /cucumber/features/step_definitions/snapshots.rb
parent555d9414f758cc0062eff700a0352ae177fd9be5 (diff)
downloadjenkins.debian.net-a5d56e3b5443263b53b0487c81125123411bd0cf.tar.xz
move cucumber things under cucumber/
Diffstat (limited to 'cucumber/features/step_definitions/snapshots.rb')
-rw-r--r--cucumber/features/step_definitions/snapshots.rb257
1 files changed, 257 insertions, 0 deletions
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