14a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair# Copyright 2015 The Chromium Authors. All rights reserved. 24a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair# Use of this source code is governed by a BSD-style license that can be 34a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair# found in the LICENSE file. 44a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 54a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairimport json 64a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairimport unittest 74a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 84a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairimport webapp2 94a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairimport webtest 104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfrom dashboard import list_monitored_tests 124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfrom dashboard import testing_common 134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfrom dashboard.models import graph_data 144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfrom dashboard.models import sheriff 154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairclass ListMonitoredTestsTest(testing_common.TestCase): 184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair def setUp(self): 204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair super(ListMonitoredTestsTest, self).setUp() 214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair app = webapp2.WSGIApplication( 224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair [('/list_monitored_tests', 234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair list_monitored_tests.ListMonitoredTestsHandler)]) 244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair self.testapp = webtest.TestApp(app) 254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair def _AddSampleTestData(self): 274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair """Adds some sample data used in the tests below.""" 284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair master = graph_data.Master(id='TheMaster').put() 294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair bot = graph_data.Bot(id='TheBot', parent=master).put() 304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair suite1 = graph_data.Test(id='Suite1', parent=bot).put() 314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair suite2 = graph_data.Test(id='Suite2', parent=bot).put() 324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair graph_data.Test(id='aaa', parent=suite1, has_rows=True).put() 334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair graph_data.Test(id='bbb', parent=suite1, has_rows=True).put() 344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair graph_data.Test(id='ccc', parent=suite2, has_rows=True).put() 354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair graph_data.Test(id='ddd', parent=suite2, has_rows=True).put() 364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair def _AddSheriff(self, name, email=None, url=None, 384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair internal_only=False, summarize=False, patterns=None): 394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair """Adds a Sheriff entity to the datastore.""" 404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair sheriff.Sheriff( 414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair id=name, email=email, url=url, internal_only=internal_only, 424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair summarize=summarize, patterns=patterns or []).put() 434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 4446b43bff003ceda46cf9a5d40a47f7674996d2e0Zhen Wang def testGet_ValidSheriff_ReturnsJSONListOfTests(self): 454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair self._AddSheriff('X', patterns=['*/*/Suite1/*']) 464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair self._AddSampleTestData() 474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair response = self.testapp.get( 484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair '/list_monitored_tests', {'get-sheriffed-by': 'X'}) 494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair self.assertEqual( 504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ['TheMaster/TheBot/Suite1/aaa', 'TheMaster/TheBot/Suite1/bbb'], 514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair json.loads(response.body)) 524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair def testGet_NoParameterGiven_ReturnsError(self): 544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair # This would raise an exception (and fail the test) if the status 554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair # doesn't match the given status. 564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair self.testapp.get('/list_monitored_tests', status=400) 574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair def testGet_NonExistentSheriff_ReturnsJSONEmptyList(self): 594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair response = self.testapp.get( 604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair '/list_monitored_tests', {'get-sheriffed-by': 'Bogus Sheriff'}) 614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair self.assertEqual([], json.loads(response.body)) 624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairif __name__ == '__main__': 654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair unittest.main() 66