Index: tools/checkteamtags/checkteamtags_test.py |
diff --git a/tools/checkteamtags/checkteamtags_test.py b/tools/checkteamtags/checkteamtags_test.py |
index b99f66430edf35de5cefd120512891fd183f93af..5dc0c4a984ab5d05bc84d1acea95beaae1acb854 100644 |
--- a/tools/checkteamtags/checkteamtags_test.py |
+++ b/tools/checkteamtags/checkteamtags_test.py |
@@ -2,6 +2,7 @@ |
# Use of this source code is governed by a BSD-style license that can be |
# found in the LICENSE file. |
+import json |
import os |
import sys |
import unittest |
@@ -16,7 +17,8 @@ import mock |
def mock_file(lines): |
inner_mock = mock.MagicMock() |
- inner_attrs = {'readlines.return_value': lines} |
+ inner_attrs = {'readlines.return_value': lines, |
+ '__iter__.return_value': lines} |
inner_mock.configure_mock(**inner_attrs) |
return_val = mock.MagicMock() |
@@ -24,6 +26,33 @@ def mock_file(lines): |
return_val.configure_mock(**attrs) |
return return_val |
+ |
+DEFAULT_MAPPING = { |
+ 'dir-to-component': {}, |
+ 'component-to-team': {}, |
+} |
+ |
+def mock_url_open(data=None): |
+ """Simulate the result of fetching the cloud location of the mapping. |
+ |
+ i.e. https://storage.googleapis.com/chromium-owners/component_map.json |
+ """ |
+ if data is None: |
+ data = DEFAULT_MAPPING |
+ |
+ class _MockJsonResponse(object): |
+ def __init__(self, data): |
+ self.data = data |
+ |
+ def read(self): |
+ return json.dumps(self.data) |
+ |
+ def inner(url): |
+ if url.endswith('.json'): |
+ return _MockJsonResponse(data) |
+ return inner |
+ |
+ |
NO_TAGS = """ |
mock@chromium.org |
""".splitlines() |
@@ -75,45 +104,109 @@ mock@chromium.org |
open_name = 'checkteamtags.open' |
-@mock.patch('sys.argv', ['checkteamtags', '--bare' ,'OWNERS']) |
@mock.patch('sys.stdout', mock.MagicMock()) |
+@mock.patch('os.path.exists', mock.MagicMock()) |
class CheckTeamTagsTest(unittest.TestCase): |
+ @mock.patch('urllib2.urlopen', mock_url_open()) |
+ @mock.patch('sys.argv', ['checkteamtags', '--bare' ,'OWNERS']) |
def testNoTags(self): |
with mock.patch(open_name, create=True) as mock_open: |
mock_open.return_value = mock_file(NO_TAGS) |
self.assertEqual(0, checkteamtags.main()) |
+ @mock.patch('urllib2.urlopen', mock_url_open()) |
+ @mock.patch('sys.argv', ['checkteamtags', '--bare' ,'OWNERS']) |
def testMultipleComponentTags(self): |
with mock.patch(open_name, create=True) as mock_open: |
mock_open.return_value = mock_file(MULTIPLE_COMPONENT_TAGS) |
self.assertEqual(1, checkteamtags.main()) |
+ @mock.patch('urllib2.urlopen', mock_url_open()) |
+ @mock.patch('sys.argv', ['checkteamtags', '--bare' ,'OWNERS']) |
def testMultipleComponentsInTag(self): |
with mock.patch(open_name, create=True) as mock_open: |
mock_open.return_value = mock_file(MULTIPLE_COMPONENTS_IN_TAG) |
self.assertEqual(1, checkteamtags.main()) |
+ @mock.patch('urllib2.urlopen', mock_url_open()) |
+ @mock.patch('sys.argv', ['checkteamtags', '--bare' ,'OWNERS']) |
def testMissingComponent(self): |
with mock.patch(open_name, create=True) as mock_open: |
mock_open.return_value = mock_file(MISSING_COMPONENT) |
self.assertEqual(1, checkteamtags.main()) |
+ @mock.patch('urllib2.urlopen', mock_url_open()) |
+ @mock.patch('sys.argv', ['checkteamtags', '--bare' ,'OWNERS']) |
def testMultipleTeamTags(self): |
with mock.patch(open_name, create=True) as mock_open: |
mock_open.return_value = mock_file(MULTIPLE_TEAM_TAGS) |
self.assertEqual(1, checkteamtags.main()) |
+ @mock.patch('urllib2.urlopen', mock_url_open()) |
+ @mock.patch('sys.argv', ['checkteamtags', '--bare' ,'OWNERS']) |
def testMultipleTeamsInTag(self): |
with mock.patch(open_name, create=True) as mock_open: |
mock_open.return_value = mock_file(MULTIPLE_TEAMS_IN_TAG) |
self.assertEqual(1, checkteamtags.main()) |
+ @mock.patch('urllib2.urlopen', mock_url_open()) |
+ @mock.patch('sys.argv', ['checkteamtags', '--bare' ,'OWNERS']) |
def testMissingTeam(self): |
with mock.patch(open_name, create=True) as mock_open: |
mock_open.return_value = mock_file(MISSING_TEAM) |
self.assertEqual(1, checkteamtags.main()) |
+ @mock.patch('urllib2.urlopen', mock_url_open()) |
+ @mock.patch('sys.argv', ['checkteamtags', '--bare' ,'OWNERS']) |
def testBasic(self): |
with mock.patch(open_name, create=True) as mock_open: |
mock_open.return_value = mock_file(BASIC) |
self.assertEqual(0, checkteamtags.main()) |
+ |
+ @mock.patch('urllib2.urlopen', mock_url_open({ |
+ 'dir-to-component': { |
+ 'some/dir': 'V8>mock_component', |
+ }, |
+ 'component-to-team': { |
+ 'V8>mock_component': 'some-other-team@chromium.org', |
+ }, |
+ })) |
+ @mock.patch('sys.argv', ['checkteamtags', '--bare', 'fakepath/OWNERS']) |
+ def testMappingFail(self): |
+ with mock.patch(open_name, create=True) as mock_open: |
+ mock_open.return_value = mock_file(BASIC) |
+ with mock.patch('owners_file_tags.open', create=True) as mock_open_2: |
+ mock_open_2.return_value = mock_file(BASIC) |
+ self.assertEqual(1, checkteamtags.main()) |
+ |
+ @mock.patch('urllib2.urlopen', mock_url_open({ |
+ 'dir-to-component': { |
+ 'some/dir': 'V8>mock_component', |
+ }, |
+ 'component-to-team': { |
+ 'V8>mock_component': 'some-other-team@chromium.org', |
+ }, |
+ })) |
+ @mock.patch('sys.argv', ['checkteamtags', '--bare', 'some/dir/OWNERS']) |
+ def testMappingPassRename(self): |
+ with mock.patch(open_name, create=True) as mock_open: |
+ mock_open.return_value = mock_file(BASIC) |
+ with mock.patch('owners_file_tags.open', create=True) as mock_open_2: |
+ mock_open_2.return_value = mock_file(BASIC) |
+ self.assertEqual(0, checkteamtags.main()) |
+ |
+ @mock.patch('urllib2.urlopen', mock_url_open({ |
+ 'dir-to-component': { |
+ 'some/dir/': 'V8>mock_component', |
+ }, |
+ 'component-to-team': { |
+ 'V8>mock_component': 'some-team@chromium.org', |
+ }, |
+ })) |
+ @mock.patch('sys.argv', ['checkteamtags', '--bare', 'other/dir/OWNERS']) |
+ def testMappingPassNew(self): |
+ with mock.patch(open_name, create=True) as mock_open: |
+ mock_open.return_value = mock_file(BASIC) |
+ with mock.patch('owners_file_tags.open', create=True) as mock_open_2: |
+ mock_open_2.return_value = mock_file(BASIC) |
+ self.assertEqual(0, checkteamtags.main()) |