Add unit tests for watchlists

Review URL: http://codereview.chromium.org/126272

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@18704 0039d316-1c4b-4281-b951-d872f2087c98
parent 522ca09c
......@@ -15,6 +15,7 @@ UNIT_TESTS = [
'tests.presubmit_unittest',
'tests.revert_unittest',
'tests.trychange_unittest',
'tests.watchlists_unittest',
]
def CheckChangeOnUpload(input_api, output_api):
......
#!/usr/bin/python
# Copyright (c) 2009 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Unit tests for watchlists.py."""
import unittest
import super_mox
import watchlists
class WatchlistsTest(super_mox.SuperMoxTestBase):
def setUp(self):
super_mox.SuperMoxTestBase.setUp(self)
self.mox.StubOutWithMock(watchlists.Watchlists, '_HasWatchlistsFile')
self.mox.StubOutWithMock(watchlists.Watchlists, '_ContentsOfWatchlistsFile')
self.mox.StubOutWithMock(watchlists.logging, 'error')
def testMissingWatchlistsFileOK(self):
"""Test that we act gracefully if WATCHLISTS file is missing."""
watchlists.Watchlists._HasWatchlistsFile().AndReturn(False)
self.mox.ReplayAll()
wl = watchlists.Watchlists('/some/random/path')
self.assertEqual(wl.GetWatchersForPaths(['some_path']), [])
def testGarbledWatchlistsFileOK(self):
"""Test that we act gracefully if WATCHLISTS file is garbled."""
contents = 'some garbled and unwanted text'
watchlists.Watchlists._HasWatchlistsFile().AndReturn(True)
watchlists.Watchlists._ContentsOfWatchlistsFile().AndReturn(contents)
watchlists.logging.error(super_mox.mox.IgnoreArg())
self.mox.ReplayAll()
wl = watchlists.Watchlists('/a/path')
self.assertEqual(wl.GetWatchersForPaths(['some_path']), [])
def testNoWatchers(self):
contents = \
"""{
'WATCHLIST_DEFINITIONS': {
'a_module': {
'filepath': 'a_module',
},
},
'WATCHLISTS': {
'a_module': [],
},
} """
watchlists.Watchlists._HasWatchlistsFile().AndReturn(True)
watchlists.Watchlists._ContentsOfWatchlistsFile().AndReturn(contents)
self.mox.ReplayAll()
wl = watchlists.Watchlists('/a/path')
self.assertEqual(wl.GetWatchersForPaths(['a_module']), [])
def testValidWatcher(self):
watchers = ['abc@def.com', 'x1@xyz.org']
contents = \
"""{
'WATCHLIST_DEFINITIONS': {
'a_module': {
'filepath': 'a_module',
},
},
'WATCHLISTS': {
'a_module': %s,
},
} """ % watchers
watchlists.Watchlists._HasWatchlistsFile().AndReturn(True)
watchlists.Watchlists._ContentsOfWatchlistsFile().AndReturn(contents)
self.mox.ReplayAll()
wl = watchlists.Watchlists('/a/path')
self.assertEqual(wl.GetWatchersForPaths(['a_module']), watchers)
def testMultipleWatchlistsTrigger(self):
"""Test that multiple watchlists can get triggered for one filepath."""
contents = \
"""{
'WATCHLIST_DEFINITIONS': {
'mac': {
'filepath': 'mac',
},
'views': {
'filepath': 'views',
},
},
'WATCHLISTS': {
'mac': ['x1@chromium.org'],
'views': ['x2@chromium.org'],
},
} """
watchlists.Watchlists._HasWatchlistsFile().AndReturn(True)
watchlists.Watchlists._ContentsOfWatchlistsFile().AndReturn(contents)
self.mox.ReplayAll()
wl = watchlists.Watchlists('/a/path')
self.assertEqual(wl.GetWatchersForPaths(['file_views_mac']),
['x1@chromium.org', 'x2@chromium.org'])
def testDuplicateWatchers(self):
"""Test that multiple watchlists can get triggered for one filepath."""
watchers = ['someone@chromium.org']
contents = \
"""{
'WATCHLIST_DEFINITIONS': {
'mac': {
'filepath': 'mac',
},
'views': {
'filepath': 'views',
},
},
'WATCHLISTS': {
'mac': %s,
'views': %s,
},
} """ % (watchers, watchers)
watchlists.Watchlists._HasWatchlistsFile().AndReturn(True)
watchlists.Watchlists._ContentsOfWatchlistsFile().AndReturn(contents)
self.mox.ReplayAll()
wl = watchlists.Watchlists('/a/path')
self.assertEqual(wl.GetWatchersForPaths(['file_views_mac']), watchers)
if __name__ == '__main__':
unittest.main()
......@@ -45,19 +45,30 @@ class Watchlists(object):
self._LoadWatchlistRules()
def _GetRulesFilePath(self):
"""Returns path to WATCHLISTS file."""
return os.path.join(self._repo_root, self._RULES_FILENAME)
def _HasWatchlistsFile(self):
"""Determine if watchlists are available for this repo."""
return os.path.exists(self._GetRulesFilePath())
def _ContentsOfWatchlistsFile(self):
"""Read the WATCHLISTS file and return its contents."""
try:
watchlists_file = open(self._GetRulesFilePath())
contents = watchlists_file.read()
watchlists_file.close()
return contents
except IOError, e:
logging.error("Cannot read %s: %s" % (self._GetRulesFilePath(), e))
return ''
def _LoadWatchlistRules(self):
"""Load watchlists from WATCHLISTS file. Does nothing if not present."""
if not self._HasWatchlistsFile():
return
watchlists_file = open(self._GetRulesFilePath())
contents = watchlists_file.read()
watchlists_file.close()
contents = self._ContentsOfWatchlistsFile()
watchlists_data = None
try:
watchlists_data = eval(contents, {'__builtins__': None}, None)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment