summaryrefslogtreecommitdiffstats
path: root/testing/firefox-ui/harness/firefox_ui_harness/runners/update.py
diff options
context:
space:
mode:
Diffstat (limited to 'testing/firefox-ui/harness/firefox_ui_harness/runners/update.py')
-rw-r--r--testing/firefox-ui/harness/firefox_ui_harness/runners/update.py101
1 files changed, 101 insertions, 0 deletions
diff --git a/testing/firefox-ui/harness/firefox_ui_harness/runners/update.py b/testing/firefox-ui/harness/firefox_ui_harness/runners/update.py
new file mode 100644
index 000000000..fe4936f68
--- /dev/null
+++ b/testing/firefox-ui/harness/firefox_ui_harness/runners/update.py
@@ -0,0 +1,101 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+import sys
+
+import mozfile
+import mozinstall
+
+from firefox_ui_harness.runners import FirefoxUITestRunner
+from firefox_ui_harness.testcases import UpdateTestCase
+
+
+DEFAULT_PREFS = {
+ # Bug 1355026: Re-enable when support for the new simplified UI update is available
+ 'app.update.doorhanger': False,
+ 'app.update.log': True,
+ 'startup.homepage_override_url': 'about:blank',
+}
+
+
+class UpdateTestRunner(FirefoxUITestRunner):
+
+ def __init__(self, **kwargs):
+ super(UpdateTestRunner, self).__init__(**kwargs)
+
+ self.original_bin = self.bin
+
+ self.prefs.update(DEFAULT_PREFS)
+
+ # In case of overriding the update URL, set the appropriate preference
+ override_url = kwargs.pop('update_override_url', None)
+ if override_url:
+ self.prefs.update({'app.update.url.override': override_url})
+
+ self.run_direct_update = not kwargs.pop('update_fallback_only', False)
+ self.run_fallback_update = not kwargs.pop('update_direct_only', False)
+
+ self.test_handlers = [UpdateTestCase]
+
+ def run_tests(self, tests):
+ # Used to store the last occurred exception because we execute
+ # run_tests() multiple times
+ self.exc_info = None
+
+ failed = 0
+ source_folder = self.get_application_folder(self.original_bin)
+
+ results = {}
+
+ def _run_tests(tags):
+ application_folder = None
+
+ try:
+ # Backup current tags
+ test_tags = self.test_tags
+
+ application_folder = self.duplicate_application(source_folder)
+ self.bin = mozinstall.get_binary(application_folder, 'Firefox')
+
+ self.test_tags = tags
+ super(UpdateTestRunner, self).run_tests(tests)
+
+ except Exception:
+ self.exc_info = sys.exc_info()
+ self.logger.error('Failure during execution of the update test.',
+ exc_info=self.exc_info)
+
+ finally:
+ self.test_tags = test_tags
+
+ self.logger.info('Removing copy of the application at "%s"' % application_folder)
+ try:
+ mozfile.remove(application_folder)
+ except IOError as e:
+ self.logger.error('Cannot remove copy of application: "%s"' % str(e))
+
+ # Run direct update tests if wanted
+ if self.run_direct_update:
+ _run_tests(tags=['direct'])
+ failed += self.failed
+ results['Direct'] = False if self.failed else True
+
+ # Run fallback update tests if wanted
+ if self.run_fallback_update:
+ _run_tests(tags=['fallback'])
+ failed += self.failed
+ results['Fallback'] = False if self.failed else True
+
+ self.logger.info("Summary of update tests:")
+ for test_type, result in results.iteritems():
+ self.logger.info("\t%s update test ran and %s" %
+ (test_type, 'PASSED' if result else 'FAILED'))
+
+ # Combine failed tests for all run_test() executions
+ self.failed = failed
+
+ # If exceptions happened, re-throw the last one
+ if self.exc_info:
+ ex_type, exception, tb = self.exc_info
+ raise ex_type, exception, tb