| OLD | NEW |
| (Empty) |
| 1 # Copyright (c) 2011 The Chromium OS 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 logging | |
| 6 import os | |
| 7 | |
| 8 from autotest_lib.client.bin import test, utils | |
| 9 from autotest_lib.client.common_lib import error | |
| 10 | |
| 11 class security_BundledCRXs(test.test): | |
| 12 version = 1 | |
| 13 _CRX_DIR = '/opt/google/chrome/extensions/' | |
| 14 | |
| 15 | |
| 16 def load_baseline(self): | |
| 17 """ | |
| 18 Return a list of crx's we expect, e.g. | |
| 19 ['aciahcmjmecflokailenpkdchphgkefd.crx', | |
| 20 'blpcfgokakmgnkcojhhkbfbldkacnbeo.crx', ...] | |
| 21 """ | |
| 22 # Figure out path to baseline file, by looking up our own path | |
| 23 bpath = os.path.abspath(__file__) | |
| 24 bpath = os.path.join(os.path.dirname(bpath), 'baseline') | |
| 25 bfile = open(bpath) | |
| 26 baseline_data = bfile.read() | |
| 27 baseline_set = set(baseline_data.splitlines()) | |
| 28 bfile.close() | |
| 29 return baseline_set | |
| 30 | |
| 31 | |
| 32 def fetch_bundled_crxs(self): | |
| 33 """ | |
| 34 Return a list of crx's found bundled on the system. | |
| 35 (The data returned is comparable to that of load_baseline().) | |
| 36 """ | |
| 37 cmd = "find '%s' -xdev -name '*.crx' -printf '%%f\\n'" | |
| 38 return set(utils.system_output(cmd % self._CRX_DIR).splitlines()) | |
| 39 | |
| 40 | |
| 41 def run_once(self): | |
| 42 """ | |
| 43 Enumerate all the bundled CRXs. | |
| 44 Fail if it does not match the expected set. | |
| 45 """ | |
| 46 observed_set = self.fetch_bundled_crxs() | |
| 47 baseline_set = self.load_baseline() | |
| 48 | |
| 49 # If something in the observed set is not | |
| 50 # covered by the baseline... | |
| 51 diff = observed_set.difference(baseline_set) | |
| 52 if len(diff) > 0: | |
| 53 for crx in diff: | |
| 54 logging.error('New/unexpected bundled crx %s' % crx) | |
| 55 | |
| 56 # Or, things in baseline are missing from the system: | |
| 57 diff2 = baseline_set.difference(observed_set) | |
| 58 if len(diff2) > 0: | |
| 59 for crx in diff2: | |
| 60 logging.error('Missing bundled crx %s' % crx) | |
| 61 | |
| 62 if (len(diff) + len(diff2)) > 0: | |
| 63 raise error.TestFail('Baseline mismatch') | |
| OLD | NEW |