diff options
author | Philip Hands <phil@hands.com> | 2016-05-11 17:11:01 +0200 |
---|---|---|
committer | Philip Hands <phil@hands.com> | 2016-05-11 17:11:01 +0200 |
commit | a5d56e3b5443263b53b0487c81125123411bd0cf (patch) | |
tree | 71b1bdafc0a5978bca9073609eff33e228e29a12 /cucumber/features/step_definitions/encryption.rb | |
parent | 555d9414f758cc0062eff700a0352ae177fd9be5 (diff) | |
download | jenkins.debian.net-a5d56e3b5443263b53b0487c81125123411bd0cf.tar.xz |
move cucumber things under cucumber/
Diffstat (limited to 'cucumber/features/step_definitions/encryption.rb')
-rw-r--r-- | cucumber/features/step_definitions/encryption.rb | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/cucumber/features/step_definitions/encryption.rb b/cucumber/features/step_definitions/encryption.rb new file mode 100644 index 00000000..9f7f1b96 --- /dev/null +++ b/cucumber/features/step_definitions/encryption.rb @@ -0,0 +1,133 @@ +def seahorse_menu_click_helper(main, sub, verify = nil) + try_for(60) do + step "process \"#{verify}\" is running" if verify + @screen.hide_cursor + @screen.wait_and_click(main, 10) + @screen.wait_and_click(sub, 10) + return + end +end + +Given /^I generate an OpenPGP key named "([^"]+)" with password "([^"]+)"$/ do |name, pwd| + @passphrase = pwd + @key_name = name + gpg_key_recipie = <<EOF + Key-Type: RSA + Key-Length: 4096 + Subkey-Type: RSA + Subkey-Length: 4096 + Name-Real: #{@key_name} + Name-Comment: Blah + Name-Email: #{@key_name}@test.org + Expire-Date: 0 + Passphrase: #{pwd} + %commit +EOF + gpg_key_recipie.split("\n").each do |line| + $vm.execute("echo '#{line}' >> /tmp/gpg_key_recipie", :user => LIVE_USER) + end + c = $vm.execute("gpg --batch --gen-key < /tmp/gpg_key_recipie", + :user => LIVE_USER) + assert(c.success?, "Failed to generate OpenPGP key:\n#{c.stderr}") +end + +When /^I type a message into gedit$/ do + step 'I start "Gedit" via the GNOME "Accessories" applications menu' + @screen.wait_and_click("GeditWindow.png", 20) + # We don't have a good visual indicator for when we can continue. Without the + # sleep we may start typing in the gedit window far too soon, causing + # keystrokes to go missing. + sleep 5 + @screen.type("ATTACK AT DAWN") +end + +def maybe_deal_with_pinentry + begin + @screen.wait_and_click("PinEntryPrompt.png", 10) + # Without this sleep here (and reliable visual indicators) we can sometimes + # miss keystrokes by typing too soon. This sleep prevents this problem from + # coming up. + sleep 5 + @screen.type(@passphrase + Sikuli::Key.ENTER) + rescue FindFailed + # The passphrase was cached or we wasn't prompted at all (e.g. when + # only encrypting to a public key) + end +end + +def gedit_copy_all_text + context_menu_helper('GeditWindow.png', 'GeditStatusBar.png', 'GeditSelectAll.png') + context_menu_helper('GeditWindow.png', 'GeditStatusBar.png', 'GeditCopy.png') +end + +def paste_into_a_new_tab + @screen.wait_and_click("GeditNewTab.png", 20) + context_menu_helper('GeditWindow.png', 'GeditStatusBar.png', 'GeditPaste.png') +end + +def encrypt_sign_helper + gedit_copy_all_text + seahorse_menu_click_helper('GpgAppletIconNormal.png', 'GpgAppletSignEncrypt.png') + @screen.wait_and_click("GpgAppletChooseKeyWindow.png", 30) + # We don't have a good visual indicator for when we can continue without + # keystrokes being lost. + sleep 5 + yield + maybe_deal_with_pinentry + paste_into_a_new_tab +end + +def decrypt_verify_helper(icon) + gedit_copy_all_text + seahorse_menu_click_helper(icon, 'GpgAppletDecryptVerify.png') + maybe_deal_with_pinentry + @screen.wait("GpgAppletResults.png", 20) + @screen.wait("GpgAppletResultsMsg.png", 20) +end + +When /^I encrypt the message using my OpenPGP key$/ do + encrypt_sign_helper do + @screen.type(@key_name + Sikuli::Key.ENTER + Sikuli::Key.ENTER) + end +end + +Then /^I can decrypt the encrypted message$/ do + decrypt_verify_helper("GpgAppletIconEncrypted.png") + @screen.wait("GpgAppletResultsEncrypted.png", 20) +end + +When /^I sign the message using my OpenPGP key$/ do + encrypt_sign_helper do + @screen.type(Sikuli::Key.TAB + Sikuli::Key.DOWN + Sikuli::Key.ENTER) + end +end + +Then /^I can verify the message's signature$/ do + decrypt_verify_helper("GpgAppletIconSigned.png") + @screen.wait("GpgAppletResultsSigned.png", 20) +end + +When /^I both encrypt and sign the message using my OpenPGP key$/ do + encrypt_sign_helper do + @screen.wait_and_click('GpgAppletEncryptionKey.png', 20) + @screen.type(Sikuli::Key.SPACE) + @screen.wait('GpgAppletKeySelected.png', 10) + @screen.type(Sikuli::Key.TAB + Sikuli::Key.DOWN + Sikuli::Key.ENTER) + @screen.type(Sikuli::Key.ENTER) + end +end + +Then /^I can decrypt and verify the encrypted message$/ do + decrypt_verify_helper("GpgAppletIconEncrypted.png") + @screen.wait("GpgAppletResultsEncrypted.png", 20) + @screen.wait("GpgAppletResultsSigned.png", 20) +end + +When /^I symmetrically encrypt the message with password "([^"]+)"$/ do |pwd| + @passphrase = pwd + gedit_copy_all_text + seahorse_menu_click_helper('GpgAppletIconNormal.png', 'GpgAppletEncryptPassphrase.png') + maybe_deal_with_pinentry # enter password + maybe_deal_with_pinentry # confirm password + paste_into_a_new_tab +end |