146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)# Copyright 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)import logging 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdochfrom telemetry import benchmark 83551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)from telemetry.core import gpu_device 93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)from telemetry.core import gpu_info 103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)from telemetry.core import system_info 1103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)from telemetry.core.platform import tracing_category_filter 1203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)from telemetry.core.platform import tracing_options 136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)from telemetry.unittest import browser_test_case 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class BrowserTest(browser_test_case.BrowserTestCase): 1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) def testBrowserCreation(self): 186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) self.assertEquals(1, len(self._browser.tabs)) 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) # Different browsers boot up to different things. 216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) assert self._browser.tabs[0].url 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def testVersionDetection(self): 246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) # pylint: disable=W0212 256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) v = self._browser._browser_backend.chrome_branch_number 2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) self.assertTrue(v > 0) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @benchmark.Enabled('has tabs') 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def testNewCloseTab(self): 306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) existing_tab = self._browser.tabs[0] 316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) self.assertEquals(1, len(self._browser.tabs)) 3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) existing_tab_url = existing_tab.url 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new_tab = self._browser.tabs.New() 356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) self.assertEquals(2, len(self._browser.tabs)) 3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) self.assertEquals(existing_tab.url, existing_tab_url) 3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) self.assertEquals(new_tab.url, 'about:blank') 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) new_tab.Close() 406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) self.assertEquals(1, len(self._browser.tabs)) 4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) self.assertEquals(existing_tab.url, existing_tab_url) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def testMultipleTabCalls(self): 446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) self._browser.tabs[0].Navigate(self.UrlOfUnittestFile('blank.html')) 456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) self._browser.tabs[0].WaitForDocumentReadyStateToBeInteractiveOrBetter() 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def testTabCallByReference(self): 486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) tab = self._browser.tabs[0] 496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) tab.Navigate(self.UrlOfUnittestFile('blank.html')) 506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) self._browser.tabs[0].WaitForDocumentReadyStateToBeInteractiveOrBetter() 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @benchmark.Enabled('has tabs') 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @benchmark.Disabled('win') # crbug.com/321527 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def testCloseReferencedTab(self): 556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) self._browser.tabs.New() 566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) tab = self._browser.tabs[0] 576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) tab.Navigate(self.UrlOfUnittestFile('blank.html')) 5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) tab.Close() 596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) self.assertEquals(1, len(self._browser.tabs)) 6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @benchmark.Enabled('has tabs') 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) def testForegroundTab(self): 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) # Should be only one tab at this stage, so that must be the foreground tab 646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) original_tab = self._browser.tabs[0] 656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) self.assertEqual(self._browser.foreground_tab, original_tab) 666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new_tab = self._browser.tabs.New() 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) # New tab shouls be foreground tab 686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) self.assertEqual(self._browser.foreground_tab, new_tab) 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) # Make sure that activating the background tab makes it the foreground tab 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) original_tab.Activate() 716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) self.assertEqual(self._browser.foreground_tab, original_tab) 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) # Closing the current foreground tab should switch the foreground tab to the 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) # other tab 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) original_tab.Close() 756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) self.assertEqual(self._browser.foreground_tab, new_tab) 763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) def testGetSystemInfo(self): 786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if not self._browser.supports_system_info: 793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) logging.warning( 803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'Browser does not support getting system info, skipping test.') 813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return 823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) info = self._browser.GetSystemInfo() 843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertTrue(isinstance(info, system_info.SystemInfo)) 863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertTrue(hasattr(info, 'model_name')) 873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertTrue(hasattr(info, 'gpu')) 883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertTrue(isinstance(info.gpu, gpu_info.GPUInfo)) 893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertTrue(hasattr(info.gpu, 'devices')) 903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertTrue(len(info.gpu.devices) > 0) 913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) for g in info.gpu.devices: 923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertTrue(isinstance(g, gpu_device.GPUDevice)) 933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) def testGetSystemInfoNotCachedObject(self): 956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if not self._browser.supports_system_info: 965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) logging.warning( 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'Browser does not support getting system info, skipping test.') 985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) info_a = self._browser.GetSystemInfo() 1016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) info_b = self._browser.GetSystemInfo() 1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertFalse(info_a is info_b) 1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) def testGetSystemTotalMemory(self): 1056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) self.assertTrue(self._browser.memory_stats['SystemTotalPhysicalMemory'] > 0) 106a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci @benchmark.Disabled('chromeos') # crbug.com/412713. 108a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) def testIsTracingRunning(self): 10903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) tracing_controller = self._browser.platform.tracing_controller 11003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if not tracing_controller.IsChromeTracingSupported(self._browser): 111a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return 11203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) self.assertFalse(tracing_controller.is_tracing_running) 11303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) options = tracing_options.TracingOptions() 11403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) options.enable_chrome_trace = True 11503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) category_filter = tracing_category_filter.TracingCategoryFilter() 11603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) tracing_controller.Start(options, category_filter) 11703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) self.assertTrue(tracing_controller.is_tracing_running) 11803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) tracing_controller.Stop() 11903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) self.assertFalse(tracing_controller.is_tracing_running) 1206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class CommandLineBrowserTest(browser_test_case.BrowserTestCase): 1236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) @classmethod 1246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) def CustomizeBrowserOptions(cls, options): 1256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) options.AppendExtraBrowserArgs('--user-agent=telemetry') 1266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) def testCommandLineOverriding(self): 1286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) # This test starts the browser with --user-agent=telemetry. This tests 1296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) # whether the user agent is then set. 1306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) t = self._browser.tabs[0] 1316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) t.Navigate(self.UrlOfUnittestFile('blank.html')) 1326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) t.WaitForDocumentReadyStateToBeInteractiveOrBetter() 1336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) self.assertEquals(t.EvaluateJavaScript('navigator.userAgent'), 1346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 'telemetry') 1356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class DirtyProfileBrowserTest(browser_test_case.BrowserTestCase): 1376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) @classmethod 1386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) def CustomizeBrowserOptions(cls, options): 1396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) options.profile_type = 'small_profile' 1406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) @benchmark.Disabled('chromeos') # crbug.com/243912 1426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) def testDirtyProfileCreation(self): 1436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) self.assertEquals(1, len(self._browser.tabs)) 144