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

Side by Side Diff: tools/perf/page_sets/presubmit_unittest.py

Issue 430473011: Fleshout cloud_storage stub implementation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove presubmit unittests since presubmit is going to be deleted in hte next CL. Created 6 years, 2 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
« no previous file with comments | « no previous file | tools/telemetry/telemetry/unittest/system_stub.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 # Copyright 2013 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 collections
6 import os
7 import sys
8 import unittest
9
10 PERF_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
11 sys.path.insert(0, os.path.join(os.path.dirname(PERF_ROOT), 'telemetry'))
12 from telemetry.unittest import system_stub
13
14 sys.path.insert(0, PERF_ROOT)
15 from page_sets import PRESUBMIT
16
17
18 class AffectedFileStub(object):
19 def __init__(self, absolute_local_path, action):
20 self._absolute_local_path = absolute_local_path
21 self.action = action
22
23 def AbsoluteLocalPath(self):
24 return self._absolute_local_path
25
26 def Action(self):
27 return self.action
28
29 class InputAPIStub(object):
30 def __init__(self, paths, deleted_paths=None, added_paths=None):
31 self._paths = paths
32 self._deleted_paths = deleted_paths if deleted_paths else []
33 self._added_paths = added_paths if added_paths else []
34
35 def AffectedFiles(self, include_deletes=True, file_filter=None):
36 if not file_filter:
37 file_filter = lambda x: True
38
39 affected_files = []
40 for path in self._paths:
41 affected_file_stub = AffectedFileStub(path, 'M')
42 if file_filter(affected_file_stub):
43 affected_files.append(affected_file_stub)
44
45 for path in self._added_paths:
46 affected_file_stub = AffectedFileStub(path, 'A')
47 if file_filter(affected_file_stub):
48 affected_files.append(affected_file_stub)
49
50 if include_deletes:
51 for path in self._deleted_paths:
52 affected_file_stub = AffectedFileStub(path, 'D')
53 if file_filter(affected_file_stub):
54 affected_files.append(affected_file_stub)
55 return affected_files
56
57 def AbsoluteLocalPaths(self):
58 return [af.AbsoluteLocalPath() for af in self.AffectedFiles()]
59
60 def PresubmitLocalPath(self):
61 return PRESUBMIT.__file__
62
63
64 class OutputAPIStub(object):
65 class PresubmitError(Exception):
66 pass
67
68 class PresubmitNotifyResult(Exception):
69 pass
70
71
72 PRESUBMIT.LoadSupport(InputAPIStub([])) # do this to support monkey patching
73
74 class PresubmitTest(unittest.TestCase):
75 def setUp(self):
76 success_file_hash = 'da39a3ee5e6b4b0d3255bfef95601890afd80709'
77
78 self._stubs = system_stub.Override(
79 PRESUBMIT, ['cloud_storage', 'os', 'raw_input'])
80 self._stubs.raw_input.input = 'public'
81 # Files in Cloud Storage.
82 self._stubs.cloud_storage.remote_paths = [
83 'skip'.zfill(40),
84 ]
85 # Local data files and their hashes.
86 self._stubs.cloud_storage.local_file_hashes = {
87 '/path/to/skip.wpr': 'skip'.zfill(40),
88 '/path/to/success.wpr': success_file_hash,
89 '/path/to/wrong_hash.wpr': success_file_hash,
90 }
91 # Local data files.
92 self._stubs.os.path.files = (
93 self._stubs.cloud_storage.local_file_hashes.keys())
94 # Local hash files and their contents.
95 self._stubs.cloud_storage.local_hash_files = {
96 '/path/to/invalid_hash.wpr.sha1': 'invalid_hash',
97 '/path/to/missing.wpr.sha1': 'missing'.zfill(40),
98 '/path/to/success.wpr.sha1': success_file_hash,
99 '/path/to/skip.wpr.sha1': 'skip'.zfill(40),
100 '/path/to/wrong_hash.wpr.sha1': 'wronghash'.zfill(40),
101 }
102
103 def tearDown(self):
104 self._stubs.Restore()
105
106 def assertResultCount(self, results, expected_errors, expected_notifications):
107 counts = collections.defaultdict(int)
108 for result in results:
109 counts[type(result)] += 1
110 actual_errors = counts[OutputAPIStub.PresubmitError]
111 actual_notifications = counts[OutputAPIStub.PresubmitNotifyResult]
112 self.assertEqual(expected_errors, actual_errors,
113 msg='Expected %d errors, but got %d. Results: %s' %
114 (expected_errors, actual_errors, results))
115 self.assertEqual(expected_notifications, actual_notifications,
116 msg='Expected %d notifications, but got %d. Results: %s' %
117 (expected_notifications, actual_notifications, results))
118
119 def _CheckUpload(self, paths, deleted_paths=None, added_paths=None):
120 input_api = InputAPIStub(paths, deleted_paths, added_paths)
121 return PRESUBMIT.CheckChangeOnUpload(input_api, OutputAPIStub())
122
123 def testIgnoreDeleted(self):
124 results = self._CheckUpload([], ['/path/to/deleted.wpr.sha1'])
125 self.assertResultCount(results, 0, 0)
126
127 def testIgnoreNonHashes(self):
128 results = self._CheckUpload(['/path/to/irrelevant.py'])
129 self.assertResultCount(results, 0, 0)
130
131 def testInvalidHash(self):
132 results = self._CheckUpload(['/path/to/invalid_hash.wpr.sha1'])
133 self.assertResultCount(results, 1, 0)
134 self.assertTrue('valid SHA-1 hash' in str(results[0]), msg=results[0])
135
136 def testMissingFile(self):
137 results = self._CheckUpload(['/path/to/missing.wpr.sha1'])
138 self.assertResultCount(results, 1, 0)
139 self.assertTrue('not found' in str(results[0]), msg=results[0])
140
141 def testSkip(self):
142 results = self._CheckUpload(['/path/to/skip.wpr.sha1'])
143 self.assertResultCount(results, 0, 0)
144
145 def testSuccess(self):
146 results = self._CheckUpload(['/path/to/success.wpr.sha1'])
147 self.assertResultCount(results, 0, 1)
148 self.assertTrue('Uploaded' in str(results[0]), msg=results[0])
149
150 def testWrongHash(self):
151 results = self._CheckUpload(['/path/to/wrong_hash.wpr.sha1'])
152 self.assertTrue('does not match' in str(results[0]), msg=results[0])
153
154
155 if __name__ == '__main__':
156 unittest.main()
OLDNEW
« no previous file with comments | « no previous file | tools/telemetry/telemetry/unittest/system_stub.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698