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

Side by Side Diff: tools/telemetry/telemetry/util/cloud_storage_unittest.py

Issue 1005903004: Revert of Refactor serving_dirs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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
1 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import os
6 import unittest 5 import unittest
7 6
8 from telemetry import decorators 7 from telemetry import decorators
9 8
10 from telemetry.unittest_util import system_stub 9 from telemetry.unittest_util import system_stub
11 from telemetry.util import cloud_storage 10 from telemetry.util import cloud_storage
12 11
13 12
14 def _FakeFindGsutil(): 13 def _FakeFindGsutil():
15 return 'fake gsutil path' 14 return 'fake gsutil path'
16 15
17 def _FakeReadHash(_):
18 return 'hashthis!'
19
20 def _FakeCalulateHashMatchesRead(_):
21 return 'hashthis!'
22
23 def _FakeCalulateHashNewHash(_):
24 return 'omgnewhash'
25
26 16
27 class CloudStorageUnitTest(unittest.TestCase): 17 class CloudStorageUnitTest(unittest.TestCase):
28 18
29 def _FakeRunCommand(self, cmd): 19 def _FakeRunCommand(self, cmd):
30 pass 20 pass
31 21
32 def _FakeGet(self, bucket, remote_path, local_path): 22 def testValidCloudUrl(self):
33 pass
34
35 def _assertRunCommandRaisesError(self, communicate_strs, error):
36 stubs = system_stub.Override(cloud_storage, ['open', 'subprocess'])
37 orig_find_gs_util = cloud_storage.FindGsutil
38 cloud_storage.FindGsutil = _FakeFindGsutil
39 stubs.open.files = {'fake gsutil path':''}
40 stubs.subprocess.Popen.returncode_result = 1
41 try:
42 for string in communicate_strs:
43 stubs.subprocess.Popen.communicate_result = ('', string)
44 self.assertRaises(error, cloud_storage._RunCommand, [])
45 finally:
46 stubs.Restore()
47 cloud_storage.FindGsutil = orig_find_gs_util
48
49 def testRunCommandCredentialsError(self):
50 strs = ['You are attempting to access protected data with no configured',
51 'Failure: No handler was ready to authenticate.']
52 self._assertRunCommandRaisesError(strs, cloud_storage.CredentialsError)
53
54 def testRunCommandPermissionError(self):
55 strs = ['status=403', 'status 403', '403 Forbidden']
56 self._assertRunCommandRaisesError(strs, cloud_storage.PermissionError)
57
58 def testRunCommandNotFoundError(self):
59 strs = ['InvalidUriError', 'No such object', 'No URLs matched',
60 'One or more URLs matched no', 'InvalidUriError']
61 self._assertRunCommandRaisesError(strs, cloud_storage.NotFoundError)
62
63 def testRunCommandServerError(self):
64 strs = ['500 Internal Server Error']
65 self._assertRunCommandRaisesError(strs, cloud_storage.ServerError)
66
67 def testRunCommandGenericError(self):
68 strs = ['Random string']
69 self._assertRunCommandRaisesError(strs, cloud_storage.CloudStorageError)
70
71 def testInsertCreatesValidCloudUrl(self):
72 orig_run_command = cloud_storage._RunCommand 23 orig_run_command = cloud_storage._RunCommand
73 try: 24 try:
74 cloud_storage._RunCommand = self._FakeRunCommand 25 cloud_storage._RunCommand = self._FakeRunCommand
75 remote_path = 'test-remote-path.html' 26 remote_path = 'test-remote-path.html'
76 local_path = 'test-local-path.html' 27 local_path = 'test-local-path.html'
77 cloud_url = cloud_storage.Insert(cloud_storage.PUBLIC_BUCKET, 28 cloud_url = cloud_storage.Insert(cloud_storage.PUBLIC_BUCKET,
78 remote_path, local_path) 29 remote_path, local_path)
79 self.assertEqual('https://console.developers.google.com/m/cloudstorage' 30 self.assertEqual('https://console.developers.google.com/m/cloudstorage'
80 '/b/chromium-telemetry/o/test-remote-path.html', 31 '/b/chromium-telemetry/o/test-remote-path.html',
81 cloud_url) 32 cloud_url)
82 finally: 33 finally:
83 cloud_storage._RunCommand = orig_run_command 34 cloud_storage._RunCommand = orig_run_command
84 35
85 def testExistsReturnsFalse(self): 36 def testExistsReturnsFalse(self):
86 stubs = system_stub.Override(cloud_storage, ['subprocess']) 37 stubs = system_stub.Override(cloud_storage, ['subprocess'])
87 orig_find_gs_util = cloud_storage.FindGsutil 38 orig_find_gs_util = cloud_storage.FindGsutil
88 try: 39 try:
89 stubs.subprocess.Popen.communicate_result = ( 40 stubs.subprocess.Popen.communicate_result = (
90 '', 41 '',
91 'CommandException: One or more URLs matched no objects.\n') 42 'CommandException: One or more URLs matched no objects.\n')
92 stubs.subprocess.Popen.returncode_result = 1 43 stubs.subprocess.Popen.returncode_result = 1
93 cloud_storage.FindGsutil = _FakeFindGsutil 44 cloud_storage.FindGsutil = _FakeFindGsutil
94 self.assertFalse(cloud_storage.Exists('fake bucket', 45 self.assertFalse(cloud_storage.Exists('fake bucket',
95 'fake remote path')) 46 'fake remote path'))
96 finally: 47 finally:
97 stubs.Restore() 48 stubs.Restore()
98 cloud_storage.FindGsutil = orig_find_gs_util 49 cloud_storage.FindGsutil = orig_find_gs_util
99
100 def testGetIfChanged(self):
101 stubs = system_stub.Override(cloud_storage, ['os', 'open'])
102 stubs.open.files[_FakeFindGsutil()] = ''
103 orig_get = cloud_storage.Get
104 orig_read_hash = cloud_storage.ReadHash
105 orig_calculate_hash = cloud_storage.CalculateHash
106 cloud_storage.ReadHash = _FakeReadHash
107 cloud_storage.CalculateHash = _FakeCalulateHashMatchesRead
108 file_path = 'test-file-path.wpr'
109 hash_path = file_path + '.sha1'
110 try:
111 cloud_storage.Get = self._FakeGet
112 # hash_path doesn't exist.
113 self.assertFalse(cloud_storage.GetIfChanged(file_path,
114 cloud_storage.PUBLIC_BUCKET))
115 # hash_path exists, but file_path doesn't.
116 stubs.os.path.files.append(hash_path)
117 self.assertTrue(cloud_storage.GetIfChanged(file_path,
118 cloud_storage.PUBLIC_BUCKET))
119 # hash_path and file_path exist, and have same hash.
120 stubs.os.path.files.append(file_path)
121 self.assertFalse(cloud_storage.GetIfChanged(file_path,
122 cloud_storage.PUBLIC_BUCKET))
123 # hash_path and file_path exist, and have different hashes.
124 cloud_storage.CalculateHash = _FakeCalulateHashNewHash
125 self.assertTrue(cloud_storage.GetIfChanged(file_path,
126 cloud_storage.PUBLIC_BUCKET))
127 finally:
128 stubs.Restore()
129 cloud_storage.Get = orig_get
130 cloud_storage.CalculateHash = orig_calculate_hash
131 cloud_storage.ReadHash = orig_read_hash
132
133 def testGetFilesInDirectoryIfChanged(self):
134 stubs = system_stub.Override(cloud_storage, ['os'])
135 stubs.os._directory = {'dir1':['1file1.sha1', '1file2.txt', '1file3.sha1'],
136 'dir2':['2file.txt'], 'dir3':['3file1.sha1']}
137 stubs.os.path.dirs = ['real_dir_path']
138 def IncrementFilesUpdated(*_):
139 IncrementFilesUpdated.files_updated +=1
140 IncrementFilesUpdated.files_updated = 0
141 orig_get_if_changed = cloud_storage.GetIfChanged
142 cloud_storage.GetIfChanged = IncrementFilesUpdated
143 try:
144 self.assertRaises(ValueError, cloud_storage.GetFilesInDirectoryIfChanged,
145 os.path.abspath(os.sep), cloud_storage.PUBLIC_BUCKET)
146 self.assertEqual(0, IncrementFilesUpdated.files_updated)
147 self.assertRaises(ValueError, cloud_storage.GetFilesInDirectoryIfChanged,
148 'fake_dir_path', cloud_storage.PUBLIC_BUCKET)
149 self.assertEqual(0, IncrementFilesUpdated.files_updated)
150 cloud_storage.GetFilesInDirectoryIfChanged('real_dir_path',
151 cloud_storage.PUBLIC_BUCKET)
152 self.assertEqual(3, IncrementFilesUpdated.files_updated)
153 finally:
154 cloud_storage.GetIfChanged = orig_get_if_changed
155 stubs.Restore()
OLDNEW
« no previous file with comments | « tools/telemetry/telemetry/util/cloud_storage.py ('k') | tools/telemetry/telemetry/util/find_dependencies.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698