blob: e8ceef6281768164a6aa2ddb10ccdf84ce4897fa [file] [log] [blame]
# Copyright 2015 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 json
import unittest
import webapp2
import webtest
from dashboard import graph_revisions
from dashboard import stored_object
from dashboard import testing_common
from dashboard import utils
from dashboard.models import graph_data
class GraphRevisionsTest(testing_common.TestCase):
def setUp(self):
super(GraphRevisionsTest, self).setUp()
app = webapp2.WSGIApplication(
[('/graph_revisions', graph_revisions.GraphRevisionsHandler)])
self.testapp = webtest.TestApp(app)
self.PatchDatastoreHooksRequest()
def _AddMockData(self):
"""Adds mock data to the datastore, not updating stored_object."""
master_key = graph_data.Master(id='ChromiumPerf').put()
for bot_name in ['win7', 'mac']:
bot_key = graph_data.Bot(id=bot_name, parent=master_key).put()
test_key = graph_data.Test(id='dromaeo', parent=bot_key).put()
subtest_key = graph_data.Test(
id='dom', parent=test_key, has_rows=True).put()
test_container_key = utils.GetTestContainerKey(subtest_key)
for rev in range(15000, 16000, 5):
row = graph_data.Row(parent=test_container_key,
id=rev, value=float(rev * 2.5))
row.timestamp = datetime.datetime(2013, 8, 1)
row.put()
def testPost_ReturnsAndCachesCorrectRevisions(self):
self._AddMockData()
response = self.testapp.post(
'/graph_revisions', {'test_path': 'ChromiumPerf/win7/dromaeo/dom'})
cached_rows = stored_object.Get(
'externally_visible__num_revisions_ChromiumPerf/win7/dromaeo/dom')
for index, row in enumerate(json.loads(response.body)):
expected_rev = 15000 + (index * 5)
expected_value = int(expected_rev) * 2.5
expected_timestamp = utils.TimestampMilliseconds(
datetime.datetime(2013, 8, 1))
self.assertEqual([expected_rev, expected_value, expected_timestamp], row)
self.assertEqual([expected_rev, expected_value, expected_timestamp],
cached_rows[index])
def testPost_CacheSet_ReturnsCachedRevisions(self):
stored_object.Set(
'externally_visible__num_revisions_ChromiumPerf/win7/dromaeo/dom',
[[1, 2, 3]])
response = self.testapp.post(
'/graph_revisions', {'test_path': 'ChromiumPerf/win7/dromaeo/dom'})
self.assertEqual([[1, 2, 3]], json.loads(response.body))
def testAddRowsToCache(self):
self._AddMockData()
rows = []
stored_object.Set(
'externally_visible__num_revisions_ChromiumPerf/win7/dromaeo/dom',
[[10, 2, 3], [15, 4, 5], [100, 6, 7]])
test_key = utils.TestKey('ChromiumPerf/win7/dromaeo/dom')
test_container_key = utils.GetTestContainerKey(test_key)
ts1 = datetime.datetime(2013, 1, 1)
row1 = graph_data.Row(parent=test_container_key,
id=1, value=9, timestamp=ts1)
rows.append(row1)
ts2 = datetime.datetime(2013, 1, 2)
row2 = graph_data.Row(parent=test_container_key,
id=12, value=90, timestamp=ts2)
rows.append(row2)
ts3 = datetime.datetime(2013, 1, 3)
row3 = graph_data.Row(parent=test_container_key,
id=102, value=99, timestamp=ts3)
rows.append(row3)
graph_revisions.AddRowsToCache(rows)
self.assertEqual(
[[1, 9, utils.TimestampMilliseconds(ts1)],
[10, 2, 3],
[12, 90, utils.TimestampMilliseconds(ts2)],
[15, 4, 5], [100, 6, 7],
[102, 99, utils.TimestampMilliseconds(ts3)]],
stored_object.Get('externally_visible__num_revisions_'
'ChromiumPerf/win7/dromaeo/dom'))
if __name__ == '__main__':
unittest.main()