コード例 #1
0
  def testGetRequiredLibrariesForVTuneProfile(self):
    vtune_db_output = os.path.join(
        util.GetUnittestDataDir(), 'sample_vtune_db_output')
    with open(vtune_db_output, 'rb') as f:
      vtune_db_output = pickle.load(f)

    mock_cursor = simple_mock.MockObject()
    mock_cursor.ExpectCall(
        'execute').WithArgs(simple_mock.DONT_CARE).WillReturn(vtune_db_output)

    mock_conn = simple_mock.MockObject()
    mock_conn.ExpectCall('cursor').WillReturn(mock_cursor)
    mock_conn.ExpectCall('close')

    mock_sqlite3 = simple_mock.MockObject()
    mock_sqlite3.ExpectCall(
        'connect').WithArgs(simple_mock.DONT_CARE).WillReturn(mock_conn)

    real_sqlite3 = android_profiling_helper.sqlite3
    android_profiling_helper.sqlite3 = mock_sqlite3
    try:
      libs = android_profiling_helper.GetRequiredLibrariesForVTuneProfile('foo')
      self.assertEqual(libs, set([
          '/data/app-lib/com.google.android.apps.chrome-1/libchrome.2019.0.so',
          '/system/lib/libdvm.so',
          '/system/lib/libc.so',
          '/system/lib/libm.so']))
    finally:
      android_profiling_helper.sqlite3 = real_sqlite3
コード例 #2
0
  def testGetRequiredLibrariesForPerfProfile(self):
    perf_output = os.path.join(
        util.GetUnittestDataDir(), 'sample_perf_report_output.txt')
    with open(perf_output) as f:
      perf_output = f.read()

    mock_popen = simple_mock.MockObject()
    mock_popen.ExpectCall('communicate').WillReturn([None, perf_output])

    mock_subprocess = simple_mock.MockObject()
    mock_subprocess.ExpectCall(
        'Popen').WithArgs(simple_mock.DONT_CARE).WillReturn(mock_popen)
    mock_subprocess.SetAttribute('PIPE', simple_mock.MockObject())

    real_subprocess = android_profiling_helper.subprocess
    android_profiling_helper.subprocess = mock_subprocess
    try:
      libs = android_profiling_helper.GetRequiredLibrariesForPerfProfile('foo')
      self.assertEqual(libs, set([
          '/data/app-lib/com.google.android.apps.chrome-2/libchrome.2016.0.so',
          '/system/lib/libart.so',
          '/system/lib/libc.so',
          '/system/lib/libm.so']))
    finally:
      android_profiling_helper.subprocess = real_subprocess
コード例 #3
0
    def testSubObjectMismatch(self):
        mock = simple_mock.MockObject()
        mock.bar = simple_mock.MockObject(mock)

        mock.ExpectCall('foo').WithArgs(_, 4)
        mock.bar.ExpectCall('baz')

        self.assertRaises(Exception, lambda: mock.bar.baz())  # pylint: disable=W0108
コード例 #4
0
    def testSubObject(self):
        mock = simple_mock.MockObject()
        mock.bar = simple_mock.MockObject(mock)

        mock.ExpectCall('foo').WithArgs(_, 4)
        mock.bar.ExpectCall('baz')

        mock.foo(0, 4)
        mock.bar.baz()
コード例 #5
0
 def _ExpectProcesses(self, args):
   mock_subprocess = simple_mock.MockObject()
   mock_subprocess.SetAttribute('PIPE', simple_mock.MockObject())
   for arg in args:
     mock_popen = simple_mock.MockObject()
     mock_popen.ExpectCall('communicate').WillReturn(arg[1][1:])
     mock_popen.ExpectCall('poll').WillReturn(arg[1][0])
     mock_subprocess.ExpectCall(
         'Popen').WithArgs(arg[0]).WillReturn(mock_popen)
   trybot_browser_finder.subprocess = mock_subprocess
コード例 #6
0
    def testSysfsReadFailed(self):
        mock_power_monitor = simple_mock.MockObject()
        mock_power_monitor.ExpectCall('CanMonitorPower').WillReturn(False)
        mock_adb = simple_mock.MockObject()
        mock_adb.ExpectCall('GetFileContents', _).WillReturn([])
        mock_device_utils = simple_mock.MockObject()
        setattr(mock_device_utils, 'old_interface', mock_adb)

        monitor = android_temperature_monitor.AndroidTemperatureMonitor(
            mock_power_monitor, mock_device_utils)
        self.assertTrue(monitor.CanMonitorPower())
        monitor.StartMonitoringPower(None)
        measurements = monitor.StopMonitoringPower()
        self.assertTrue('identifier' in measurements)
        self.assertTrue('component_utilization' not in measurements)
