1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# Copyright 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)import os 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)import unittest 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)from telemetry import value 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)from telemetry.page import page_set 903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)from telemetry.value import none_values 10a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)from telemetry.value import scalar 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class TestBase(unittest.TestCase): 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) def setUp(self): 155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.page_set = page_set.PageSet(file_path=os.path.dirname(__file__)) 165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.page_set.AddPageWithDefaultRunNavigate("http://www.bar.com/") 175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.page_set.AddPageWithDefaultRunNavigate("http://www.baz.com/") 185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.page_set.AddPageWithDefaultRunNavigate("http://www.foo.com/") 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) @property 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) def pages(self): 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return self.page_set.pages 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class ValueTest(TestBase): 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) def testBuildbotValueType(self): 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) page0 = self.pages[0] 27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) v = scalar.ScalarValue(page0, 'x', 'unit', 3, important=True) 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals('default', v.GetBuildbotDataType( 29effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch value.COMPUTED_PER_PAGE_SUMMARY_OUTPUT_CONTEXT)) 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals([3], v.GetBuildbotValue()) 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) self.assertEquals(('x', page0.display_name), 3203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) v.GetChartAndTraceNameForPerPageResult()) 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) v = scalar.ScalarValue(page0, 'x', 'unit', 3, important=False) 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals( 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 'unimportant', 37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch v.GetBuildbotDataType(value.COMPUTED_PER_PAGE_SUMMARY_OUTPUT_CONTEXT)) 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) def testScalarSamePageMerging(self): 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) page0 = self.pages[0] 41a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) v0 = scalar.ScalarValue(page0, 'x', 'unit', 1) 42a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) v1 = scalar.ScalarValue(page0, 'x', 'unit', 2) 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertTrue(v1.IsMergableWith(v0)) 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 45a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) vM = scalar.ScalarValue.MergeLikeValuesFromSamePage([v0, v1]) 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals(page0, vM.page) 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals('x', vM.name) 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals('unit', vM.units) 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals(True, vM.important) 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals([1, 2], vM.values) 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) def testScalarDifferentPageMerging(self): 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) page0 = self.pages[0] 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) page1 = self.pages[1] 55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) v0 = scalar.ScalarValue(page0, 'x', 'unit', 1) 56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) v1 = scalar.ScalarValue(page1, 'x', 'unit', 2) 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) vM = scalar.ScalarValue.MergeLikeValuesFromDifferentPages([v0, v1]) 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals(None, vM.page) 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals('x', vM.name) 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals('unit', vM.units) 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals(True, vM.important) 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals([1, 2], vM.values) 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 6503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) def testScalarWithNoneValueMerging(self): 6603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) page0 = self.pages[0] 6703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) v0 = scalar.ScalarValue(page0, 'x', 'unit', 1) 6803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) v1 = scalar.ScalarValue(page0, 'x', 'unit', None, none_value_reason='n') 6903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) self.assertTrue(v1.IsMergableWith(v0)) 7003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 7103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) vM = scalar.ScalarValue.MergeLikeValuesFromSamePage([v0, v1]) 7203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) self.assertEquals(None, vM.values) 7303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) self.assertEquals(none_values.MERGE_FAILURE_REASON, 7403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) vM.none_value_reason) 7503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 7603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) def testScalarWithNoneValueMustHaveNoneReason(self): 7703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) page0 = self.pages[0] 7803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) self.assertRaises(none_values.NoneValueMissingReason, 7903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) lambda: scalar.ScalarValue(page0, 'x', 'unit', None)) 8003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 8103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) def testScalarWithNoneReasonMustHaveNoneValue(self): 8203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) page0 = self.pages[0] 8303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) self.assertRaises(none_values.ValueMustHaveNoneValue, 8403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) lambda: scalar.ScalarValue(page0, 'x', 'unit', 1, 8503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) none_value_reason='n')) 8603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) def testAsDict(self): 88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch v = scalar.ScalarValue(None, 'x', 'unit', 42, important=False) 89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch d = v.AsDictWithoutBaseClassEntries() 90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.assertEquals(d, { 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 'value': 42 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch }) 945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 9503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) def testNoneValueAsDict(self): 9603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) v = scalar.ScalarValue(None, 'x', 'unit', None, important=False, 9703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) none_value_reason='n') 9803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) d = v.AsDictWithoutBaseClassEntries() 9903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 10003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) self.assertEquals(d, { 10103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 'value': None, 10203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 'none_value_reason': 'n' 10303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) }) 10403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) def testFromDictInt(self): 1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) d = { 1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'type': 'scalar', 1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'name': 'x', 1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'units': 'unit', 1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'value': 42 1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) v = value.Value.FromDict(d, {}) 1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertTrue(isinstance(v, scalar.ScalarValue)) 1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals(v.value, 42) 1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) def testFromDictFloat(self): 1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) d = { 1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'type': 'scalar', 1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'name': 'x', 1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'units': 'unit', 1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'value': 42.4 1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) v = value.Value.FromDict(d, {}) 1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertTrue(isinstance(v, scalar.ScalarValue)) 1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals(v.value, 42.4) 13003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 13103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) def testFromDictNoneValue(self): 13203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) d = { 13303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 'type': 'scalar', 13403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 'name': 'x', 13503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 'units': 'unit', 13603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 'value': None, 13703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 'none_value_reason': 'n' 13803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 13903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 14003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) v = value.Value.FromDict(d, {}) 14103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 14203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) self.assertTrue(isinstance(v, scalar.ScalarValue)) 14303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) self.assertEquals(v.value, None) 14403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) self.assertEquals(v.none_value_reason, 'n') 145