def testGetGraphJson_WithSelectedTrace(self): self._AddTestColumns(start_rev=15000, end_rev=15050) rows = graph_data.Row.query( graph_data.Row.parent_test == utils.OldStyleTestKey( 'ChromiumGPU/win7/dromaeo/jslib')).fetch() for row in rows: row.error = 1 + ((row.revision - 15000) * 0.25) ndb.put_multi(rows) flot_json_str = graph_json.GetGraphJson( { 'ChromiumGPU/win7/dromaeo/jslib': ['jslib'], }, rev=15000, num_points=8, is_selected=True) flot = json.loads(flot_json_str) self.assertEqual(1, len(flot['data'])) self.assertEqual(5, len(flot['data']['0']['data'])) self.assertEqual(1, len(flot['annotations']['series'])) self.assertEqual(5, len(flot['annotations'].get('0').keys())) self.assertEqual(5, len(flot['error_bars']['0'][0]['data'])) self.assertEqual(5, len(flot['error_bars']['0'][1]['data']))
def testGetGraphJsonError(self): self._AddTestColumns(start_rev=15000, end_rev=15015) rows = graph_data.Row.query(graph_data.Row.parent_test == ndb.Key( 'Master', 'ChromiumGPU', 'Bot', 'win7', 'Test', 'dromaeo', 'Test', 'dom')).fetch() for row in rows: row.error = 1 + ((row.revision - 15000) * 0.25) ndb.put_multi(rows) flot_json_str = graph_json.GetGraphJson({ 'ChromiumGPU/win7/dromaeo/dom': [], }) flot = json.loads(flot_json_str) self.assertEqual(1, len(flot['error_bars'].keys())) rev = 0 for col_dom, col_top, col_bottom in zip( flot['data']['0']['data'], flot['error_bars']['0'][1]['data'], flot['error_bars']['0'][0]['data']): error = 1 + (rev * 0.25) self.assertEqual(rev + 15000, col_top[0]) self.assertEqual(col_dom[1] + error, col_top[1]) self.assertEqual(rev + 15000, col_bottom[0]) self.assertEqual(col_dom[1] - error, col_bottom[1]) rev += 3
def testGetGraphJson_WithAnomalies_ReturnsCorrectAnomalyAnnotations(self): self._AddTestColumns() anomaly1 = anomaly.Anomaly( start_revision=14999, end_revision=15000, test=utils.TestKey('ChromiumGPU/win7/dromaeo/dom'), median_before_anomaly=100, median_after_anomaly=200) anomaly1.SetIsImprovement() key1 = anomaly1.put() anomaly2 = anomaly.Anomaly( start_revision=15004, end_revision=15006, test=utils.TestKey('ChromiumGPU/win7/dromaeo/dom'), median_before_anomaly=200, median_after_anomaly=100, bug_id=12345) anomaly2.SetIsImprovement() key2 = anomaly2.put() old_style_test_key = ndb.Key('Master', 'ChromiumGPU', 'Bot', 'win7', 'Test', 'dromaeo', 'Test', 'dom') anomaly3 = anomaly.Anomaly(start_revision=15008, end_revision=15009, test=old_style_test_key, median_before_anomaly=100, median_after_anomaly=200) key3 = anomaly3.put() test = utils.TestKey('ChromiumGPU/win7/dromaeo/dom').get() test.description = 'About this test' test.units = 'ms' test.buildername = 'Windows 7 (1)' test.UpdateSheriff() test.put() flot_json_str = graph_json.GetGraphJson( { 'ChromiumGPU/win7/dromaeo/dom': [], }, rev=15000, num_points=8) flot = json.loads(flot_json_str) annotations = flot['annotations'] self.assertEqual(5, len(annotations['0'])) # Verify key fields of the annotation dictionary for the first anomaly. anomaly_one_annotation = annotations['0']['0']['g_anomaly'] self.assertEqual(14999, anomaly_one_annotation['start_revision']) self.assertEqual(15000, anomaly_one_annotation['end_revision']) self.assertEqual('100.0%', anomaly_one_annotation['percent_changed']) self.assertIsNone(anomaly_one_annotation['bug_id']) self.assertEqual(key1.urlsafe(), anomaly_one_annotation['key']) self.assertTrue(anomaly_one_annotation['improvement']) # Verify key fields of the annotation dictionary for the second anomaly. anomaly_two_annotation = annotations['0']['2']['g_anomaly'] self.assertEqual(15004, anomaly_two_annotation['start_revision']) self.assertEqual(15006, anomaly_two_annotation['end_revision']) self.assertEqual('50.0%', anomaly_two_annotation['percent_changed']) self.assertEqual(12345, anomaly_two_annotation['bug_id']) self.assertEqual(key2.urlsafe(), anomaly_two_annotation['key']) self.assertFalse(anomaly_two_annotation['improvement']) # Verify the key for the third anomaly. anomaly_three_annotation = annotations['0']['3']['g_anomaly'] self.assertEqual(key3.urlsafe(), anomaly_three_annotation['key']) # Verify the tracing link annotations self.assertEqual('http://trace/15000', annotations['0']['0']['a_tracing_uri']) self.assertEqual('http://trace/15012', annotations['0']['4']['a_tracing_uri']) # Verify the series annotations. self.assertEqual( { '0': { 'name': 'dom', 'path': 'ChromiumGPU/win7/dromaeo/dom', 'units': 'ms', 'better': 'Higher', 'description': 'About this test', 'can_bisect': True, } }, annotations['series'])
def testGetGraphJson_ClampsRevisions(self): self._AddTestColumns(end_rev=15500) # No revision specified, clamps to the last 9 rows. json_str = graph_json.GetGraphJson( { 'ChromiumGPU/win7/dromaeo/dom': [], 'ChromiumGPU/mac/dromaeo/dom': [], }, num_points=8) flot = json.loads(json_str) data = flot.get('data') win7_index = self._GetSeriesIndex(flot, 'ChromiumGPU/win7/dromaeo/dom') mac_index = self._GetSeriesIndex(flot, 'ChromiumGPU/mac/dromaeo/dom') # Two columns self.assertEqual(2, len(data)) # Clamped from 15487-15499 by 3 steps. First row doesn't contain 15487. self.assertEqual([[15489, 30978.0], [15492, 30984.0], [15495, 30990.0], [15498, 30996.0]], data[win7_index].get('data')) self.assertEqual([[15487, 30972.0], [15490, 30978.0], [15493, 30984.0], [15496, 30990.0], [15499, 30996.0]], data[mac_index].get('data')) # Revision 100 (way before data starts) specified, clamp to the first 8 rows json_str = graph_json.GetGraphJson( { 'ChromiumGPU/win7/dromaeo/dom': [], 'ChromiumGPU/mac/dromaeo/dom': [], }, rev=100, num_points=8) flot = json.loads(json_str) data = flot.get('data') win7_index = self._GetSeriesIndex(flot, 'ChromiumGPU/win7/dromaeo/dom') mac_index = self._GetSeriesIndex(flot, 'ChromiumGPU/mac/dromaeo/dom') # Two columns self.assertEqual(2, len(data)) # 15000-15012. self.assertEqual([[15000, 30000.0], [15003, 30006.0], [15006, 30012.0], [15009, 30018.0]], data[win7_index].get('data')) self.assertEqual([[15001, 30000.0], [15004, 30006.0], [15007, 30012.0], [15010, 30018.0]], data[mac_index].get('data')) # Revision 15530 (valid) specified, clamp 4 rows before/after json_str = graph_json.GetGraphJson( { 'ChromiumGPU/win7/dromaeo/dom': [], 'ChromiumGPU/mac/dromaeo/dom': [], }, rev=15030, num_points=8) flot = json.loads(json_str) data = flot.get('data') win7_index = self._GetSeriesIndex(flot, 'ChromiumGPU/win7/dromaeo/dom') mac_index = self._GetSeriesIndex(flot, 'ChromiumGPU/mac/dromaeo/dom') # Two columns self.assertEqual(2, len(data)) # 15524-15536. self.assertEqual([[15024, 30048.0], [15027, 30054.0], [15030, 30060.0], [15033, 30066.0], [15036, 30072.0]], data[win7_index].get('data')) self.assertEqual([[15025, 30048.0], [15028, 30054.0], [15031, 30060.0], [15034, 30066.0]], data[mac_index].get('data')) # Revision 15498 specified, clamp 4 rows before and after is cut off json_str = graph_json.GetGraphJson( { 'ChromiumGPU/win7/dromaeo/dom': [], 'ChromiumGPU/mac/dromaeo/dom': [], }, rev=15498, num_points=7) flot = json.loads(json_str) data = flot.get('data') win7_index = self._GetSeriesIndex(flot, 'ChromiumGPU/win7/dromaeo/dom') mac_index = self._GetSeriesIndex(flot, 'ChromiumGPU/mac/dromaeo/dom') # Two columns self.assertEqual(2, len(data)) # 15493-15499. self.assertEqual([[15495, 30990.0], [15498, 30996.0]], data[win7_index].get('data')) self.assertEqual( [[15493, 30984.0], [15496, 30990.0], [15499, 30996.0]], data[mac_index].get('data')) # Revision 15001 specified, before is cut off and clamp 4 rows after json_str = graph_json.GetGraphJson( { 'ChromiumGPU/win7/dromaeo/dom': [], 'ChromiumGPU/mac/dromaeo/dom': [], }, rev=15001, num_points=8) flot = json.loads(json_str) data = flot.get('data') win7_index = self._GetSeriesIndex(flot, 'ChromiumGPU/win7/dromaeo/dom') mac_index = self._GetSeriesIndex(flot, 'ChromiumGPU/mac/dromaeo/dom') # Two columns self.assertEqual(2, len(data)) # 15493-15499. self.assertEqual( [[15000, 30000.0], [15003, 30006.0], [15006, 30012.0]], data[win7_index].get('data')) self.assertEqual( [[15001, 30000.0], [15004, 30006.0], [15007, 30012.0]], data[mac_index].get('data'))
def testGetGraphJsonNumPoints(self): self._AddTestColumns(end_rev=15500) flot_json_str = graph_json.GetGraphJson( {'ChromiumGPU/win7/dromaeo/dom': []}, rev=15300, num_points=8) self.CheckFlotJson(flot_json_str, 9, 1, 15288, 15315)
def testGetGraphJsonRevisionMiddle(self): self._AddTestColumns(end_rev=15600) flot_json_str = graph_json.GetGraphJson( {'ChromiumGPU/win7/dromaeo/dom': []}, rev=15300) self.CheckFlotJson(flot_json_str, 151, 1, 15075, 15525)
def testGetGraphJsonRevisionStart(self): self._AddTestColumns(end_rev=15500) flot_json_str = graph_json.GetGraphJson( {'ChromiumGPU/win7/dromaeo/dom': []}, rev=15000) self.CheckFlotJson(flot_json_str, 76, 1, 15000, 15228)
def testGetGraphJsonNoArgs(self): self._AddTestColumns(start_rev=16047) flot_json_str = graph_json.GetGraphJson( {'ChromiumGPU/win7/dromaeo/dom': []}) self.CheckFlotJson(flot_json_str, 150, 1, 16050, 16500)
def testGetGraphJsonStartEndRev(self): self._AddTestColumns(start_rev=15991) flot_json_str = graph_json.GetGraphJson( {'ChromiumGPU/win7/dromaeo/dom': []}, start_rev=16000, end_rev=16030) self.CheckFlotJson(flot_json_str, 11, 1, 16000, 16030)