コード例 #7
0
    def _LoginUsingMock(self, backend, login_page_url, email_element_id,
                        password_element_id):  # pylint: disable=R0201
        tab = simple_mock.MockObject()

        config = {'username': '******', 'password': '******'}

        tab.ExpectCall('Navigate', login_page_url)
        tab.ExpectCall('EvaluateJavaScript', _).WillReturn(False)
        tab.ExpectCall('EvaluateJavaScript', _).WillReturn(True)
        tab.ExpectCall('EvaluateJavaScript', _).WillReturn(False)
        tab.ExpectCall('WaitForDocumentReadyStateToBeInteractiveOrBetter')

        def VerifyEmail(js):
            assert email_element_id in js
            assert 'blah' in js

        tab.ExpectCall('ExecuteJavaScript', _).WhenCalled(VerifyEmail)

        def VerifyPw(js):
            assert password_element_id in js
            assert 'largh' in js

        tab.ExpectCall('ExecuteJavaScript', _).WhenCalled(VerifyPw)

        def VerifySubmit(js):
            assert '.submit' in js

        tab.ExpectCall('ExecuteJavaScript', _).WhenCalled(VerifySubmit)

        # Checking for form still up.
        tab.ExpectCall('EvaluateJavaScript', _).WillReturn(False)

        backend.LoginNeeded(tab, config)
コード例 #8
0
    def SetUpCycler(self, args, setup_memory_module=False):
        cycler = page_cycler.PageCycler()
        options = browser_options.BrowserFinderOptions()
        options.browser_options.platform = FakePlatform()
        parser = options.CreateParser()
        page_runner.AddCommandLineArgs(parser)
        cycler.AddCommandLineArgs(parser)
        cycler.SetArgumentDefaults(parser)
        parser.parse_args(args)
        page_runner.ProcessCommandLineArgs(parser, options)
        cycler.ProcessCommandLineArgs(parser, options)
        cycler.CustomizeBrowserOptions(options.browser_options)

        if setup_memory_module:
            # Mock out memory metrics; the real ones require a real browser.
            mock_memory_metric = MockMemoryMetric()

            mock_memory_module = simple_mock.MockObject()
            mock_memory_module.ExpectCall('MemoryMetric').WithArgs(
                simple_mock.DONT_CARE).WillReturn(mock_memory_metric)

            real_memory_module = page_cycler.memory
            try:
                page_cycler.memory = mock_memory_module
                browser = FakeBrowser()
                cycler.WillStartBrowser(options.browser_options.platform)
                cycler.DidStartBrowser(browser)
            finally:
                page_cycler.memory = real_memory_module

        return cycler
コード例 #9
0
    def testCacheHandled(self):
        cycler = self.setupCycler(
            ['--pageset-repeat=5', '--cold-load-percent=50'])

        # Mock out memory metrics; the real ones require a real browser.
        mock_memory_metric = MockMemoryMetric()

        mock_memory_module = simple_mock.MockObject()
        mock_memory_module.ExpectCall('MemoryMetric').WithArgs(
            simple_mock.DONT_CARE).WillReturn(mock_memory_metric)

        real_memory_module = page_cycler.memory
        try:
            page_cycler.memory = mock_memory_module
            cycler.DidStartBrowser(None)
        finally:
            page_cycler.memory = real_memory_module

        class FakePage(object):
            def __init__(self, url):
                self.url = url

        class FakeTab(object):
            def __init__(self):
                self.clear_cache_calls = 0

            def ClearCache(self):
                self.clear_cache_calls += 1

            def EvaluateJavaScript(self, _):
                return 1

            def WaitForJavaScriptExpression(self, _, __):
                pass

        url_name = "http://fakepage.com"
        page = FakePage(url_name)
        tab = FakeTab()
        results = page_measurement_results.PageMeasurementResults()

        for i in range(5):
            cycler.WillNavigateToPage(page, tab)
            self.assertEqual(
                max(0, i - 2), tab.clear_cache_calls,
                "Iteration %d tab.clear_cache_calls %d" %
                (i, tab.clear_cache_calls))
            num_results = len(results.page_results)
            results.WillMeasurePage(page)
            cycler.MeasurePage(page, tab, results)
            results.DidMeasurePage()
            self.assertEqual(num_results + 1, len(results.page_results))
            result = results[-1]
            self.assertEqual(result.page, page)
            self.assertEqual(1, len(result.values))
            self.assertEqual(result.values[0].trace_name, 'page_load_time')
            self.assertEqual(result.values[0].units, 'ms')
            self.assertEqual(result.values[0].chart_name,
                             'warm_times' if i < 3 else 'cold_times')
            cycler.DidNavigateToPage(page, tab)
コード例 #10
0
 def test_find_all_browser_types_non_trybot_browser(self):
   finder_options = browser_options.BrowserFinderOptions(
       browser_type='release')
   trybot_browser_finder.urllib2 = simple_mock.MockObject()
   self.assertEquals(
       [],
       # pylint: disable=W0212
       sorted(trybot_browser_finder.FindAllBrowserTypes(finder_options)))
