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

Side by Side Diff: chrome/test/mini_installer/cleanup.py

Issue 2747023002: Cleanup machine based on the state in configuration file for mini installer test.
Patch Set: fixup 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 unified diff | Download patch
OLDNEW
(Empty)
1 # Copyright 2017 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 import _winreg
6 import os
7 import shutil
8
9 import file_verifier
10 import registry_verifier
11 import verifier_runner
12
13 class FileCleaner(file_verifier.FileVerifier):
14 """ Delete the directory if it exists but marked as shouldn't exist
15 in the config file.
16 """
17 def _Assert(self, is_true, message):
18 """ Override verifyer.Verifier._Assert
19 """
20 if not is_true and self._file_exists and os.path.isdir(self._file_path):
21 shutil.rmtree(self._file_path, ignore_errors=True)
22
23 class RegistryCleaner(registry_verifier.RegistryVerifier):
24 """ Delete the registry key recursively if it exists and marked as forbidden
25 in the config file.
26 """
27 def _DeleteRegKey(self, root, key_path):
28 """ Delete a registry key recursively.
29
30 Args:
31 root: An integer represents HKEY_ constant.
32 key_path: A string represents the path of key that needs to be
33 deleted.
34 """
35 with _winreg.OpenKey(root, key_path, 0, _winreg.KEY_SET_VALUE |
36 _winreg.KEY_READ |
37 _winreg.KEY_WOW64_32KEY) as key:
38 num_of_sub_keys, _, _ = _winreg.QueryInfoKey(key)
39 for i in range(0, num_of_sub_keys):
40 self._DeleteRegKey(root, key_path + "\\" + _winreg.EnumKey(key, i))
41 _winreg.DeleteKey(root, key_path)
42
43
44 def _Assert(self, is_true, message):
45 """ Override verifyer.Verifier._Assert
46 """
47 if not is_true and self._is_key_forbidden:
48 try:
49 self._DeleteRegKey(self._root_key_value, self._sub_key)
50 except WindowsError:
51 # Suppress any delete error
52 pass
53
54 class CleanupRunner:
55 """ Run cleaners based on the config state.
56 """
57 _instance = None
58
59 def __init__(self):
60 self._cleaners = {
61 verifier_runner.FILES: FileCleaner(),
62 verifier_runner.REGISTRY_ENTRIES: RegistryCleaner(),
63 }
64
65 @classmethod
66 def Create(cls):
67 """Singleton constructor.
68 """
69 if not cls._instance:
70 cls._instance = CleanupRunner()
71 return cls._instance
72
73 def CleanAll(self, state, variable_expander):
74 """ Put the machine to a clean state based on the config file.
75
76 Only support:
77 1) Delete directory, always recursively. Delete file is NOT supported.
78 2) Delete registry key, always recursively.
79 Args:
80 state: A property dictionary reprsents the clean state in the
81 config file.
82 variable_expander: A VariableExpander object.
83 """
84 for verifier_name, verifier_input in state.iteritems():
85 if verifier_name not in self._cleaners:
86 continue
87 self._cleaners[verifier_name].VerifyInput(verifier_input,
grt (UTC plus 2) 2017/03/14 09:19:44 rather than using a Verifier to do the cleaning, i
zmin 2017/03/14 23:13:00 Ok, I'll refactor the code.
88 variable_expander)
OLDNEW
« no previous file with comments | « no previous file | chrome/test/mini_installer/file_verifier.py » ('j') | chrome/test/mini_installer/file_verifier.py » ('J')

Powered by Google App Engine
This is Rietveld 408576698