• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2015 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import logging
6import os
7
8from autotest_lib.client.bin import test
9from autotest_lib.client.bin import utils
10from autotest_lib.client.common_lib import error
11from autotest_lib.client.common_lib.cros import chrome
12from autotest_lib.client.cros.video import helper_logger
13
14EXTRA_BROWSER_ARGS = ['--use-fake-ui-for-media-stream',
15                      '--use-fake-device-for-media-stream']
16
17# Polling timeout.
18SHORT_TIMEOUT_IN_SECS = 45
19
20
21class video_WebRtcSanity(test.test):
22    """Local getUserMedia test with fake webcam at VGA and 720p."""
23    version = 1
24
25    def start_getusermedia(self, cr):
26        """Opens the test page.
27
28        @param cr: Autotest Chrome instance.
29        """
30        cr.browser.platform.SetHTTPServerDirectories(self.bindir)
31
32        self.tab = cr.browser.tabs[0]
33        self.tab.Navigate(cr.browser.platform.http_server.UrlOf(
34                os.path.join(self.bindir, 'getusermedia.html')))
35        self.tab.WaitForDocumentReadyStateToBeComplete()
36
37    def wait_test_completed(self, timeout_secs):
38        """Waits until the test is done.
39
40        @param timeout_secs Max time to wait in seconds.
41
42        @returns True if test completed, False otherwise.
43
44        """
45        def _test_done():
46            status = self.tab.EvaluateJavaScript('getStatus()')
47            logging.debug(status);
48            return status != 'running'
49
50        utils.poll_for_condition(
51            _test_done, timeout=timeout_secs, sleep_interval=1,
52            desc = 'getusermedia.html reports itself as finished')
53
54    @helper_logger.video_log_wrapper
55    def run_once(self):
56        """Runs the test."""
57        with chrome.Chrome(extra_browser_args=EXTRA_BROWSER_ARGS +\
58                           [helper_logger.chrome_vmodule_flag()],
59                           init_network_controller=True) as cr:
60            self.start_getusermedia(cr)
61            self.wait_test_completed(SHORT_TIMEOUT_IN_SECS)
62            self.verify_successful()
63
64
65    def verify_successful(self):
66        """Checks the results of the test.
67
68        @raises TestError if an error occurred.
69        """
70        status = self.tab.EvaluateJavaScript('getStatus()')
71        logging.info('Status: %s', status)
72        if status != 'ok-video-playing':
73            raise error.TestFail('Failed: %s' % status)
74