コード例 #11
0
  def testNoAttmptToMonitorIfIncapable(self):
    mock_power_monitor = simple_mock.MockObject()
    mock_power_monitor.ExpectCall('CanMonitorPower').WillReturn(False)

    temperature_monitor = TemperatureMonitorForTesting(mock_power_monitor, 42.0)
    self.assertTrue(temperature_monitor.CanMonitorPower())
    temperature_monitor.StartMonitoringPower(None)
    power_results = temperature_monitor.StopMonitoringPower()
    self.assertTrue(
        temperature_monitor.PowerMeasurementsConsistent(power_results))
コード例 #12
0
  def testOnCall(self):
    mock = simple_mock.MockObject()

    handler_called = []
    def Handler(arg0):
      assert arg0 == 7
      handler_called.append(True)
    mock.ExpectCall('baz', 7).WhenCalled(Handler)

    mock.baz(7)
    self.assertTrue(len(handler_called) > 0)
コード例 #13
0
    def _LoginUsingMock(self, backend, login_page_url, email_element_id,
                        password_element_id, form_element_id,
                        already_logged_in_js):  # pylint: disable=R0201
        tab = simple_mock.MockObject()
        ar = simple_mock.MockObject()

        config = {'username': '******', 'password': '******'}

        tab.ExpectCall('Navigate', login_page_url)
        tab.ExpectCall('EvaluateJavaScript',
                       already_logged_in_js).WillReturn(False)
        tab.ExpectCall('WaitForDocumentReadyStateToBeInteractiveOrBetter')

        ar.ExpectCall(
            'WaitForJavaScriptCondition',
            '(document.querySelector("#%s") !== null) || (%s)' %
            (form_element_id, already_logged_in_js), 60)
        ar.ExpectCall('WaitForNavigate')

        def VerifyEmail(js):
            assert email_element_id in js
            assert 'blah' in js

        tab.ExpectCall('ExecuteJavaScript', _).WhenCalled(VerifyEmail)

        def VerifyPw(js):
            assert password_element_id in js
            assert 'largh' in js

        tab.ExpectCall('ExecuteJavaScript', _).WhenCalled(VerifyPw)

        def VerifySubmit(js):
            assert '.submit' in js or '.click' in js

        tab.ExpectCall('ExecuteJavaScript', _).WhenCalled(VerifySubmit)

        # Checking for form still up.
        tab.ExpectCall('EvaluateJavaScript', _).WillReturn(False)

        backend.LoginNeeded(tab, ar, config)
コード例 #14
0
    def testPerfProfiler(self):
        options = options_for_unittests.GetCopy()
        if not perf_profiler.PerfProfiler.is_supported(options.browser_type):
            logging.warning('PerfProfiler is not supported. Skipping test')
            return

        profile_file = os.path.join(util.GetUnittestDataDir(),
                                    'perf_report_output.txt')
        perf_report_output = open(profile_file, 'r').read()

        mock_popen = simple_mock.MockObject()
        mock_popen.ExpectCall('communicate').WillReturn([perf_report_output])

        mock_subprocess = simple_mock.MockObject()
        mock_subprocess.ExpectCall('Popen').WithArgs(
            simple_mock.DONT_CARE).WillReturn(mock_popen)
        setattr(mock_subprocess, 'PIPE', simple_mock.MockObject())

        real_subprocess = perf_profiler.subprocess
        perf_profiler.subprocess = mock_subprocess
        try:
            self.assertEqual(
                perf_profiler.PerfProfiler.GetTopSamples(
                    'linux', profile_file, 10),
                {
                    'v8::internal::StaticMarkingVisitor::MarkMapContents':
                    63615201,
                    'v8::internal::RelocIterator::next': 38271931,
                    'v8::internal::LAllocator::MeetConstraintsBetween':
                    42913933,
                    'v8::internal::FlexibleBodyVisitor::Visit': 31909537,
                    'v8::internal::LiveRange::CreateAssignedOperand': 42913933,
                    'void v8::internal::RelocInfo::Visit': 96878864,
                    'WebCore::HTMLTokenizer::nextToken': 48240439,
                    'v8::internal::Scanner::ScanIdentifierOrKeyword': 46054550,
                    'sk_memset32_SSE2': 45121317,
                    'v8::internal::HeapObject::Size': 39786862
                })
        finally:
            perf_profiler.subprocess = real_subprocess
