summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorintrigeri <intrigeri@boum.org>2019-09-15 09:41:39 +0000
committerintrigeri <intrigeri@boum.org>2019-09-15 09:41:39 +0000
commit2f23c04180e68353dadd6d05439a47b898609250 (patch)
tree18729a4aec8dfcc4c98dce157d8bd988ba0614da
parent79f86a310a3568a5ef2f4646b216b1be1fab7144 (diff)
parentb856639adf6ed9e1c86876f26c00d1de47a22ec0 (diff)
Merge branch 'bugfix/17057-ftbfs-ublock-patch' into feature/16792-only-update-chutney+force-all-testsfeature/16792-only-update-chutney+force-all-tests
-rw-r--r--config/APT_overlays.d/bugfix-17023-reproducible-mimeinfo-cache0
-rw-r--r--config/binary_rootfs/squashfs.sort5
-rw-r--r--config/chroot_apt/preferences4
-rw-r--r--config/chroot_local-includes/usr/lib/systemd/user/tails-add-GNOME-bookmarks.service6
-rw-r--r--config/chroot_local-includes/usr/share/tails/uBlock-disable-autoUpdate.diff2
-rw-r--r--features/apt.feature1
-rw-r--r--features/images/GeditCopy.pngbin671 -> 0 bytes
-rw-r--r--features/images/GeditNewTab.pngbin486 -> 0 bytes
-rw-r--r--features/images/GeditPaste.pngbin637 -> 0 bytes
-rw-r--r--features/images/GeditSelectAll.pngbin840 -> 0 bytes
-rw-r--r--features/images/GeditStatusBar.pngbin969 -> 0 bytes
-rw-r--r--features/images/GeditWindow.pngbin1465 -> 0 bytes
-rw-r--r--features/images/GpgAppletEncryptPassphrase.pngbin1748 -> 2703 bytes
-rw-r--r--features/images/Gtk3PrintButton.pngbin4868 -> 4770 bytes
-rw-r--r--features/images/Gtk3PrintFileDialog.pngbin2014 -> 5066 bytes
-rw-r--r--features/images/TorBrowserPersistentFilesBookmark.pngbin2116 -> 2319 bytes
-rw-r--r--features/images/TorBrowserPrintButton.pngbin0 -> 4766 bytes
-rw-r--r--features/images/TorBrowserPrintFileDialog.pngbin0 -> 2341 bytes
-rw-r--r--features/pidgin.feature3
-rw-r--r--features/step_definitions/apt.rb19
-rw-r--r--features/step_definitions/browser.rb7
-rw-r--r--features/step_definitions/common_steps.rb44
-rw-r--r--features/step_definitions/encryption.rb31
-rw-r--r--features/step_definitions/pidgin.rb47
-rw-r--r--features/step_definitions/unsafe_browser.rb9
-rw-r--r--features/step_definitions/veracrypt.rb4
-rw-r--r--features/support/config.rb1
-rw-r--r--features/support/helpers/ctcp_helper.rb126
-rw-r--r--features/support/helpers/dogtail.rb13
-rw-r--r--features/support/helpers/sikuli_helper.rb57
-rw-r--r--features/support/helpers/vm_helper.rb2
-rw-r--r--features/torified_browsing.feature6
-rwxr-xr-xrun_test_suite1
-rw-r--r--wiki/src/contribute.de.po20
-rw-r--r--wiki/src/contribute.es.po38
-rw-r--r--wiki/src/contribute.fa.po20
-rw-r--r--wiki/src/contribute.fr.po38
-rw-r--r--wiki/src/contribute.it.po20
-rw-r--r--wiki/src/contribute.mdwn18
-rw-r--r--wiki/src/contribute.pt.po36
-rw-r--r--wiki/src/contribute/how/code.mdwn2
-rw-r--r--wiki/src/contribute/release_process.mdwn18
-rw-r--r--wiki/src/contribute/release_process/test/setup.mdwn138
43 files changed, 345 insertions, 391 deletions
diff --git a/config/APT_overlays.d/bugfix-17023-reproducible-mimeinfo-cache b/config/APT_overlays.d/bugfix-17023-reproducible-mimeinfo-cache
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/config/APT_overlays.d/bugfix-17023-reproducible-mimeinfo-cache
diff --git a/config/binary_rootfs/squashfs.sort b/config/binary_rootfs/squashfs.sort
index 51e451f..98c370a 100644
--- a/config/binary_rootfs/squashfs.sort
+++ b/config/binary_rootfs/squashfs.sort
@@ -19,7 +19,6 @@ bin/gzip 32747
etc/sysctl.conf 32746
etc/bilibop/bilibop.conf 32745
bin/loadkeys 32744
-lib/live/mount/overlay/etc/console-setup/cached_UTF-8_del.kmap.gz 32743
bin/which 32742
etc/laptop-mode/conf.d/ac97-powersave.conf 32741
etc/laptop-mode/conf.d/auto-hibernate.conf 32740
@@ -245,8 +244,6 @@ var/log/lastlog 32457
sbin/pam_tally2 32447
lib/x86_64-linux-gnu/libpam.so.0.84.2 32446
usr/bin/find 32445
-lib/live/mount/overlay/etc/skel/.config/autostart/end-profile.desktop 32444
-etc/skel/.config/autostart/end-profile.desktop 32443
etc/skel/.config/Trolltech.conf 32442
etc/skel/.config/keepassxc/keepassxc.ini 32441
etc/skel/.config/onionshare/onionshare.json 32440
@@ -579,7 +576,6 @@ usr/lib/x86_64-linux-gnu/gvfs/libgvfscommon.so 31885
usr/lib/python3.7/ipaddress.py 31877
usr/lib/x86_64-linux-gnu/libssl3.so 31875
etc/shells 31872
-lib/live/mount/overlay/var/log/wtmp 31870
var/log/wtmp 31869
usr/lib/x86_64-linux-gnu/libplds4.so 31868
lib/systemd/system/polkit.service 31867
@@ -2986,7 +2982,6 @@ usr/share/macchanger/OUI.list 28452
usr/share/macchanger/wireless.list 28448
lib/modules/5.2.0-2-amd64/kernel/drivers/net/wireless/intel/iwlwifi/mvm/iwlmvm.ko 28447
sbin/ifup 28445
-lib/live/mount/overlay/etc/network/interfaces 28444
etc/network/interfaces 28443
lib/systemd/systemd-sysctl 28442
etc/sysctl.d/disable_ipv6.conf 28441
diff --git a/config/chroot_apt/preferences b/config/chroot_apt/preferences
index 7ce052b..3fafe0a 100644
--- a/config/chroot_apt/preferences
+++ b/config/chroot_apt/preferences
@@ -16,8 +16,8 @@ Pin: origin deb.tails.boum.org
Pin-Priority: 999
Package: enigmail
-Pin: release o=Debian,n=bullseye
-Pin-Priority: 999
+Pin: origin deb.tails.boum.org
+Pin-Priority: -1
Package: firmware-b43-installer
Pin: release o=Debian,n=sid
diff --git a/config/chroot_local-includes/usr/lib/systemd/user/tails-add-GNOME-bookmarks.service b/config/chroot_local-includes/usr/lib/systemd/user/tails-add-GNOME-bookmarks.service
index a0151d4..90fd61d 100644
--- a/config/chroot_local-includes/usr/lib/systemd/user/tails-add-GNOME-bookmarks.service
+++ b/config/chroot_local-includes/usr/lib/systemd/user/tails-add-GNOME-bookmarks.service
@@ -2,8 +2,8 @@
Description=Add GTK bookmarks to some directories
Documentation=https://tails.boum.org/contribute/design/application_isolation/
ConditionUser=1000
-After=gvfs-metadata.service
-Requires=gvfs-metadata.service
+After=create-tor-browser-directories.service gvfs-metadata.service
+Requires=create-tor-browser-directories.service gvfs-metadata.service
[Service]
Type=oneshot
@@ -11,4 +11,4 @@ ExecStart=/usr/local/lib/add-GNOME-bookmarks
RemainAfterExit=yes
[Install]
-WantedBy=desktop.target
+WantedBy=gnome-early-initialization.target
diff --git a/config/chroot_local-includes/usr/share/tails/uBlock-disable-autoUpdate.diff b/config/chroot_local-includes/usr/share/tails/uBlock-disable-autoUpdate.diff
index 831a7e4..44470f8 100644
--- a/config/chroot_local-includes/usr/share/tails/uBlock-disable-autoUpdate.diff
+++ b/config/chroot_local-includes/usr/share/tails/uBlock-disable-autoUpdate.diff
@@ -1,6 +1,6 @@
--- a/usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/uBlock0@raymondhill.net/js/background.js 2019-07-07 21:57:21.000000000 +0000
+++ b/usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/uBlock0@raymondhill.net/js/background.js 2019-07-08 10:21:49.658415914 +0000
-@@ -73,7 +73,7 @@
+@@ -69,7 +69,7 @@
userSettings: {
advancedUserEnabled: false,
alwaysDetachLogger: true,
diff --git a/features/apt.feature b/features/apt.feature
index d10b0b0..c48c1ec 100644
--- a/features/apt.feature
+++ b/features/apt.feature
@@ -8,3 +8,4 @@ Feature: APT sources are correctly configured
And I start Tails from DVD with network unplugged and genuine APT sources and I login
Then the only hosts in APT sources are "vwakviie2ienjx6t.onion,sgvtcaew4bxjd7ln.onion,jenw7xbd6tf7vfhp.onion,sdscoq7snqtznauu.onion"
And no proposed-updates APT suite is enabled
+ And no experimental APT suite is enabled for deb.torproject.org
diff --git a/features/images/GeditCopy.png b/features/images/GeditCopy.png
deleted file mode 100644
index 2ef98af..0000000
--- a/features/images/GeditCopy.png
+++ /dev/null
Binary files differ
diff --git a/features/images/GeditNewTab.png b/features/images/GeditNewTab.png
deleted file mode 100644
index 4a04584..0000000
--- a/features/images/GeditNewTab.png
+++ /dev/null
Binary files differ
diff --git a/features/images/GeditPaste.png b/features/images/GeditPaste.png
deleted file mode 100644
index b6c9277..0000000
--- a/features/images/GeditPaste.png
+++ /dev/null
Binary files differ
diff --git a/features/images/GeditSelectAll.png b/features/images/GeditSelectAll.png
deleted file mode 100644
index d0ed857..0000000
--- a/features/images/GeditSelectAll.png
+++ /dev/null
Binary files differ
diff --git a/features/images/GeditStatusBar.png b/features/images/GeditStatusBar.png
deleted file mode 100644
index a5bb821..0000000
--- a/features/images/GeditStatusBar.png
+++ /dev/null
Binary files differ
diff --git a/features/images/GeditWindow.png b/features/images/GeditWindow.png
deleted file mode 100644
index 87ea3fa..0000000
--- a/features/images/GeditWindow.png
+++ /dev/null
Binary files differ
diff --git a/features/images/GpgAppletEncryptPassphrase.png b/features/images/GpgAppletEncryptPassphrase.png
index 3e73bfe..1abfacc 100644
--- a/features/images/GpgAppletEncryptPassphrase.png
+++ b/features/images/GpgAppletEncryptPassphrase.png
Binary files differ
diff --git a/features/images/Gtk3PrintButton.png b/features/images/Gtk3PrintButton.png
index e0f3678..3e34396 100644
--- a/features/images/Gtk3PrintButton.png
+++ b/features/images/Gtk3PrintButton.png
Binary files differ
diff --git a/features/images/Gtk3PrintFileDialog.png b/features/images/Gtk3PrintFileDialog.png
index ddce32b..3c49ac5 100644
--- a/features/images/Gtk3PrintFileDialog.png
+++ b/features/images/Gtk3PrintFileDialog.png
Binary files differ
diff --git a/features/images/TorBrowserPersistentFilesBookmark.png b/features/images/TorBrowserPersistentFilesBookmark.png
index dcef887..66aaf2b 100644
--- a/features/images/TorBrowserPersistentFilesBookmark.png
+++ b/features/images/TorBrowserPersistentFilesBookmark.png
Binary files differ
diff --git a/features/images/TorBrowserPrintButton.png b/features/images/TorBrowserPrintButton.png
new file mode 100644
index 0000000..477291c
--- /dev/null
+++ b/features/images/TorBrowserPrintButton.png
Binary files differ
diff --git a/features/images/TorBrowserPrintFileDialog.png b/features/images/TorBrowserPrintFileDialog.png
new file mode 100644
index 0000000..771a7c1
--- /dev/null
+++ b/features/images/TorBrowserPrintFileDialog.png
Binary files differ
diff --git a/features/pidgin.feature b/features/pidgin.feature
index 1e7a131..51a5aae 100644
--- a/features/pidgin.feature
+++ b/features/pidgin.feature
@@ -92,8 +92,7 @@ Feature: Chatting anonymously using Pidgin
And I close Pidgin's certificate manager
Then I cannot add a certificate from the "/live/overlay/home/amnesia/.gnupg" directory to Pidgin
- #13469
- @check_tor_leaks @fragile
+ @check_tor_leaks
Scenario: Using a persistent Pidgin configuration
Given I have started Tails without network from a USB drive with a persistent partition enabled and logged in
And the network is plugged
diff --git a/features/step_definitions/apt.rb b/features/step_definitions/apt.rb
index 15007ba..bbb2eed 100644
--- a/features/step_definitions/apt.rb
+++ b/features/step_definitions/apt.rb
@@ -1,11 +1,14 @@
require 'uri'
+def apt_sources
+ $vm.execute_successfully(
+ "cat /etc/apt/sources.list /etc/apt/sources.list.d/*"
+ ).stdout
+end
+
Given /^the only hosts in APT sources are "([^"]*)"$/ do |hosts_str|
hosts = hosts_str.split(',')
- apt_sources = $vm.execute_successfully(
- "cat /etc/apt/sources.list /etc/apt/sources.list.d/*"
- ).stdout.chomp
- apt_sources.each_line do |line|
+ apt_sources.chomp.each_line do |line|
next if ! line.start_with? "deb"
source_host = URI(line.split[1]).host
if !hosts.include?(source_host)
@@ -15,12 +18,14 @@ Given /^the only hosts in APT sources are "([^"]*)"$/ do |hosts_str|
end
Given /^no proposed-updates APT suite is enabled$/ do
- apt_sources = $vm.execute_successfully(
- 'cat /etc/apt/sources.list /etc/apt/sources.list.d/*'
- ).stdout
assert_no_match(/\s\S+-proposed-updates\s/, apt_sources)
end
+Given /^no experimental APT suite is enabled for deb[.]torproject[.]org$/ do
+ # sdscoq7snqtznauu.onion == deb.torproject.org
+ assert_no_match(/sdscoq7snqtznauu[.]onion.*experimental/, apt_sources)
+end
+
When /^I configure APT to use non-onion sources$/ do
script = <<-EOF
use strict;
diff --git a/features/step_definitions/browser.rb b/features/step_definitions/browser.rb
index 2de214e..0479d88 100644
--- a/features/step_definitions/browser.rb
+++ b/features/step_definitions/browser.rb
@@ -121,17 +121,18 @@ def page_has_loaded_in_the_Tor_Browser(page_titles, language)
browser_name = 'Tor Browser'
reload_action = 'Reload'
end
- try_for(120) {
+ try_for(180) {
# The 'Reload' button (graphically shown as a looping arrow)
# is only shown when a page has loaded, so once we see the
# expected title *and* this button has appeared, then we can be sure
# that the page has fully loaded.
- @torbrowser.child(reload_action, roleName: 'push button') and
@torbrowser.children(roleName: 'frame').any? { |frame|
page_titles
.map { |page_title| "#{page_title} - #{browser_name}" }
.any? { |page_title| page_title == frame.name }
- }
+ } and
+ @torbrowser.child(reload_action, roleName: 'push button',
+ showingOnly: true)
}
end
diff --git a/features/step_definitions/common_steps.rb b/features/step_definitions/common_steps.rb
index a79d689..b6acc60 100644
--- a/features/step_definitions/common_steps.rb
+++ b/features/step_definitions/common_steps.rb
@@ -1,3 +1,4 @@
+# coding: utf-8
require 'fileutils'
def post_vm_start_hook
@@ -8,21 +9,6 @@ def post_vm_start_hook
@screen.click_point(@screen.w - 1, @screen.h/2)
end
-def context_menu_helper(top, bottom, menu_item)
- try_for(60) do
- t = @screen.wait(top, 10)
- b = @screen.wait(bottom, 10)
- # In Sikuli, lower x == closer to the left, lower y == closer to the top
- assert(t.y < b.y)
- center = Sikuli::Location.new(((t.x + t.w) + b.x)/2,
- ((t.y + t.h) + b.y)/2)
- @screen.right_click(center)
- @screen.hide_cursor
- @screen.wait_and_click(menu_item, 10)
- return
- end
-end
-
def post_snapshot_restore_hook
$vm.wait_until_remote_shell_is_up
post_vm_start_hook
@@ -372,10 +358,11 @@ end
When /^I start the Tor Browser( in offline mode)?$/ do |offline|
step 'I start "Tor Browser" via GNOME Activities Overview'
if offline
- offline_prompt = Dogtail::Application.new('zenity')
- .dialog('Tor is not ready')
- start_button = offline_prompt.button('Start Tor Browser')
- start_button.grabFocus
+ start_button = Dogtail::Application.new('zenity')
+ .dialog('Tor is not ready', showingOnly: true)
+ .button('Start Tor Browser', showingOnly: true)
+ # Sometimes this click is lost. Maybe the dialog is not fully setup yet?
+ sleep 2
start_button.click
end
step "the Tor Browser has started#{offline}"
@@ -455,6 +442,15 @@ Given /^all notifications have disappeared$/ do
gnome_shell.child?('No Notifications', roleName: 'label', showingOnly: true)
end
@screen.type(Sikuli::Key.ESC)
+ # Increase the chances that by the time we leave this step, the
+ # notifications menu was closed and the desktop is back to its
+ # normal state. Otherwise, all kinds of trouble may arise: for
+ # example, pressing SUPER to open the Activities Overview sometimes
+ # fails (SUPER has no effect when the notifications menu is still
+ # opened). We sleep here, instead of in "I start […] via GNOME
+ # Activities Overview", because it's our responsibility to return to
+ # a normal desktop state that any following step can rely upon.
+ sleep 1
end
Then /^I (do not )?see "([^"]*)" after at most (\d+) seconds$/ do |negation, image, time|
@@ -782,13 +778,19 @@ When /^I can print the current page as "([^"]+[.]pdf)" to the (default downloads
print_dialog = @torbrowser.child('Print', roleName: 'dialog')
print_dialog.child('Print to File', 'table cell').click
print_dialog.child('~/Tor Browser/output.pdf', roleName: 'push button').click()
- @screen.wait("Gtk3PrintFileDialog.png", 10)
+ # Yes, TorBrowserPrintFileDialog.png != Gtk3PrintFileDialog.png.
+ # If you try to unite them, make sure this does not break the tests
+ # that use either.
+ @screen.wait("TorBrowserPrintFileDialog.png", 10)
# Only the file's basename is selected when the file selector dialog opens,
# so we type only the desired file's basename to replace it
$vm.set_clipboard(output_dir + '/' + output_file.sub(/[.]pdf$/, ''))
@screen.type('v', Sikuli::KeyModifier.CTRL)
@screen.type(Sikuli::Key.ENTER)
- @screen.wait_and_click("Gtk3PrintButton.png", 10)
+ # Yes, TorBrowserPrintButton.png != Gtk3PrintButton.png.
+ # If you try to unite them, make sure this does not break the tests
+ # that use either.
+ @screen.wait_and_click("TorBrowserPrintButton.png", 10)
try_for(30, :msg => "The page was not printed to #{output_dir}/#{output_file}") {
$vm.file_exist?("#{output_dir}/#{output_file}")
}
diff --git a/features/step_definitions/encryption.rb b/features/step_definitions/encryption.rb
index 3b20a5b..eabd317 100644
--- a/features/step_definitions/encryption.rb
+++ b/features/step_definitions/encryption.rb
@@ -1,3 +1,14 @@
+def gedit
+ @gedit ||= Dogtail::Application.new('gedit')
+end
+
+def gedit_text_buffer()
+ gedit
+ .child(roleName: 'frame', showingOnly: true)
+ .child(roleName: 'scroll pane', showingOnly: true)
+ .child(roleName: 'text', showingOnly: true)
+end
+
def seahorse_menu_click_helper(main, sub, verify = nil)
try_for(60) do
step "process \"#{verify}\" is running" if verify
@@ -33,12 +44,9 @@ end
When /^I type a message into gedit$/ do
step 'I start "gedit" via GNOME Activities Overview'
- @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")
+ text_buffer = gedit_text_buffer
+ text_buffer.grabFocus
+ text_buffer.typeText("ATTACK AT DAWN")
end
def maybe_deal_with_pinentry
@@ -56,13 +64,16 @@ def maybe_deal_with_pinentry
end
def gedit_copy_all_text
- context_menu_helper('GeditWindow.png', 'GeditStatusBar.png', 'GeditSelectAll.png')
- context_menu_helper('GeditWindow.png', 'GeditStatusBar.png', 'GeditCopy.png')
+ gedit_text_buffer.right_click
+ gedit.child('Select All', roleName: 'menu item', showingOnly: true).click
+ gedit_text_buffer.right_click
+ gedit.child('Copy', roleName: 'menu item', showingOnly: true).click
end
def gedit_paste_into_a_new_tab
- @screen.wait_and_click("GeditNewTab.png", 20)
- context_menu_helper('GeditWindow.png', 'GeditStatusBar.png', 'GeditPaste.png')
+ gedit.button('New').click
+ gedit_text_buffer.right_click
+ gedit.child('Paste', roleName: 'menu item', showingOnly: true).click
end
def encrypt_sign_helper
diff --git a/features/step_definitions/pidgin.rb b/features/step_definitions/pidgin.rb
index c4944c3..e2aa662 100644
--- a/features/step_definitions/pidgin.rb
+++ b/features/step_definitions/pidgin.rb
@@ -27,13 +27,6 @@ def wait_and_focus(img, time = 10, window)
end
end
-def focus_pidgin_irc_conversation_window(account)
- account = account.sub(/^irc\./, '')
- try_for(20) do
- $vm.focus_window(".*#{Regexp.escape(account)}$")
- end
-end
-
# This method should always fail (except with the option
# `return_shellcommand: true`) since we block Pidgin's D-Bus interface
# (#14612) ...
@@ -366,36 +359,16 @@ Then /^Pidgin successfully connects to the "([^"]+)" account$/ do |account|
end
end
-Then /^the "([^"]*)" account only responds to PING and VERSION CTCP requests$/ do |irc_server|
- ctcp_cmds = [
- "CLIENTINFO", "DATE", "ERRMSG", "FINGER", "PING", "SOURCE", "TIME",
- "USERINFO", "VERSION"
- ]
- expected_ctcp_replies = {
- "PING" => /^\d+$/,
- "VERSION" => /^Purple IRC$/
- }
- spam_target = configured_pidgin_accounts[irc_server]["nickname"]
- ctcp_check = CtcpChecker.new(irc_server, 6667, spam_target, ctcp_cmds,
- expected_ctcp_replies)
- ctcp_check.verify_ctcp_responses
-end
-
-Then /^I can join the( pre-configured)? "([^"]+)" channel on "([^"]+)"$/ do |preconfigured, channel, account|
- if preconfigured
- @screen.doubleClick(chan_image(account, channel, 'roster'))
- focus_pidgin_irc_conversation_window(account)
- else
- $vm.focus_window('Buddy List')
- @screen.wait_and_click("PidginBuddiesMenu.png", 20)
- @screen.wait_and_click("PidginBuddiesMenuJoinChat.png", 10)
- @screen.wait_and_click("PidginJoinChatWindow.png", 10)
- @screen.click_mid_right_edge("PidginJoinChatRoomLabel.png")
- @screen.type(channel)
- @screen.click("PidginJoinChatButton.png")
- @chat_room_jid = channel + "@" + account
- $vm.focus_window(@chat_room_jid)
- end
+Then /^I can join the "([^"]+)" channel on "([^"]+)"$/ do |channel, account|
+ $vm.focus_window('Buddy List')
+ @screen.wait_and_click("PidginBuddiesMenu.png", 20)
+ @screen.wait_and_click("PidginBuddiesMenuJoinChat.png", 10)
+ @screen.wait_and_click("PidginJoinChatWindow.png", 10)
+ @screen.click_mid_right_edge("PidginJoinChatRoomLabel.png")
+ @screen.type(channel)
+ @screen.click("PidginJoinChatButton.png")
+ @chat_room_jid = channel + "@" + account
+ $vm.focus_window(@chat_room_jid)
@screen.hide_cursor
try_for(60) do
begin
diff --git a/features/step_definitions/unsafe_browser.rb b/features/step_definitions/unsafe_browser.rb
index b0b7295..46b19e4 100644
--- a/features/step_definitions/unsafe_browser.rb
+++ b/features/step_definitions/unsafe_browser.rb
@@ -1,3 +1,4 @@
+# coding: utf-8
When /^I see and accept the Unsafe Browser start verification(?:| in the "([^"]+)" locale)$/ do |locale|
@screen.wait('GnomeQuestionDialogIcon.png', 30)
@screen.type(Sikuli::Key.TAB + Sikuli::Key.ENTER)
@@ -133,6 +134,14 @@ Then /^I open the Unsafe Browser proxy settings dialog$/ do
@screen.wait('BrowserPreferencesPage.png', 10)
@screen.type('proxy')
@screen.wait('BrowserPreferencesProxyHeading.png', 10)
+ # Let the filtering complete, the display stabilize, and the
+ # "Settings" button reach its final position: otherwise, Sikuli
+ # sometimes finds it while it's still further down the page than its
+ # final position, records these coordinates, but by the time Sikuli
+ # clicks there, the "Settings" button has moved to its final
+ # position so the click is lost ⇒ BrowserProxySettingsWindow.png
+ # cannot be found.
+ sleep 2
@screen.wait_and_click('BrowserPreferencesProxySettingsButton.png', 10)
@screen.wait('BrowserProxySettingsWindow.png', 10)
end
diff --git a/features/step_definitions/veracrypt.rb b/features/step_definitions/veracrypt.rb
index 9ea5d2e..189d0fd 100644
--- a/features/step_definitions/veracrypt.rb
+++ b/features/step_definitions/veracrypt.rb
@@ -140,7 +140,9 @@ When /^I unlock and mount this VeraCrypt (volume|file container) with Unlock Ver
when 'file container'
@screen.wait_and_click('UnlockVeraCryptVolumesAddButton.png', 10)
@screen.wait('Gtk3FileChooserDesktopButton.png', 10)
- @screen.type(@veracrypt_shared_dir_in_guest + '/' + $veracrypt_volume_name + Sikuli::Key.ENTER)
+ @screen.type(@veracrypt_shared_dir_in_guest + '/' + $veracrypt_volume_name)
+ sleep 2 # avoid ENTER being eaten by the auto-completion system
+ @screen.type(Sikuli::Key.ENTER)
end
@screen.wait('VeraCryptUnlockDialog.png', 10)
@screen.type(
diff --git a/features/support/config.rb b/features/support/config.rb
index 6cc4c29..f15bbf2 100644
--- a/features/support/config.rb
+++ b/features/support/config.rb
@@ -63,6 +63,7 @@ loop do
end
SIKULI_CANDIDATES_DIR = "#{ARTIFACTS_DIR}/sikuli_candidates"
SIKULI_IMAGE_PATH = "#{Dir.pwd}/features/images/"
+SIKULI_MIN_SIMILARITY = 0.9
# Constants that are statically initialized.
CONFIGURED_KEYSERVER_HOSTNAME = 'jirk5u4osbsr34t5.onion'
diff --git a/features/support/helpers/ctcp_helper.rb b/features/support/helpers/ctcp_helper.rb
deleted file mode 100644
index ee5180a..0000000
--- a/features/support/helpers/ctcp_helper.rb
+++ /dev/null
@@ -1,126 +0,0 @@
-require 'net/irc'
-require 'timeout'
-
-class CtcpChecker < Net::IRC::Client
-
- CTCP_SPAM_DELAY = 5
-
- # `spam_target`: the nickname of the IRC user to CTCP spam.
- # `ctcp_cmds`: the Array of CTCP commands to send.
- # `expected_ctcp_replies`: Hash where the keys are the exact set of replies
- # we expect, and their values a regex the reply data must match.
- def initialize(host, port, spam_target, ctcp_cmds, expected_ctcp_replies)
- @spam_target = spam_target
- @ctcp_cmds = ctcp_cmds
- @expected_ctcp_replies = expected_ctcp_replies
- nickname = self.class.random_irc_nickname
- opts = {
- :nick => nickname,
- :user => nickname,
- :real => nickname,
- }
- opts[:logger] = Logger.new(DEBUG_LOG_PSEUDO_FIFO)
- super(host, port, opts)
- end
-
- # Makes sure that only the expected CTCP replies are received.
- def verify_ctcp_responses
- @sent_ctcp_cmds = Set.new
- @received_ctcp_replies = Set.new
-
- # Give 60 seconds for connecting to the server and other overhead
- # beyond the expected time to spam all CTCP commands.
- expected_ctcp_spam_time = @ctcp_cmds.length * CTCP_SPAM_DELAY
- timeout = expected_ctcp_spam_time + 60
-
- begin
- Timeout::timeout(timeout) do
- start
- end
- rescue Timeout::Error
- # Do nothing as we'll check for errors below.
- ensure
- finish
- end
-
- ctcp_cmds_not_sent = @ctcp_cmds - @sent_ctcp_cmds.to_a
- expected_ctcp_replies_not_received =
- @expected_ctcp_replies.keys - @received_ctcp_replies.to_a
-
- if !ctcp_cmds_not_sent.empty? || !expected_ctcp_replies_not_received.empty?
- raise "Failed to spam all CTCP commands and receive the expected " +
- "replies within #{timeout} seconds.\n" +
- (ctcp_cmds_not_sent.empty? ? "" :
- "CTCP commands not sent: #{ctcp_cmds_not_sent}\n") +
- (expected_ctcp_replies_not_received.empty? ? "" :
- "Expected CTCP replies not received: " +
- expected_ctcp_replies_not_received.to_s)
- end
-
- end
-
- # Generate a random IRC nickname, in this case an alpha-numeric
- # string with length 10 to 15. To make it legal, the first character
- # is forced to be alpha.
- def self.random_irc_nickname
- random_alpha_string(1) + random_alnum_string(9, 14)
- end
-
- def spam(spam_target)
- post(NOTICE, spam_target, "Hi! I'm gonna test your CTCP capabilities now.")
- @ctcp_cmds.each do |cmd|
- sleep CTCP_SPAM_DELAY
- full_cmd = cmd
- case cmd
- when "PING"
- full_cmd += " #{Time.now.to_i}"
- when "ACTION"
- full_cmd += " barfs on the floor."
- when "ERRMSG"
- full_cmd += " Pidgin should not respond to this."
- end
- post(PRIVMSG, spam_target, ctcp_encode(full_cmd))
- @sent_ctcp_cmds << cmd
- end
- end
-
- def on_rpl_welcome(m)
- super
- Thread.new { spam(@spam_target) }
- end
-
- def on_message(m)
- if m.command == ERR_NICKNAMEINUSE
- finish
- new_nick = self.class.random_irc_nickname
- @opts.marshal_load({
- :nick => new_nick,
- :user => new_nick,
- :real => new_nick,
- })
- start
- return
- end
-
- if m.ctcp? and /^:#{Regexp.escape(@spam_target)}!/.match(m)
- m.ctcps.each do |ctcp_reply|
- reply_type, _, reply_data = ctcp_reply.partition(" ")
- if @expected_ctcp_replies.has_key?(reply_type)
- if @expected_ctcp_replies[reply_type].match(reply_data)
- @received_ctcp_replies << reply_type
- else
- raise "Received expected CTCP reply '#{reply_type}' but with " +
- "unexpected data '#{reply_data}' "
- end
- else
- raise "Received unexpected CTCP reply '#{reply_type}' with " +
- "data '#{reply_data}'"
- end
- end
- end
- if Set.new(@ctcp_cmds) == @sent_ctcp_cmds && \
- Set.new(@expected_ctcp_replies.keys) == @received_ctcp_replies
- finish
- end
- end
-end
diff --git a/features/support/helpers/dogtail.rb b/features/support/helpers/dogtail.rb
index 3fa618a..fa69f03 100644
--- a/features/support/helpers/dogtail.rb
+++ b/features/support/helpers/dogtail.rb
@@ -1,9 +1,7 @@
module Dogtail
- module Mouse
- LEFT_CLICK = 1
- MIDDLE_CLICK = 2
- RIGHT_CLICK = 3
- end
+ LEFT_CLICK = 1
+ MIDDLE_CLICK = 2
+ RIGHT_CLICK = 3
TREE_API_NODE_SEARCHES = [
:button,
@@ -251,5 +249,10 @@ module Dogtail
end
end
+ def right_click()
+ method_call = "click(button=#{RIGHT_CLICK})"
+ run("#{@var}.#{method_call}")
+ end
+
end
end
diff --git a/features/support/helpers/sikuli_helper.rb b/features/support/helpers/sikuli_helper.rb
index 2651211..281f662 100644
--- a/features/support/helpers/sikuli_helper.rb
+++ b/features/support/helpers/sikuli_helper.rb
@@ -61,37 +61,40 @@ end
def findfailed_hook(proxy, orig_method, args)
picture = args.first
candidate_path = "#{SIKULI_CANDIDATES_DIR}/#{picture}"
- if ! File.exist?(candidate_path)
- [0.80, 0.70, 0.60, 0.50, 0.40].each do |similarity|
- pattern = Sikuli::Pattern.new(picture)
- pattern.similar(similarity)
- match = proxy._invoke('exists', 'Ljava.lang.Object;', pattern)
- if match
- capture = proxy._invoke('capture', 'Lorg.sikuli.script.Region;', match)
- capture_path = capture.getFilename
- # Let's verify that our screen capture actually matches
- # with the default similarity
- if proxy._invoke('exists', 'Ljava.lang.Object;', capture_path)
- debug_log("Found fuzzy candidate picture for #{picture} with " +
- "similarity #{similarity}")
- FileUtils.mkdir_p(SIKULI_CANDIDATES_DIR)
- FileUtils.mv(capture_path, candidate_path)
- break
- else
- FileUtils.rm(capture_path)
+ if $config['SIKULI_FUZZY_IMAGE_MATCHING']
+ if ! File.exist?(candidate_path)
+ [0.80, 0.70, 0.60, 0.50, 0.40].each do |similarity|
+ pattern = Sikuli::Pattern.new(picture)
+ pattern.similar(similarity)
+ match = proxy._invoke('exists', 'Ljava.lang.Object;', pattern)
+ if match
+ capture = proxy._invoke('capture', 'Lorg.sikuli.script.Region;', match)
+ capture_path = capture.getFilename
+ # Let's verify that our screen capture actually matches
+ # with the default similarity
+ if proxy._invoke('exists', 'Ljava.lang.Object;', capture_path)
+ debug_log("Found fuzzy candidate picture for #{picture} with " +
+ "similarity #{similarity}")
+ FileUtils.mkdir_p(SIKULI_CANDIDATES_DIR)
+ FileUtils.mv(capture_path, candidate_path)
+ break
+ else
+ FileUtils.rm(capture_path)
+ end
end
end
+ if ! File.exist?(candidate_path)
+ debug_log("Failed to find fuzzy candidate picture for #{picture}")
+ end
end
- if ! File.exist?(candidate_path)
- debug_log("Failed to find fuzzy candidate picture for #{picture}")
+
+ if File.exist?(candidate_path)
+ debug_log("Using fuzzy candidate picture for #{picture}")
+ args_with_candidate = [candidate_path] + args.drop(1)
+ return orig_method.call(*args_with_candidate)
end
- end
- if $config['SIKULI_FUZZY_IMAGE_MATCHING'] && File.exist?(candidate_path)
- debug_log("Using fuzzy candidate picture for #{picture}")
- args_with_candidate = [candidate_path] + args.drop(1)
- return orig_method.call(*args_with_candidate)
- end
+ end # if $config['SIKULI_FUZZY_IMAGE_MATCHING']
if $config["SIKULI_RETRY_FINDFAILED"]
pause("FindFailed for: '#{picture}'")
@@ -280,7 +283,7 @@ sikuli_settings.OcrDataPath = $config["TMPDIR"]
# similarity, so all our current images are adapted to that value.
# Also, Sikuli's default of 0.7 is simply too low (many false
# positives).
-sikuli_settings.MinSimilarity = 0.9
+sikuli_settings.MinSimilarity = SIKULI_MIN_SIMILARITY
sikuli_settings.ActionLogs = true
sikuli_settings.DebugLogs = true
sikuli_settings.InfoLogs = true
diff --git a/features/support/helpers/vm_helper.rb b/features/support/helpers/vm_helper.rb
index 3009a14..8c9de94 100644
--- a/features/support/helpers/vm_helper.rb
+++ b/features/support/helpers/vm_helper.rb
@@ -654,7 +654,7 @@ EOF
potential_internal_snapshot = @domain.lookup_snapshot_by_name(name)
@domain.revert_to_snapshot(potential_internal_snapshot)
rescue Guestfs::Error, Libvirt::RetrieveError
- raise "The (internal nor external) snapshot #{name} may be known by libvirt but it cannot be restored. To investigate, use 'virsh snapshot-list TailsToaster'. To clean up old dangling snapshots, use 'virsh-delete'."
+ raise "The (internal nor external) snapshot #{name} may be known by libvirt but it cannot be restored. To investigate, use 'virsh snapshot-list TailsToaster'. To clean up old dangling snapshots, use 'virsh snapshot-delete'."
end
end
@display.start
diff --git a/features/torified_browsing.feature b/features/torified_browsing.feature
index 663e827..295263d 100644
--- a/features/torified_browsing.feature
+++ b/features/torified_browsing.feature
@@ -35,16 +35,14 @@ Feature: Browsing the web using the Tor Browser
When I save the file to the default Tor Browser download directory
Then the file is saved to the default Tor Browser download directory
- #17007
- @check_tor_leaks @fragile
+ @check_tor_leaks
Scenario: Playing an Ogg audio track
Given I have started Tails from DVD and logged in and the network is connected
When I start the Tor Browser
And the Tor Browser loads the startup page
Then I can listen to an Ogg audio track in Tor Browser
- #17007
- @check_tor_leaks @fragile
+ @check_tor_leaks
Scenario: Watching a WebM video
Given I have started Tails from DVD and logged in and the network is connected
When I start the Tor Browser
diff --git a/run_test_suite b/run_test_suite
index 57c7f08..45a2d55 100755
--- a/run_test_suite
+++ b/run_test_suite
@@ -32,7 +32,6 @@ redir
ruby-guestfs
ruby-json
ruby-libvirt
-ruby-net-irc
ruby-packetfu
ruby-rb-inotify
ruby-rjb
diff --git a/wiki/src/contribute.de.po b/wiki/src/contribute.de.po
index 69a3baa..315aa88 100644
--- a/wiki/src/contribute.de.po
+++ b/wiki/src/contribute.de.po
@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2019-09-05 08:43+0000\n"
+"POT-Creation-Date: 2019-09-07 13:10+0200\n"
"PO-Revision-Date: 2014-04-18 23:25+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -502,15 +502,15 @@ msgid "Documentation: BitingBird, sajolida"
msgstr ""
#. type: Bullet: ' - '
-msgid "*Onion Circuits*: alan"
+msgid "*Onion Circuits* (Python): alan"
msgstr ""
#. type: Bullet: ' - '
-msgid "*OpenPGP Applet*: nodens"
+msgid "*OpenPGP Applet* (Perl): nodens"
msgstr ""
#. type: Bullet: ' - '
-msgid "Persistence setup: intrigeri, kurono"
+msgid "Persistence setup (Perl): intrigeri, kurono"
msgstr ""
#. type: Bullet: ' - '
@@ -518,23 +518,23 @@ msgid "Sysadmin: [[contact|contribute/how/sysadmin/#contact]]"
msgstr ""
#. type: Bullet: ' - '
-msgid "*Tails Greeter*: alan, intrigeri"
+msgid "*Tails Greeter* (Python): alan, intrigeri"
msgstr ""
#. type: Bullet: ' - '
-msgid "*Tails Installer*: alan, kurono, u"
+msgid "*Tails Installer* (Python): alan, kurono, u"
msgstr ""
#. type: Bullet: ' - '
-msgid "*Tails Upgrader*: intrigeri"
+msgid "*Tails Upgrader* (Perl): intrigeri"
msgstr ""
#. type: Bullet: ' - '
-msgid "*Tails Verification*: sajolida, anonym"
+msgid "*Tails Verification* (JavaScript): sajolida, anonym"
msgstr ""
#. type: Bullet: ' - '
-msgid "Test suite: anonym"
+msgid "Test suite (Gherkin, Ruby): anonym"
msgstr ""
#. type: Bullet: ' - '
@@ -562,7 +562,7 @@ msgid "Website: sajolida"
msgstr ""
#. type: Bullet: ' - '
-msgid "*WhisperBack*: alan"
+msgid "*WhisperBack* (Python): alan"
msgstr ""
#. type: Plain text
diff --git a/wiki/src/contribute.es.po b/wiki/src/contribute.es.po
index 681afd3..cd2bb64 100644
--- a/wiki/src/contribute.es.po
+++ b/wiki/src/contribute.es.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Tails\n"
"Report-Msgid-Bugs-To: tails-l10n@boum.org\n"
-"POT-Creation-Date: 2019-09-05 08:43+0000\n"
+"POT-Creation-Date: 2019-09-07 13:10+0200\n"
"PO-Revision-Date: 2019-08-24 06:21+0000\n"
"Last-Translator: Joaquín Serna <bubuanabelas@cryptolab.net>\n"
"Language-Team: Spanish <http://translate.tails.boum.org/projects/tails/"
@@ -471,15 +471,21 @@ msgid "Documentation: BitingBird, sajolida"
msgstr "Documentación: BitingBird, sajolida"
#. type: Bullet: ' - '
-msgid "*Onion Circuits*: alan"
+#, fuzzy
+#| msgid "*Onion Circuits*: alan"
+msgid "*Onion Circuits* (Python): alan"
msgstr "*Onion Circuits*: alan"
#. type: Bullet: ' - '
-msgid "*OpenPGP Applet*: nodens"
+#, fuzzy
+#| msgid "*OpenPGP Applet*: nodens"
+msgid "*OpenPGP Applet* (Perl): nodens"
msgstr "*OpenPGP Applet*: nodens"
#. type: Bullet: ' - '
-msgid "Persistence setup: intrigeri, kurono"
+#, fuzzy
+#| msgid "Persistence setup: intrigeri, kurono"
+msgid "Persistence setup (Perl): intrigeri, kurono"
msgstr "Persistence setup: intrigeri, kurono"
#. type: Bullet: ' - '
@@ -487,23 +493,33 @@ msgid "Sysadmin: [[contact|contribute/how/sysadmin/#contact]]"
msgstr "Sysadmin: [[contact|contribute/how/sysadmin/#contact]]"
#. type: Bullet: ' - '
-msgid "*Tails Greeter*: alan, intrigeri"
+#, fuzzy
+#| msgid "*Tails Greeter*: alan, intrigeri"
+msgid "*Tails Greeter* (Python): alan, intrigeri"
msgstr "*Tails Greeter*: alan, intrigeri"
#. type: Bullet: ' - '
-msgid "*Tails Installer*: alan, kurono, u"
+#, fuzzy
+#| msgid "*Tails Installer*: alan, kurono, u"
+msgid "*Tails Installer* (Python): alan, kurono, u"
msgstr "*Tails Installer*: alan, kurono, u"
#. type: Bullet: ' - '
-msgid "*Tails Upgrader*: intrigeri"
+#, fuzzy
+#| msgid "*Tails Upgrader*: intrigeri"
+msgid "*Tails Upgrader* (Perl): intrigeri"
msgstr "*Tails Upgrader*: intrigeri"
#. type: Bullet: ' - '
-msgid "*Tails Verification*: sajolida, anonym"
+#, fuzzy
+#| msgid "*Tails Verification*: sajolida, anonym"
+msgid "*Tails Verification* (JavaScript): sajolida, anonym"
msgstr "*Tails Verification*: sajolida, anonym"
#. type: Bullet: ' - '
-msgid "Test suite: anonym"
+#, fuzzy
+#| msgid "Test suite: anonym"
+msgid "Test suite (Gherkin, Ruby): anonym"
msgstr "Test suite: anonym"
#. type: Bullet: ' - '
@@ -531,7 +547,9 @@ msgid "Website: sajolida"
msgstr "Website: sajolida"
#. type: Bullet: ' - '
-msgid "*WhisperBack*: alan"
+#, fuzzy
+#| msgid "*WhisperBack*: alan"
+msgid "*WhisperBack* (Python): alan"
msgstr "*WhisperBack*: alan"
#. type: Plain text
diff --git a/wiki/src/contribute.fa.po b/wiki/src/contribute.fa.po
index 54794a5..1568c97 100644
--- a/wiki/src/contribute.fa.po
+++ b/wiki/src/contribute.fa.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: tails-l10n@boum.org\n"
-"POT-Creation-Date: 2019-09-05 08:43+0000\n"
+"POT-Creation-Date: 2019-09-07 13:10+0200\n"
"PO-Revision-Date: 2015-10-15 15:23+0000\n"
"Last-Translator: sprint5 <translation5@451f.org>\n"
"Language-Team: Persian <http://weblate.451f.org:8889/projects/tails/"
@@ -497,15 +497,15 @@ msgid "Documentation: BitingBird, sajolida"
msgstr ""
#. type: Bullet: ' - '
-msgid "*Onion Circuits*: alan"
+msgid "*Onion Circuits* (Python): alan"
msgstr ""
#. type: Bullet: ' - '
-msgid "*OpenPGP Applet*: nodens"
+msgid "*OpenPGP Applet* (Perl): nodens"
msgstr ""
#. type: Bullet: ' - '
-msgid "Persistence setup: intrigeri, kurono"
+msgid "Persistence setup (Perl): intrigeri, kurono"
msgstr ""
#. type: Bullet: ' - '
@@ -513,23 +513,23 @@ msgid "Sysadmin: [[contact|contribute/how/sysadmin/#contact]]"
msgstr ""
#. type: Bullet: ' - '
-msgid "*Tails Greeter*: alan, intrigeri"
+msgid "*Tails Greeter* (Python): alan, intrigeri"
msgstr ""
#. type: Bullet: ' - '
-msgid "*Tails Installer*: alan, kurono, u"
+msgid "*Tails Installer* (Python): alan, kurono, u"
msgstr ""
#. type: Bullet: ' - '
-msgid "*Tails Upgrader*: intrigeri"
+msgid "*Tails Upgrader* (Perl): intrigeri"
msgstr ""
#. type: Bullet: ' - '
-msgid "*Tails Verification*: sajolida, anonym"
+msgid "*Tails Verification* (JavaScript): sajolida, anonym"
msgstr ""
#. type: Bullet: ' - '
-msgid "Test suite: anonym"
+msgid "Test suite (Gherkin, Ruby): anonym"
msgstr ""
#. type: Bullet: ' - '
@@ -557,7 +557,7 @@ msgid "Website: sajolida"
msgstr ""
#. type: Bullet: ' - '
-msgid "*WhisperBack*: alan"
+msgid "*WhisperBack* (Python): alan"
msgstr ""
#. type: Plain text
diff --git a/wiki/src/contribute.fr.po b/wiki/src/contribute.fr.po
index 104ff04..fc9ba44 100644
--- a/wiki/src/contribute.fr.po
+++ b/wiki/src/contribute.fr.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Tails\n"
"Report-Msgid-Bugs-To: tails-l10n@boum.org\n"
-"POT-Creation-Date: 2019-09-05 08:43+0000\n"
+"POT-Creation-Date: 2019-09-07 13:10+0200\n"
"PO-Revision-Date: 2019-08-17 12:28+0000\n"
"Last-Translator: xin <xin@riseup.net>\n"
"Language-Team: Tails translators <tails@boum.org>\n"
@@ -469,15 +469,21 @@ msgid "Documentation: BitingBird, sajolida"
msgstr "Documentation: BitingBird, sajolida"
#. type: Bullet: ' - '
-msgid "*Onion Circuits*: alan"
+#, fuzzy
+#| msgid "*Onion Circuits*: alan"
+msgid "*Onion Circuits* (Python): alan"
msgstr "*Onion Circuits*: alan"
#. type: Bullet: ' - '
-msgid "*OpenPGP Applet*: nodens"
+#, fuzzy
+#| msgid "*OpenPGP Applet*: nodens"
+msgid "*OpenPGP Applet* (Perl): nodens"
msgstr "*OpenPGP Applet*: nodens"
#. type: Bullet: ' - '
-msgid "Persistence setup: intrigeri, kurono"
+#, fuzzy
+#| msgid "Persistence setup: intrigeri, kurono"
+msgid "Persistence setup (Perl): intrigeri, kurono"
msgstr "Persistence setup: intrigeri, kurono"
#. type: Bullet: ' - '
@@ -485,23 +491,33 @@ msgid "Sysadmin: [[contact|contribute/how/sysadmin/#contact]]"
msgstr "Sysadmin: [[contact|contribute/how/sysadmin/#contact]]"
#. type: Bullet: ' - '
-msgid "*Tails Greeter*: alan, intrigeri"
+#, fuzzy
+#| msgid "*Tails Greeter*: alan, intrigeri"
+msgid "*Tails Greeter* (Python): alan, intrigeri"
msgstr "*Tails Greeter*: alan, intrigeri"
#. type: Bullet: ' - '
-msgid "*Tails Installer*: alan, kurono, u"
+#, fuzzy
+#| msgid "*Tails Installer*: alan, kurono, u"
+msgid "*Tails Installer* (Python): alan, kurono, u"
msgstr "*Tails Installer*: alan, kurono, u"
#. type: Bullet: ' - '
-msgid "*Tails Upgrader*: intrigeri"
+#, fuzzy
+#| msgid "*Tails Upgrader*: intrigeri"
+msgid "*Tails Upgrader* (Perl): intrigeri"
msgstr "*Tails Upgrader*: intrigeri"
#. type: Bullet: ' - '
-msgid "*Tails Verification*: sajolida, anonym"
+#, fuzzy
+#| msgid "*Tails Verification*: sajolida, anonym"
+msgid "*Tails Verification* (JavaScript): sajolida, anonym"
msgstr "*Tails Verification*: sajolida, anonym"
#. type: Bullet: ' - '
-msgid "Test suite: anonym"
+#, fuzzy
+#| msgid "Test suite: anonym"
+msgid "Test suite (Gherkin, Ruby): anonym"
msgstr "Test suite: anonym"
#. type: Bullet: ' - '
@@ -529,7 +545,9 @@ msgid "Website: sajolida"
msgstr "Website: sajolida"
#. type: Bullet: ' - '
-msgid "*WhisperBack*: alan"
+#, fuzzy
+#| msgid "*WhisperBack*: alan"
+msgid "*WhisperBack* (Python): alan"
msgstr "*WhisperBack*: alan"
#. type: Plain text
diff --git a/wiki/src/contribute.it.po b/wiki/src/contribute.it.po
index 75d5f0e..1e2982a 100644
--- a/wiki/src/contribute.it.po
+++ b/wiki/src/contribute.it.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: tails-l10n@boum.org\n"
-"POT-Creation-Date: 2019-09-05 08:43+0000\n"
+"POT-Creation-Date: 2019-09-07 13:10+0200\n"
"PO-Revision-Date: 2018-12-02 09:46+0000\n"
"Last-Translator: Davide <davidesantoro@mail.ru>\n"
"Language-Team: ita <transitails@inventati.org>\n"
@@ -364,15 +364,15 @@ msgid "Documentation: BitingBird, sajolida"
msgstr ""
#. type: Bullet: ' - '
-msgid "*Onion Circuits*: alan"
+msgid "*Onion Circuits* (Python): alan"
msgstr ""
#. type: Bullet: ' - '
-msgid "*OpenPGP Applet*: nodens"
+msgid "*OpenPGP Applet* (Perl): nodens"
msgstr ""
#. type: Bullet: ' - '
-msgid "Persistence setup: intrigeri, kurono"
+msgid "Persistence setup (Perl): intrigeri, kurono"
msgstr ""
#. type: Bullet: ' - '
@@ -380,23 +380,23 @@ msgid "Sysadmin: [[contact|contribute/how/sysadmin/#contact]]"
msgstr ""
#. type: Bullet: ' - '
-msgid "*Tails Greeter*: alan, intrigeri"
+msgid "*Tails Greeter* (Python): alan, intrigeri"
msgstr ""
#. type: Bullet: ' - '
-msgid "*Tails Installer*: alan, kurono, u"
+msgid "*Tails Installer* (Python): alan, kurono, u"
msgstr ""
#. type: Bullet: ' - '
-msgid "*Tails Upgrader*: intrigeri"
+msgid "*Tails Upgrader* (Perl): intrigeri"
msgstr ""
#. type: Bullet: ' - '
-msgid "*Tails Verification*: sajolida, anonym"
+msgid "*Tails Verification* (JavaScript): sajolida, anonym"
msgstr ""
#. type: Bullet: ' - '
-msgid "Test suite: anonym"
+msgid "Test suite (Gherkin, Ruby): anonym"
msgstr ""
#. type: Bullet: ' - '
@@ -424,7 +424,7 @@ msgid "Website: sajolida"
msgstr ""
#. type: Bullet: ' - '
-msgid "*WhisperBack*: alan"
+msgid "*WhisperBack* (Python): alan"
msgstr ""
#. type: Plain text
diff --git a/wiki/src/contribute.mdwn b/wiki/src/contribute.mdwn
index ae223db..37837e5 100644
--- a/wiki/src/contribute.mdwn
+++ b/wiki/src/contribute.mdwn
@@ -163,22 +163,22 @@ using the usual communication channels.
- Build system (Vagrant, Rake): anonym
- Debian related work: intrigeri, u
- Documentation: BitingBird, sajolida
- - *Onion Circuits*: alan
- - *OpenPGP Applet*: nodens
- - Persistence setup: intrigeri, kurono
+ - *Onion Circuits* (Python): alan
+ - *OpenPGP Applet* (Perl): nodens
+ - Persistence setup (Perl): intrigeri, kurono
- Sysadmin: [[contact|contribute/how/sysadmin/#contact]]
- - *Tails Greeter*: alan, intrigeri
- - *Tails Installer*: alan, kurono, u
- - *Tails Upgrader*: intrigeri
- - *Tails Verification*: sajolida, anonym
- - Test suite: anonym
+ - *Tails Greeter* (Python): alan, intrigeri
+ - *Tails Installer* (Python): alan, kurono, u
+ - *Tails Upgrader* (Perl): intrigeri
+ - *Tails Verification* (JavaScript): sajolida, anonym
+ - Test suite (Gherkin, Ruby): anonym
- *Thunderbird* (Icedove): anonym
- Tor configuration, time syncing, MAC spoofing: anonym
- *Tor Browser*: anonym
- Usability: sajolida, tchou
- *Unsafe Web Browser*: anonym
- Website: sajolida
- - *WhisperBack*: alan
+ - *WhisperBack* (Python): alan
<a id="release-cycle"></a>
diff --git a/wiki/src/contribute.pt.po b/wiki/src/contribute.pt.po
index 176406e..792b268 100644
--- a/wiki/src/contribute.pt.po
+++ b/wiki/src/contribute.pt.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: tails-l10n@boum.org\n"
-"POT-Creation-Date: 2019-09-05 08:43+0000\n"
+"POT-Creation-Date: 2019-09-07 13:10+0200\n"
"PO-Revision-Date: 2018-02-21 11:59+0000\n"
"Last-Translator: drebs <drebs@riseup.net>\n"
"Language-Team: Portuguese <LL@li.org>\n"
@@ -499,15 +499,21 @@ msgid "Documentation: BitingBird, sajolida"
msgstr "Documentação: BitingBird, sajolida"
#. type: Bullet: ' - '
-msgid "*Onion Circuits*: alan"
+#, fuzzy
+#| msgid "*Onion Circuits*: alan"
+msgid "*Onion Circuits* (Python): alan"
msgstr "*Circuitos Onion*: alan"
#. type: Bullet: ' - '
-msgid "*OpenPGP Applet*: nodens"
+#, fuzzy
+#| msgid "*OpenPGP Applet*: nodens"
+msgid "*OpenPGP Applet* (Perl): nodens"
msgstr "*Applet OpenPGP*: nodens"
#. type: Bullet: ' - '
-msgid "Persistence setup: intrigeri, kurono"
+#, fuzzy
+#| msgid "Persistence setup: intrigeri, kurono"
+msgid "Persistence setup (Perl): intrigeri, kurono"
msgstr "Configuração de persistência: intrigeri, kurono"
#. type: Bullet: ' - '
@@ -516,23 +522,31 @@ msgstr ""
"Administradores de sistemas: [[contact|contribute/how/sysadmin/#contact]]"
#. type: Bullet: ' - '
-msgid "*Tails Greeter*: alan, intrigeri"
+#, fuzzy
+#| msgid "*Tails Greeter*: alan, intrigeri"
+msgid "*Tails Greeter* (Python): alan, intrigeri"
msgstr "*Tails Greeter*: alan, intrigeri"
#. type: Bullet: ' - '
-msgid "*Tails Installer*: alan, kurono, u"
+#, fuzzy
+#| msgid "*Tails Installer*: alan, kurono, u"
+msgid "*Tails Installer* (Python): alan, kurono, u"
msgstr "*Instalador Tails*: alan, kurono, u"
#. type: Bullet: ' - '
-msgid "*Tails Upgrader*: intrigeri"
+#, fuzzy
+#| msgid "*Tails Upgrader*: intrigeri"
+msgid "*Tails Upgrader* (Perl): intrigeri"
msgstr "*Atualizador Tails*: intrigeri"
#. type: Bullet: ' - '
-msgid "*Tails Verification*: sajolida, anonym"
+msgid "*Tails Verification* (JavaScript): sajolida, anonym"
msgstr ""
#. type: Bullet: ' - '
-msgid "Test suite: anonym"
+#, fuzzy
+#| msgid "Test suite: anonym"
+msgid "Test suite (Gherkin, Ruby): anonym"
msgstr "Suíte de testes: anonym"
#. type: Bullet: ' - '
@@ -560,7 +574,9 @@ msgid "Website: sajolida"
msgstr "Website: sajolida"
#. type: Bullet: ' - '
-msgid "*WhisperBack*: alan"
+#, fuzzy
+#| msgid "*WhisperBack*: alan"
+msgid "*WhisperBack* (Python): alan"
msgstr "*WhisperBack*: alan"
#. type: Plain text
diff --git a/wiki/src/contribute/how/code.mdwn b/wiki/src/contribute/how/code.mdwn
index 246d962..8c07bca 100644
--- a/wiki/src/contribute/how/code.mdwn
+++ b/wiki/src/contribute/how/code.mdwn
@@ -80,6 +80,8 @@ Let's see how we can help you picking up a task. A few tips:
* Have a look to the [[!tails_redmine_starter]]: there is
something, in each of these tasks, that one can do right away since
it does not require deep knowledge of the Tails internals.
+* See the [[list of Tails components, with their mentors and programming
+ language|contribute#mentors]].
On the one hand, you may want to **start doing practical stuff
immediately**. In this case, see [list the tasks that have the `Code`
diff --git a/wiki/src/contribute/release_process.mdwn b/wiki/src/contribute/release_process.mdwn
index 38898ad..ad764cb 100644
--- a/wiki/src/contribute/release_process.mdwn
+++ b/wiki/src/contribute/release_process.mdwn
@@ -485,9 +485,10 @@ Build the almost-final images
3. Keep the resulting build artifacts until the end of this release process.
4. Record where the manifest of needed packages is stored:
- export PACKAGES_MANIFEST=XXX ; \
- [ -f "${PACKAGES_MANIFEST:?}" ] || echo "ERROR: PACKAGES_MANIFEST is incorrect"
-
+ export BUILD_MANIFEST=XXX ; \
+ [ -f "${BUILD_MANIFEST:?}" ] || echo "ERROR: BUILD_MANIFEST is incorrect"
+ echo "${BUILD_MANIFEST:?}" | grep -E -qs '\.build-manifest$' \
+ || echo "ERROR: BUILD_MANIFEST does not have the .build-manifest extension"
Tag the release in Git
======================
@@ -513,7 +514,7 @@ Prepare the versioned APT suites
* Prepare tagged snapshots of upstream APT repositories:
- ./bin/tag-apt-snapshots "${PACKAGES_MANIFEST:?}" "${TAG:?}"
+ ./bin/tag-apt-snapshots "${BUILD_MANIFEST:?}" "${TAG:?}"
Note:
@@ -568,9 +569,14 @@ SquashFS file order
[.]pyc\s+\d+\z
| \Alib/live/mount/medium/live/(?:filesystem[.]squashfs|initrd[.]img)\s
| \Alib/live/mount/overlay/etc/fstab\s
+ | \Alib/live/mount/overlay/etc/console-setup/cached_\S+[.]gz\s
+ | \Alib/live/mount/overlay/etc/machine-id\s
+ | \Alib/live/mount/overlay/etc/network/interfaces\s
+ | \Alib/live/mount/overlay/var/log/wtmp\s
| \A(?:lib/live/mount/overlay/)?etc/apparmor[.]d/cache/[.]features\s
| \A(?:lib/live/mount/overlay/)?etc/(?:group|gshadow|passwd|shadow)-\s
| \A(?:lib/live/mount/overlay/)?etc/resolv-over-clearnet[.]conf\s
+ | \A(?:lib/live/mount/overlay/)?etc/skel/[.]config/autostart/end-profile[.]desktop\s
| \Arun/
| \Avar/log/live/config[.]pipe\s
)}xms' config/binary_rootfs/squashfs.sort
@@ -623,14 +629,14 @@ suite should be ready, so it is time to:
almost final build:
diff -Naur \
- "${PACKAGES_MANIFEST:?}" \
+ "${BUILD_MANIFEST:?}" \
"${ARTIFACTS:?}/tails-amd64-${VERSION:?}.build-manifest"
They should be identical, except that the `debian-security` serial might be higher.
1. To ensure we publish the final build's `.build-manifest`, run:
- export PACKAGES_MANIFEST="${ARTIFACTS:?}/tails-amd64-${VERSION:?}.build-manifest"
+ export BUILD_MANIFEST="${ARTIFACTS:?}/tails-amd64-${VERSION:?}.build-manifest"
1. <a id="reproducibility-sanity-check-iso"></a>
diff --git a/wiki/src/contribute/release_process/test/setup.mdwn b/wiki/src/contribute/release_process/test/setup.mdwn
index 6e711f4..a54228f 100644
--- a/wiki/src/contribute/release_process/test/setup.mdwn
+++ b/wiki/src/contribute/release_process/test/setup.mdwn
@@ -8,63 +8,82 @@ Once you have a working environment, see [[test/usage]].
[[!toc levels=2]]
+Operating system
+================
+
+If you usually run another operating system than Debian Stretch,
+then you need to:
+
+1. Enable nested virtualization on your host system.
+
+ For example, if the host system has an Intel CPU:
+
+ if [ "$(cat /sys/module/kvm_intel/parameters/nested)" != Y ]; then
+ echo "options kvm_intel nested=Y" \
+ >> /etc/modprobe.d/kvm.conf
+ fi
+
+2. Prepare a Stretch virtual machine.
+
+3. And then, every step below applies to this Stretch virtual machine,
+ instead of to the host system.
+
Install dependencies
====================
-First of all, one needs a Debian Stretch system with:
-
- * the `non-free` APT component enabled.
-
-The following packages are necessary on Debian Stretch:
-
- sudo apt update && \
- sudo apt install \
- cucumber \
- devscripts \
- dnsmasq-base \
- gawk \
- git \
- i18nspector \
- libav-tools \
- libcap2-bin \
- libsikulixapi-java \
- libvirt-clients \
- libvirt-daemon-system \
- libvirt-dev \
- libvirt0 \
- obfs4proxy \
- openssh-server \
- ovmf \
- pry \
- python-jabberbot \
- python-potr \
- qemu-kvm \
- qemu-system-common \
- qemu-system-x86 \
- qemu-utils \
- redir \
- ruby-guestfs \
- ruby-json \
- ruby-libvirt \
- ruby-net-irc \
- ruby-packetfu \
- ruby-rb-inotify \
- ruby-rjb \
- ruby-rspec \
- ruby-test-unit \
- seabios \
- tcpdump \
- tcplay \
- tor \
- unclutter \
- virt-viewer \
- x11vnc \
- tigervnc-viewer \
- x264 \
- xvfb \
- && \
- sudo service libvirtd restart
-
+To install the dependencies on our test suite:
+
+1. Enable the `non-free` APT component.
+
+2. Install the following packages:
+
+ sudo apt update && \
+ sudo apt install \
+ cucumber \
+ devscripts \
+ dnsmasq-base \
+ gawk \
+ git \
+ i18nspector \
+ libav-tools \
+ libcap2-bin \
+ libsikulixapi-java \
+ libvirt-clients \
+ libvirt-daemon-system \
+ libvirt-dev \
+ libvirt0 \
+ obfs4proxy \
+ openssh-server \
+ ovmf \
+ pry \
+ python-jabberbot \
+ python-potr \
+ qemu-kvm \
+ qemu-system-common \
+ qemu-system-x86 \
+ qemu-utils \
+ redir \
+ ruby-guestfs \
+ ruby-json \
+ ruby-libvirt \
+ ruby-packetfu \
+ ruby-rb-inotify \
+ ruby-rjb \
+ ruby-rspec \
+ ruby-test-unit \
+ seabios \
+ tcpdump \
+ tcplay \
+ tor \
+ unclutter \
+ virt-viewer \
+ x11vnc \
+ tigervnc-viewer \
+ x264 \
+ xvfb \
+ && \
+ sudo service libvirtd restart
+
Other requirements
==================
@@ -96,12 +115,10 @@ If you have AppArmor enabled:
If you use a custom `TMPDIR` to run the test suite,
replace `/tmp/TailsToaster` with the value of that `$TMPDIR`.
-Known issues
-============
-
-## System under test freezes when creating a persistent volume
+Patched QEMU
+------------
-If the host system runs Debian Stretch, due to [[!tails_ticket 12142]]
+Due to [[!tails_ticket 12142]]
aka. [[!debbug 851694]], any test scenario that creates a persistent
volume will fail. To work around this problem, rebuild [[!debpts
qemu]] locally with the upstream fix applied. For example, the `qemu`
@@ -110,7 +127,8 @@ source package in this APT suite has the fix:
deb-src http://deb.tails.boum.org/ isotester-stretch main
This problem does not affect host systems that run Debian Buster
-or newer.
+or newer, but those cannot run our test suite at all due to
+[[!tails_ticket 15460]].
Special use cases
=================