[tor-commits] [tor-browser-bundle-testsuite/master] Bug 40003: Add test for 'Implement Onion-Location' TB patch
gk at torproject.org
gk at torproject.org
Thu Oct 15 18:41:27 UTC 2020
commit fe257166a6e9a5bb4100a24674f98eed86822572
Author: Alex Catarineu <acat at torproject.org>
Date: Mon Jun 29 19:41:47 2020 +0200
Bug 40003: Add test for 'Implement Onion-Location' TB patch
---
TBBTestSuite/TestSuite/BrowserBundleTests.pm | 6 +
.../tor_browser_tests/test_onion_location.py | 135 +++++++++++++++++++++
2 files changed, 141 insertions(+)
diff --git a/TBBTestSuite/TestSuite/BrowserBundleTests.pm b/TBBTestSuite/TestSuite/BrowserBundleTests.pm
index 834641e..5a642ef 100644
--- a/TBBTestSuite/TestSuite/BrowserBundleTests.pm
+++ b/TBBTestSuite/TestSuite/BrowserBundleTests.pm
@@ -482,6 +482,12 @@ our @tests = (
use_net => 1,
descr => 'Check onion security expectations',
},
+ {
+ name => 'onion_location',
+ type => 'marionette',
+ use_net => 1,
+ descr => 'Check that Onion-Location header handling works correctly',
+ },
);
sub set_test_prefs {
diff --git a/marionette/tor_browser_tests/test_onion_location.py b/marionette/tor_browser_tests/test_onion_location.py
new file mode 100644
index 0000000..1188250
--- /dev/null
+++ b/marionette/tor_browser_tests/test_onion_location.py
@@ -0,0 +1,135 @@
+from marionette_driver import By, Wait
+from marionette_driver.errors import MarionetteException, NoSuchElementException, TimeoutException
+
+from marionette_harness import MarionetteTestCase, WindowManagerMixin
+
+
+class Test(WindowManagerMixin, MarionetteTestCase):
+
+ def test_onion_location(self):
+ m = self.marionette
+ m.timeout.implicit = 10
+
+ self.assertEqual(None, m.get_pref(
+ 'privacy.prioritizeonions.showNotification'))
+
+ with m.using_context('content'):
+ m.navigate('https://www.torproject.org/')
+
+ with m.using_context('chrome'):
+ # Check whether the urlbar badge is displayed
+ self.assertTrue(m.find_element(
+ 'id', 'onion-location-box').is_displayed())
+
+ # Check whether the notification is displayed the first time
+ notification = m.find_element('id', 'onion-location-notification')
+ self.assertTrue(notification.is_displayed())
+ self.assertFalse(m.get_pref(
+ 'privacy.prioritizeonions.showNotification'))
+ always_prioritize = notification.find_element(
+ 'css selector', '.popup-notification-primary-button')
+ self.assertEqual(always_prioritize.get_attribute(
+ 'label'), 'Always Prioritize Onions')
+
+ # Check learn more link
+ notification.find_element(
+ 'css selector', '.popup-notification-learnmore-link').click()
+ with m.using_context('content'):
+ Wait(m, timeout=m.timeout.page_load).until(
+ lambda _: len(m.window_handles) > 1)
+ m.switch_to_window(m.window_handles[1])
+ Wait(m, timeout=m.timeout.page_load).until(
+ lambda _: m.get_url() != "about:blank")
+ self.assertEqual(
+ m.get_url(), "https://tb-manual.torproject.org/onion-services/")
+ m.close()
+ m.switch_to_window(m.window_handles[0])
+
+ with m.using_context('chrome'):
+ # Close the notification and check that it's not displayed anymore.
+ notification = m.find_element('id', 'onion-location-notification')
+ not_now = notification.find_element(
+ 'css selector', '.popup-notification-secondary-button')
+ self.assertEqual(not_now.get_attribute('label'), 'Not Now')
+ not_now.click()
+ try:
+ self.assertFalse(m.find_element(
+ 'id', 'onion-location-notification').is_displayed())
+ except NoSuchElementException:
+ pass
+
+ # Show the notification again
+ m.set_pref('privacy.prioritizeonions.showNotification', None)
+ new_tab = self.open_tab()
+ m.switch_to_window(new_tab)
+ m.close()
+ m.switch_to_window(self.start_tab)
+
+ # Click "Always prioritize" in the notification
+ notification = m.find_element('id', 'onion-location-notification')
+ notification.find_element(
+ 'css selector', '.popup-notification-primary-button').click()
+ self.assertTrue(m.get_pref('privacy.prioritizeonions.enabled'))
+
+ with m.using_context('content'):
+ m.switch_to_window(m.window_handles[1])
+ self.assertEqual(
+ m.get_url(), 'about:preferences#privacy-onionservices')
+ m.close()
+ m.switch_to_window(self.start_tab)
+
+ # Check that the original page is redirected to .onion
+ Wait(m, timeout=m.timeout.page_load).until(
+ lambda _: m.get_url() != 'https://www.torproject.org/')
+ self.assertEqual(
+ m.get_url(), 'http://expyuzz4wqqyqhjn.onion/index.html')
+
+ # Check that auto-redirects work
+ m.navigate('https://www.torproject.org/')
+ self.assertEqual(m.get_url(), 'https://www.torproject.org/')
+ Wait(m, timeout=m.timeout.page_load).until(
+ lambda _: m.get_url() != 'https://www.torproject.org/')
+ self.assertEqual(
+ m.get_url(), 'http://expyuzz4wqqyqhjn.onion/index.html')
+
+ # Go to preferences and disable auto-redirects
+ new_tab = self.open_tab()
+ m.switch_to_window(new_tab)
+ m.navigate('about:preferences#privacy-onionservices')
+ m.find_element('id', 'onionServicesRadioAsk').click()
+ self.assertFalse(m.get_pref(
+ 'privacy.prioritizeonions.enabled'))
+ m.close()
+ m.switch_to_window(self.start_tab)
+ m.navigate('https://www.torproject.org/')
+ try:
+ Wait(m, timeout=5).until(lambda _: m.get_url()
+ != 'https://www.torproject.org/')
+ self.assertTrue(False, "Should not redirect")
+ except TimeoutException:
+ pass
+
+ # Check that the page is redirected when clicking on the urlbar badge
+ with m.using_context('chrome'):
+ self.assertTrue(m.find_element(
+ 'id', 'onion-location-box').is_displayed())
+ m.find_element('id', 'onion-location-box').click()
+ with m.using_context('content'):
+ Wait(m, timeout=5).until(lambda _: m.get_url()
+ != 'https://www.torproject.org/')
+ self.assertEqual(
+ m.get_url(), 'http://expyuzz4wqqyqhjn.onion/index.html')
+
+ # Check learn more link
+ with m.using_context('content'):
+ m.navigate('about:preferences#privacy-onionservices')
+ m.find_element('id', 'onionServicesLearnMore').click()
+ Wait(m, timeout=m.timeout.page_load).until(
+ lambda _: len(m.window_handles) > 1)
+ m.switch_to_window(m.window_handles[1])
+ Wait(m, timeout=m.timeout.page_load).until(
+ lambda _: m.get_url() != "about:blank")
+ self.assertEqual(
+ m.get_url(), "https://tb-manual.torproject.org/onion-services/")
+ m.close()
+ m.switch_to_window(m.window_handles[0])
More information about the tor-commits
mailing list