| Index: dashboard/dashboard/benchmark_health_report_test.py
|
| diff --git a/dashboard/dashboard/benchmark_health_report_test.py b/dashboard/dashboard/benchmark_health_report_test.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..589f34aa516ebdb3f9eba3c7a8c7b36c5cc3772d
|
| --- /dev/null
|
| +++ b/dashboard/dashboard/benchmark_health_report_test.py
|
| @@ -0,0 +1,162 @@
|
| +# Copyright 2017 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.
|
| +
|
| +import datetime
|
| +import unittest
|
| +
|
| +import webapp2
|
| +import webtest
|
| +
|
| +from google.appengine.ext import ndb
|
| +
|
| +from dashboard import benchmark_health_report
|
| +from dashboard import update_test_suites
|
| +from dashboard.common import stored_object
|
| +from dashboard.common import testing_common
|
| +from dashboard.common import utils
|
| +from dashboard.models import anomaly
|
| +from dashboard.models import graph_data
|
| +from dashboard.models import sheriff
|
| +
|
| +
|
| +class BenchmarkHealthReportTest(testing_common.TestCase):
|
| +
|
| + def setUp(self):
|
| + super(BenchmarkHealthReportTest, self).setUp()
|
| + app = webapp2.WSGIApplication(
|
| + [('/benchmark_health_report',
|
| + benchmark_health_report.BenchmarkHealthReportHandler)])
|
| + self.testapp = webtest.TestApp(app)
|
| +
|
| + def _AddAnomalyEntities(
|
| + self, revision_ranges, test_key, sheriff_key, bug_id=None):
|
| + """Adds a group of Anomaly entities to the datastore."""
|
| + urlsafe_keys = []
|
| + for start_rev, end_rev in revision_ranges:
|
| + anomaly_key = anomaly.Anomaly(
|
| + start_revision=start_rev, end_revision=end_rev,
|
| + test=test_key, bug_id=bug_id, sheriff=sheriff_key,
|
| + median_before_anomaly=100, median_after_anomaly=200).put()
|
| + urlsafe_keys.append(anomaly_key.urlsafe())
|
| + return urlsafe_keys
|
| +
|
| + def _AddTests(self):
|
| + """Adds sample TestMetadata entities and returns their keys."""
|
| + testing_common.AddTests(['ChromiumPerf'], ['linux'], {
|
| + 'sunspider': {
|
| + 'Total': {},
|
| + 'ref': {},
|
| + },
|
| + 'page_cycler': {
|
| + 'load_time': {
|
| + 'cnn.com': {},
|
| + 'google.com': {},
|
| + }
|
| + }
|
| + })
|
| + tests = graph_data.TestMetadata.query()
|
| + for test in tests:
|
| + test.improvement_direction = anomaly.DOWN
|
| + ndb.put_multi(tests)
|
| +
|
| + def _AddSheriff(self, patterns):
|
| + """Adds a Sheriff entity and returns the key."""
|
| + return sheriff.Sheriff(
|
| + id='Chromium Perf Sheriff',
|
| + email='sullivan@google.com',
|
| + patterns=patterns).put()
|
| +
|
| + def _AddCachedSuites(self):
|
| + test_suites = {
|
| + 'sunspider': {
|
| + 'mas': {'ChromiumPerf': {'mac': False, 'linux': False}},
|
| + 'mon': ['Total'],
|
| + },
|
| + 'page_cycler': {
|
| + 'mas': {'ChromiumPerf': {'linux': False}, 'CrOS': {'foo': False}},
|
| + 'mon': ['load_time'],
|
| + },
|
| + 'speedometer': {
|
| + 'mas': {'CrOS': {'foo': False}}
|
| + }
|
| + }
|
| + key = update_test_suites._NamespaceKey(
|
| + update_test_suites._LIST_SUITES_CACHE_KEY)
|
| + stored_object.Set(key, test_suites)
|
| +
|
| + def testGet(self):
|
| + response = self.testapp.get('/benchmark_health_report')
|
| + self.assertEqual('text/html', response.content_type)
|
| + self.assertIn('Chrome Performance Dashboard', response.body)
|
| +
|
| + def testPost_MasterArgument_ListsTestsForMaster(self):
|
| + self._AddCachedSuites()
|
| + response = self.testapp.post(
|
| + '/benchmark_health_report', {'master': 'CrOS'})
|
| + benchmark_list = self.GetJsonValue(response, 'benchmarks')
|
| + self.assertItemsEqual(benchmark_list, ['page_cycler', 'speedometer'])
|
| +
|
| + def testPost_BenchmarkArgument_ListsAlertsAndBots(self):
|
| + self._AddCachedSuites()
|
| + self._AddSheriff(['*/*/page_cycler/*', '*/*/page_cycler/*/*'])
|
| + self._AddTests()
|
| + self._AddAnomalyEntities(
|
| + [(200, 400), (600, 800)],
|
| + utils.TestKey('ChromiumPerf/linux/page_cycler/load_time'),
|
| + ndb.Key('Sheriff', 'Chromium Perf Sheriff'))
|
| + self._AddAnomalyEntities(
|
| + [(500, 700)],
|
| + utils.TestKey('ChromiumPerf/linux/page_cycler/load_time/cnn.com'),
|
| + ndb.Key('Sheriff', 'Chromium Perf Sheriff'))
|
| + response = self.testapp.post(
|
| + '/benchmark_health_report', {
|
| + 'benchmark': 'page_cycler',
|
| + 'num_days': '30',
|
| + 'master': 'ChromiumPerf',
|
| + })
|
| + bots = self.GetJsonValue(response, 'bots')
|
| + self.assertItemsEqual(bots, ['linux'])
|
| + self.assertTrue(self.GetJsonValue(response, 'monitored'))
|
| + alerts = self.GetJsonValue(response, 'alerts')
|
| + self.assertEqual(3, len(alerts))
|
| +
|
| + def testPost_Benchmark_NotMonitored(self):
|
| + self._AddCachedSuites()
|
| + self._AddTests()
|
| + response = self.testapp.post(
|
| + '/benchmark_health_report', {
|
| + 'benchmark': 'page_cycler',
|
| + 'num_days': '30',
|
| + 'master': 'ChromiumPerf',
|
| + })
|
| + self.assertFalse(self.GetJsonValue(response, 'monitored'))
|
| +
|
| + def testPost_BenchmarkArgumentNumDaysArgument_ListsCorrectAlerts(self):
|
| + self._AddCachedSuites()
|
| + self._AddSheriff(['*/*/page_cycler/*', '*/*/page_cycler/*/*'])
|
| + self._AddTests()
|
| + self._AddAnomalyEntities(
|
| + [(200, 400), (600, 800)],
|
| + utils.TestKey('ChromiumPerf/linux/page_cycler/load_time'),
|
| + ndb.Key('Sheriff', 'Chromium Perf Sheriff'))
|
| + self._AddAnomalyEntities(
|
| + [(500, 700)],
|
| + utils.TestKey('ChromiumPerf/linux/page_cycler/load_time/cnn.com'),
|
| + ndb.Key('Sheriff', 'Chromium Perf Sheriff'))
|
| + anomalies = anomaly.Anomaly.query().fetch()
|
| + anomalies[0].timestamp = datetime.datetime.now() - datetime.timedelta(
|
| + days=20)
|
| + anomalies[0].put()
|
| + response = self.testapp.post(
|
| + '/benchmark_health_report',
|
| + {'benchmark': 'page_cycler', 'num_days': '5', 'master': 'ChromiumPerf'})
|
| + bots = self.GetJsonValue(response, 'bots')
|
| + self.assertItemsEqual(bots, ['linux'])
|
| + self.assertTrue(self.GetJsonValue(response, 'monitored'))
|
| + alerts = self.GetJsonValue(response, 'alerts')
|
| + self.assertEqual(2, len(alerts))
|
| +
|
| +
|
| +if __name__ == '__main__':
|
| + unittest.main()
|
|
|