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

Side by Side Diff: appengine/findit/common/test/chrome_dependency_fetcher_test.py

Issue 2344443005: [Findit] Factoring the gitiles (etc) stuff out into its own directory (Closed)
Patch Set: reordering imports Created 4 years, 1 month 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 base64 5 import base64
6 import collections 6 import collections
7 7
8 from testing_utils import testing 8 from testing_utils import testing
9 9
10 from common import chrome_dependency_fetcher 10 from common import chrome_dependency_fetcher
11 from common import deps_parser 11 from common import deps_parser
12 from common import git_repository
13 from common import repository
14 from common import retry_http_client 12 from common import retry_http_client
15 from common import http_client_appengine 13 from common import http_client_appengine
16 from common.dependency import Dependency, DependencyRoll 14 from common.dependency import Dependency, DependencyRoll
15 from lib.gitiles.git_repository import GitRepository
16 from lib.gitiles import gitiles_repository
17 17
18 18
19 class DummyGitRepository(repository.Repository): 19 class MockGitilesRepository(GitRepository):
20 """A class for mocking GitilesRepository.
21
22 N.B., in order to use this class for mocking, every module we want to
23 test with a mock GitilesRepository must not import that class directly.
24 Instead they must import the gitiles_repository module and rely on
25 dynamic dispatch to resolve the GitilesRepository attribute. Otherwise
26 those modules will hold direct links to the real GitilesRepository
27 class, and so won't dispatch into this mock class for our unit tests."""
28
20 RESPONSES = {} 29 RESPONSES = {}
21 30
22 def __init__(self, *_): 31 def __init__(self, *_):
23 pass 32 pass
24 33
25 def GetSource(self, path, revision): 34 def GetSource(self, path, revision):
26 return self.RESPONSES.get(path, {}).get(revision, None) 35 return self.RESPONSES.get(path, {}).get(revision, None)
27 36
28 37
29 class ChromiumDEPSTest(testing.AppengineTestCase): 38 class ChromiumDEPSTest(testing.AppengineTestCase):
30 DEPS_GIT = '.DEPS.git' 39 DEPS_GIT = '.DEPS.git'
31 DEPS = 'DEPS' 40 DEPS = 'DEPS'
32 deps_downloader = chrome_dependency_fetcher.DEPSDownloader( 41 deps_downloader = chrome_dependency_fetcher.DEPSDownloader(
33 DummyGitRepository()) 42 MockGitilesRepository())
34 chrome_dep_fetcher = chrome_dependency_fetcher.ChromeDependencyFetcher( 43 chrome_dep_fetcher = chrome_dependency_fetcher.ChromeDependencyFetcher(
35 DummyGitRepository()) 44 MockGitilesRepository())
36 45
37 def testUseDEPS_GIT(self): 46 def testUseDEPS_GIT(self):
38 revision = 'abc' 47 revision = 'abc'
39 expected_content = '.DEPS.git content' 48 expected_content = '.DEPS.git content'
40 49
41 DummyGitRepository.RESPONSES = { 50 MockGitilesRepository.RESPONSES = {
42 self.DEPS_GIT: { 51 self.DEPS_GIT: {
43 revision: expected_content 52 revision: expected_content
44 }, 53 },
45 self.DEPS: { 54 self.DEPS: {
46 revision: 'DEPS test' 55 revision: 'DEPS test'
47 }, 56 },
48 } 57 }
49 58
50 content = self.deps_downloader.Load( 59 content = self.deps_downloader.Load(
51 chrome_dependency_fetcher._CHROMIUM_REPO_MASTER, revision, 'DEPS') 60 chrome_dependency_fetcher._CHROMIUM_REPO_MASTER, revision, 'DEPS')
52 self.assertEqual(expected_content, content) 61 self.assertEqual(expected_content, content)
53 62
54 def testNotUseDEPS_GIT(self): 63 def testNotUseDEPS_GIT(self):
55 revision = 'abc' 64 revision = 'abc'
56 expected_content = 'DEPS test' 65 expected_content = 'DEPS test'
57 66
58 DummyGitRepository.RESPONSES = { 67 MockGitilesRepository.RESPONSES = {
59 self.DEPS_GIT: { 68 self.DEPS_GIT: {
60 revision: '.DEPS.git content' 69 revision: '.DEPS.git content'
61 }, 70 },
62 self.DEPS: { 71 self.DEPS: {
63 revision: expected_content 72 revision: expected_content
64 }, 73 },
65 } 74 }
66 75
67 self.mock(git_repository, 'GitRepository', DummyGitRepository) 76 self.mock(gitiles_repository, 'GitilesRepository', MockGitilesRepository)
68 77
69 content = self.deps_downloader.Load( 78 content = self.deps_downloader.Load(
70 'https://src.git', revision, 'DEPS') 79 'https://src.git', revision, 'DEPS')
71 self.assertEqual(expected_content, content) 80 self.assertEqual(expected_content, content)
72 81
73 def testUseFallbackDEPS(self): 82 def testUseFallbackDEPS(self):
74 revision = 'abc' 83 revision = 'abc'
75 expected_content = 'DEPS test' 84 expected_content = 'DEPS test'
76 85
77 DummyGitRepository.RESPONSES = { 86 MockGitilesRepository.RESPONSES = {
78 self.DEPS: { 87 self.DEPS: {
79 revision: expected_content 88 revision: expected_content
80 }, 89 },
81 } 90 }
82 91
83 self.mock(git_repository, 'GitRepository', DummyGitRepository) 92 self.mock(gitiles_repository, 'GitilesRepository', MockGitilesRepository)
84 93
85 content = self.deps_downloader.Load( 94 content = self.deps_downloader.Load(
86 'https://src.git', revision, 'NONEXISTENT_DEPS') 95 'https://src.git', revision, 'NONEXISTENT_DEPS')
87 self.assertEqual(expected_content, content) 96 self.assertEqual(expected_content, content)
88 97
89 def testUseSlaveDEPS(self): 98 def testUseSlaveDEPS(self):
90 revision = 'abc' 99 revision = 'abc'
91 expected_content = 'slave DEPS content' 100 expected_content = 'slave DEPS content'
92 101
93 DummyGitRepository.RESPONSES = { 102 MockGitilesRepository.RESPONSES = {
94 self.DEPS_GIT: { 103 self.DEPS_GIT: {
95 revision: '.DEPS.git content' 104 revision: '.DEPS.git content'
96 }, 105 },
97 'slave.DEPS': { 106 'slave.DEPS': {
98 revision: expected_content 107 revision: expected_content
99 }, 108 },
100 } 109 }
101 110
102 self.mock(git_repository, 'GitRepository', DummyGitRepository) 111 self.mock(gitiles_repository, 'GitilesRepository', MockGitilesRepository)
103 112
104 content = self.deps_downloader.Load( 113 content = self.deps_downloader.Load(
105 'https://src.git', revision, 'slave.DEPS') 114 'https://src.git', revision, 'slave.DEPS')
106 self.assertEqual(expected_content, content) 115 self.assertEqual(expected_content, content)
107 116
108 def testFailedToPullDEPSFile(self): 117 def testFailedToPullDEPSFile(self):
109 DummyGitRepository.RESPONSES = {} 118 MockGitilesRepository.RESPONSES = {}
110 119
111 self.assertRaisesRegexp(Exception, 'Failed to pull DEPS file.', 120 self.assertRaisesRegexp(Exception, 'Failed to pull DEPS file.',
112 self.deps_downloader.Load, 121 self.deps_downloader.Load,
113 'https://src.git', 'abc', 'DEPS') 122 'https://src.git', 'abc', 'DEPS')
114 123
115 def testDEPSDownloaderForChromeVersion(self): 124 def testDEPSDownloaderForChromeVersion(self):
116 125
117 def _MockGet(*_): 126 def _MockGet(*_):
118 return 200, base64.b64encode('Dummy DEPS content') 127 return 200, base64.b64encode('Dummy DEPS content')
119 128
120 self.mock(http_client_appengine.HttpClientAppengine, '_Get', _MockGet) 129 self.mock(http_client_appengine.HttpClientAppengine, '_Get', _MockGet)
121 130
122 deps_downloader = chrome_dependency_fetcher.DEPSDownloader( 131 deps_downloader = chrome_dependency_fetcher.DEPSDownloader(
123 git_repository.GitRepository( 132 gitiles_repository.GitilesRepository(
124 http_client=http_client_appengine.HttpClientAppengine())) 133 http_client=http_client_appengine.HttpClientAppengine()))
125 content = deps_downloader.Load( 134 content = deps_downloader.Load(
126 'http://chrome-internal', '50.0.1234.0', 'DEPS') 135 'http://chrome-internal', '50.0.1234.0', 'DEPS')
127 self.assertEqual(content, 'Dummy DEPS content') 136 self.assertEqual(content, 'Dummy DEPS content')
128 137
129 self.assertRaisesRegexp( 138 self.assertRaisesRegexp(
130 Exception, 139 Exception,
131 'Failed to pull DEPS file from http://chrome, at revision 50.0.1234.1.', 140 'Failed to pull DEPS file from http://chrome, at revision 50.0.1234.1.',
132 self.deps_downloader.Load, 141 self.deps_downloader.Load,
133 'http://chrome', '50.0.1234.1', 'DEPS') 142 'http://chrome', '50.0.1234.1', 'DEPS')
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 def DummyUpdateDependencyTree(root_dep, target_os_list, _): 192 def DummyUpdateDependencyTree(root_dep, target_os_list, _):
184 self.assertEqual(src_path, root_dep.path) 193 self.assertEqual(src_path, root_dep.path)
185 self.assertEqual(src_repo_url, root_dep.repo_url) 194 self.assertEqual(src_repo_url, root_dep.repo_url)
186 self.assertEqual([os_platform], target_os_list) 195 self.assertEqual([os_platform], target_os_list)
187 196
188 expected_dependency_dict[root_dep.path] = root_dep 197 expected_dependency_dict[root_dep.path] = root_dep
189 child1_dep.SetParent(root_dep) 198 child1_dep.SetParent(root_dep)
190 child2_dep.SetParent(root_dep) 199 child2_dep.SetParent(root_dep)
191 grand_child1.SetParent(child1_dep) 200 grand_child1.SetParent(child1_dep)
192 201
193 self.mock(git_repository, 'GitRepository', DummyGitRepository) 202 self.mock(gitiles_repository, 'GitilesRepository', MockGitilesRepository)
194 self.mock(deps_parser, 'UpdateDependencyTree', DummyUpdateDependencyTree) 203 self.mock(deps_parser, 'UpdateDependencyTree', DummyUpdateDependencyTree)
195 204
196 dependency_dict = self.chrome_dep_fetcher.GetDependency( 205 dependency_dict = self.chrome_dep_fetcher.GetDependency(
197 '50.0.1234.0', os_platform) 206 '50.0.1234.0', os_platform)
198 self.assertEqual(expected_dependency_dict, dependency_dict) 207 self.assertEqual(expected_dependency_dict, dependency_dict)
199 208
200 def testGetDependencyRolls(self): 209 def testGetDependencyRolls(self):
201 def MockGetDependency(revision, os_platform, _=False): 210 def MockGetDependency(revision, os_platform, _=False):
202 self.assertEqual('unix', os_platform) 211 self.assertEqual('unix', os_platform)
203 if revision == 'rev2': 212 if revision == 'rev2':
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 'src/', 287 'src/',
279 'https://chromium.googlesource.com/chromium/src.git', '4', '5'), 288 'https://chromium.googlesource.com/chromium/src.git', '4', '5'),
280 } 289 }
281 self.assertEqual(self.chrome_dep_fetcher.GetDependencyRollsDict( 290 self.assertEqual(self.chrome_dep_fetcher.GetDependencyRollsDict(
282 '4', '5', 'all'), expected_deps_rolls_dict) 291 '4', '5', 'all'), expected_deps_rolls_dict)
283 292
284 def testIsChromeVersion(self): 293 def testIsChromeVersion(self):
285 self.assertTrue(chrome_dependency_fetcher.IsChromeVersion('50.0.1234.1')) 294 self.assertTrue(chrome_dependency_fetcher.IsChromeVersion('50.0.1234.1'))
286 self.assertFalse(chrome_dependency_fetcher.IsChromeVersion('a.b.c.e')) 295 self.assertFalse(chrome_dependency_fetcher.IsChromeVersion('a.b.c.e'))
287 self.assertFalse(chrome_dependency_fetcher.IsChromeVersion('5.021.2.0.123')) 296 self.assertFalse(chrome_dependency_fetcher.IsChromeVersion('5.021.2.0.123'))
OLDNEW
« no previous file with comments | « appengine/findit/common/test/change_log_test.py ('k') | appengine/findit/common/test/dependency_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698