Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(373)

Unified Diff: chrome/test/mini_installer/test_installer.py

Issue 2747023002: Cleanup machine based on the state in configuration file for mini installer test.
Patch Set: refactor to use visitor pattern Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/test/mini_installer/state_walker.py ('k') | chrome/test/mini_installer/variable_expander.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/mini_installer/test_installer.py
diff --git a/chrome/test/mini_installer/test_installer.py b/chrome/test/mini_installer/test_installer.py
index c0c9a91e3b7314954d49ff6a0fb09ffef640403e..984d7a1de8e063a1f339ecd381fd40aad987cded 100644
--- a/chrome/test/mini_installer/test_installer.py
+++ b/chrome/test/mini_installer/test_installer.py
@@ -19,10 +19,12 @@ import sys
import time
import traceback
import unittest
-import _winreg
+from state_walker import StateWalker
from variable_expander import VariableExpander
-import verifier_runner
+
+import cleaner_visitor
+import verifier_visitor
def LogMessage(message):
@@ -58,7 +60,7 @@ class Config:
class InstallerTest(unittest.TestCase):
"""Tests a test case in the config file."""
- def __init__(self, name, test, config, variable_expander, quiet):
+ def __init__(self, name, test, config, variable_expander, quiet, clean_state):
"""Constructor.
Args:
@@ -67,6 +69,8 @@ class InstallerTest(unittest.TestCase):
ending with state names.
config: The Config object.
variable_expander: A VariableExpander object.
+ quiet: A boolean to control the test output.
+ clean_state: A string to represent the cleanup state.
"""
super(InstallerTest, self).__init__()
self._name = name
@@ -74,8 +78,9 @@ class InstallerTest(unittest.TestCase):
self._config = config
self._variable_expander = variable_expander
self._quiet = quiet
- self._verifier_runner = verifier_runner.VerifierRunner()
+ self._verifier = StateWalker(verifier_visitor.VerifierVisitor())
self._clean_on_teardown = True
+ self._clean_state = clean_state
def __str__(self):
"""Returns a string representing the test case.
@@ -122,7 +127,8 @@ class InstallerTest(unittest.TestCase):
def tearDown(self):
"""Cleans up the machine if the test case fails."""
if self._clean_on_teardown:
- RunCleanCommand(True, self._variable_expander)
+ RunCleanCommand(True, self._config.states[self._clean_state],
+ self._variable_expander)
def shortDescription(self):
"""Overridden from unittest.TestCase.
@@ -143,8 +149,7 @@ class InstallerTest(unittest.TestCase):
if not self._quiet:
LogMessage('Verifying state %s' % state)
try:
- self._verifier_runner.VerifyAll(self._config.states[state],
- self._variable_expander)
+ self._verifier.Walk(self._variable_expander, self._config.states[state])
except AssertionError as e:
# If an AssertionError occurs, we intercept it and add the state name
# to the error message so that we know where the test fails.
@@ -168,30 +173,7 @@ def RunCommand(command, variable_expander):
raise Exception('Command %s returned non-zero exit status %s' % (
expanded_command, exit_status))
-
-def DeleteGoogleUpdateRegistration(system_level, registry_subkey,
- variable_expander):
- """Deletes Chrome's registration with Google Update.
-
- Args:
- system_level: True if system-level Chrome is to be deleted.
- registry_subkey: The pre-expansion registry subkey for the product.
- variable_expander: A VariableExpander object.
- """
- root = (_winreg.HKEY_LOCAL_MACHINE if system_level
- else _winreg.HKEY_CURRENT_USER)
- key_name = variable_expander.Expand(registry_subkey)
- try:
- key_handle = _winreg.OpenKey(root, key_name, 0,
- _winreg.KEY_SET_VALUE |
- _winreg.KEY_WOW64_32KEY)
- _winreg.DeleteValue(key_handle, 'pv')
- except WindowsError:
- # The key isn't present, so there is no value to delete.
- pass
-
-
-def RunCleanCommand(force_clean, variable_expander):
+def RunCleanCommand(force_clean, clean_state, variable_expander):
"""Puts the machine in the clean state (i.e. Chrome not installed).
Args:
@@ -199,34 +181,31 @@ def RunCleanCommand(force_clean, variable_expander):
installations.
variable_expander: A VariableExpander object.
"""
- # A list of (system_level, product_name, product_switch, registry_subkey)
+ # A list of (product_name, product_switch)
# tuples for the possible installed products.
data = [
- (False, '$CHROME_LONG_NAME', '',
- '$CHROME_UPDATE_REGISTRY_SUBKEY'),
- (True, '$CHROME_LONG_NAME', '--system-level',
- '$CHROME_UPDATE_REGISTRY_SUBKEY'),
+ ('$CHROME_LONG_NAME', ''),
+ ('$CHROME_LONG_NAME', '--system-level'),
]
if variable_expander.Expand('$SUPPORTS_SXS') == 'True':
- data.append((False, '$CHROME_LONG_NAME_SXS', '',
- '$CHROME_UPDATE_REGISTRY_SUBKEY_SXS'))
+ data.append(('$CHROME_LONG_NAME_SXS', ''))
interactive_option = '--interactive' if not force_clean else ''
- for system_level, product_name, product_switch, registry_subkey in data:
+ for product_name, product_switch in data:
command = ('python uninstall_chrome.py '
'--chrome-long-name="%s" '
'--no-error-if-absent %s %s' %
(product_name, product_switch, interactive_option))
try:
RunCommand(command, variable_expander)
- except:
+ except (Exception, OSError, ValueError):
message = traceback.format_exception(*sys.exc_info())
message.insert(0, 'Error cleaning up an old install with:\n')
LogMessage(''.join(message))
- if force_clean:
- DeleteGoogleUpdateRegistration(system_level, registry_subkey,
- variable_expander)
+ if force_clean:
+ StateWalker(cleaner_visitor.CleanerVisitor()).Walk(
+ variable_expander, clean_state)
def MergePropertyDictionaries(current_property, new_property):
"""Merges the new property dictionary into the current property dictionary.
@@ -323,6 +302,7 @@ def ParseConfigFile(filename, variable_expander):
config.actions[action_name] = action_command
return config
+DEFAULT_CLEAN_STATE = 'clean'
def main():
parser = argparse.ArgumentParser()
@@ -333,6 +313,9 @@ def main():
help='Build target (Release or Debug)')
parser.add_argument('--force-clean', action='store_true', default=False,
help='Force cleaning existing installations')
+ parser.add_argument('--clean-state', default='clean',
+ help='The state that is used to cleanup the machine after'
+ 'each test case.')
parser.add_argument('-q', '--quiet', action='store_true', default=False,
help='Reduce test runner output')
parser.add_argument('--write-full-results-to', metavar='FILENAME',
@@ -340,7 +323,8 @@ def main():
parser.add_argument('--config', metavar='FILENAME',
help='Path to test configuration file')
parser.add_argument('test', nargs='*',
- help='Name(s) of tests to run.')
+ help=('Name(s) of tests to run. For example, '
+ '__main__.InstallerTest.ChromeUserLevel'))
args = parser.parse_args()
if not args.config:
parser.error('missing mandatory --config FILENAME argument')
@@ -361,7 +345,8 @@ def main():
next_version_mini_installer_path)
config = ParseConfigFile(args.config, variable_expander)
- RunCleanCommand(args.force_clean, variable_expander)
+ RunCleanCommand(args.force_clean, config.states[args.clean_state],
+ variable_expander)
for test in config.tests:
# If tests were specified via |tests|, their names are formatted like so:
test_name = '%s.%s.%s' % (InstallerTest.__module__,
@@ -369,7 +354,8 @@ def main():
test['name'])
if not args.test or test_name in args.test:
suite.addTest(InstallerTest(test['name'], test['traversal'], config,
- variable_expander, args.quiet))
+ variable_expander, args.quiet,
+ args.clean_state))
verbosity = 2 if not args.quiet else 1
result = unittest.TextTestRunner(verbosity=verbosity).run(suite)
« no previous file with comments | « chrome/test/mini_installer/state_walker.py ('k') | chrome/test/mini_installer/variable_expander.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698