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.page import page_set 8a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)from telemetry.value import list_of_scalar_values 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)from telemetry.value import merge_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 MergeValueTest(TestBase): 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) def testSamePageMergeBasic(self): 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) page0 = self.pages[0] 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) page1 = self.pages[1] 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) all_values = [scalar.ScalarValue(page0, 'x', 'units', 1), 30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) scalar.ScalarValue(page1, 'x', 'units', 4), 31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) scalar.ScalarValue(page0, 'x', 'units', 2), 32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) scalar.ScalarValue(page1, 'x', 'units', 5)] 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) merged_values = merge_values.MergeLikeValuesFromSamePage(all_values) 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) # Sort the results so that their order is predictable for the subsequent 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) # assertions. 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) merged_values.sort(key=lambda x: x.page.url) 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals(2, len(merged_values)) 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals((page0, 'x'), 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) (merged_values[0].page, merged_values[0].name)) 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals([1, 2], merged_values[0].values) 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals((page1, 'x'), 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) (merged_values[1].page, merged_values[1].name)) 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals([4, 5], merged_values[1].values) 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) def testSamePageMergeOneValue(self): 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) page0 = self.pages[0] 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) all_values = [scalar.ScalarValue(page0, 'x', 'units', 1)] 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) # Sort the results so that their order is predictable for the subsequent 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) # assertions. 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) merged_values = merge_values.MergeLikeValuesFromSamePage(all_values) 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals(1, len(merged_values)) 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals(all_values[0].name, merged_values[0].name) 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals(all_values[0].units, merged_values[0].units) 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) def testDifferentPageMergeBasic(self): 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) page0 = self.pages[0] 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) page1 = self.pages[1] 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) all_values = [scalar.ScalarValue(page0, 'x', 'units', 1), 66a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) scalar.ScalarValue(page1, 'x', 'units', 2), 67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) scalar.ScalarValue(page0, 'y', 'units', 10), 68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) scalar.ScalarValue(page1, 'y', 'units', 20)] 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) # Sort the results so that their order is predictable for the subsequent 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) # assertions. 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) merged_values = merge_values.MergeLikeValuesFromDifferentPages(all_values) 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) merged_values.sort(key=lambda x: x.name) 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals(2, len(merged_values)) 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals((None, 'x'), 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) (merged_values[0].page, merged_values[0].name)) 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals([1, 2], merged_values[0].values) 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals((None, 'y'), 81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) (merged_values[1].page, merged_values[1].name)) 82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals([10, 20], merged_values[1].values) 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) def testDifferentPageMergeSingleValueStillMerges(self): 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) page0 = self.pages[0] 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 87a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) all_values = [scalar.ScalarValue(page0, 'x', 'units', 1)] 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) # Sort the results so that their order is predictable for the subsequent 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) # assertions. 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) merged_values = merge_values.MergeLikeValuesFromDifferentPages(all_values) 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals(1, len(merged_values)) 93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals((None, 'x'), 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) (merged_values[0].page, merged_values[0].name)) 96a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self.assertTrue( 97a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) isinstance(merged_values[0], list_of_scalar_values.ListOfScalarValues)) 98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals([1], merged_values[0].values) 99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) def testDifferentPageMergeBasicIgnoreTraceName(self): 101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) page0 = self.pages[0] 102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) page1 = self.pages[1] 103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 104a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) all_values = [scalar.ScalarValue(page0, 'x.score', 'units', 1), 105a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) scalar.ScalarValue(page1, 'y.score', 'units', 2)] 106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) # Sort the results so that their order is predictable for the subsequent 107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) # assertions. 108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) merged_values = merge_values.MergeLikeValuesFromDifferentPages( 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) all_values, 110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) group_by_name_suffix=True) 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals(1, len(merged_values)) 112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals((None, 'score'), 114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) (merged_values[0].page, merged_values[0].name)) 115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEquals([1, 2], merged_values[0].values) 116