コード例 #15
0
 def test_find_all_browser_types_list(self):
   finder_options = browser_options.BrowserFinderOptions(browser_type='list')
   trybot_browser_finder.urllib2 = simple_mock.MockObject()
   trybot_browser_finder.urllib2.ExpectCall('urlopen').WithArgs(
       'http://build.chromium.org/p/tryserver.chromium.perf/json').WillReturn(
           StringIO.StringIO(json.dumps({'builders': {
               'android_nexus4_perf_bisect': 'stuff',
               'mac_10_9_perf_bisect': 'otherstuff',
               'win_perf_bisect_builder': 'not a trybot',
           }})))
   self.assertEquals(
       ['trybot-android-nexus4', 'trybot-mac-10-9'],
       # pylint: disable=W0212
       sorted(trybot_browser_finder.FindAllBrowserTypes(finder_options)))
コード例 #16
0
  def testVTuneProfilerIsSupported(self):
    options = options_for_unittests.GetCopy()

    mock_subprocess = simple_mock.MockObject()
    mock_subprocess.ExpectCall(
        'Popen').WithArgs(simple_mock.DONT_CARE).WillReturn(MockPopen(0))
    mock_subprocess.SetAttribute('PIPE', simple_mock.MockObject())
    mock_subprocess.SetAttribute('STDOUT', simple_mock.MockObject())

    real_subprocess = vtune_profiler.subprocess
    vtune_profiler.subprocess = mock_subprocess

    if options.browser_type.startswith('android'):
      # On Android we're querying if 'su' is available.
      mock_subprocess.ExpectCall('Popen').WithArgs(
          simple_mock.DONT_CARE).WillReturn(MockPopen(0, 'su', None))

    try:
      self.assertTrue(
          vtune_profiler.VTuneProfiler.is_supported(options.browser_type) or
          sys.platform != 'linux2' or
          options.browser_type.startswith('cros'))
    finally:
      vtune_profiler.subprocess = real_subprocess
コード例 #17
0
  def testPowerMonitoringResultsWereUpdated(self):
    mock_power_monitor = simple_mock.MockObject()
    mock_power_monitor.ExpectCall('CanMonitorPower').WillReturn(True)
    fake_measurement = {'identifier' : '123'}
    mock_power_monitor.ExpectCall('StartMonitoringPower', _)
    mock_power_monitor.ExpectCall('StopMonitoringPower').WillReturn(
        fake_measurement)

    temperature_monitor = TemperatureMonitorForTesting(mock_power_monitor, 24.0)
    self.assertTrue(temperature_monitor.CanMonitorPower())
    temperature_monitor.StartMonitoringPower(None)
    measurements = temperature_monitor.StopMonitoringPower()
    self.assertTrue(
        temperature_monitor.PowerMeasurementsConsistent(measurements))
    self.assertEqual('123', measurements['identifier'])
コード例 #18
0
    def setupCycler(self, args, setup_memory_module=False):
        cycler = page_cycler.PageCycler()
        options = browser_options.BrowserFinderOptions()
        parser = options.CreateParser()
        cycler.AddCommandLineOptions(parser)
        parser.parse_args(args)
        cycler.CustomizeBrowserOptions(options)

        if setup_memory_module:
            # Mock out memory metrics; the real ones require a real browser.
            mock_memory_metric = MockMemoryMetric()

            mock_memory_module = simple_mock.MockObject()
            mock_memory_module.ExpectCall('MemoryMetric').WithArgs(
                simple_mock.DONT_CARE).WillReturn(mock_memory_metric)

            real_memory_module = page_cycler.memory
            try:
                page_cycler.memory = mock_memory_module
                cycler.DidStartBrowser(None)
            finally:
                page_cycler.memory = real_memory_module

        return cycler
コード例 #19
0
    def testArgsDontCare(self):
        mock = simple_mock.MockObject()
        mock.ExpectCall('foo').WithArgs(_, 4)

        mock.foo(4, 4)
コード例 #20
0
 def __init__(self):
   self.PIPE = simple_mock.MockObject()
   self.STDOUT = simple_mock.MockObject()
   self._num_collect_calls = 0
   self._num_stop_calls = 0
コード例 #21
0
    def testBasic(self):
        mock = simple_mock.MockObject()
        mock.ExpectCall('foo')

        mock.foo()
コード例 #22
0
    def testReturn(self):
        mock = simple_mock.MockObject()
        mock.ExpectCall('foo').WillReturn(7)

        ret = mock.foo()
        self.assertEquals(ret, 7)
コード例 #23
0
    def testArgs(self):
        mock = simple_mock.MockObject()
        mock.ExpectCall('foo').WithArgs(3, 4)

        mock.foo(3, 4)
コード例 #24
0
    def testArgs2(self):
        mock = simple_mock.MockObject()
        mock.ExpectCall('foo', 3, 4)

        mock.foo(3, 4)
コード例 #25
0
    def testArgsMismatch(self):
        mock = simple_mock.MockObject()
        mock.ExpectCall('foo').WithArgs(3, 4)

        self.assertRaises(Exception, lambda: mock.foo(4, 4))