Home | History | Annotate | Download | only in sonic_AppTest
      1 # Copyright (c) 2013 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 
      5 import logging
      6 import os
      7 import shutil
      8 
      9 
     10 from autotest_lib.client.common_lib import error
     11 from autotest_lib.server import autotest
     12 from autotest_lib.server import test
     13 from autotest_lib.server.cros import sonic_extension_downloader
     14 
     15 
     16 class sonic_AppTest(test.test):
     17     """Tests that a sonic device can start its apps."""
     18     version = 1
     19 
     20 
     21     def initialize(self, sonic_host, extension_dir=None):
     22         """Download the latest extension, or use a local path if specified."""
     23         # TODO: crbug.com/337708
     24         if not extension_dir:
     25             logging.info('Downloading ToT extension for test since no local '
     26                          'extension specified.')
     27             extension_path = os.path.join(self.job.clientdir, 'deps',
     28                                           'sonic_extension')
     29             sonic_extension_downloader.setup_extension(extension_path)
     30             self.extension_path = extension_path
     31         else:
     32             logging.info('Using local extension for test %s.',
     33                          self.extension_dir)
     34             self.extension_path = None
     35 
     36 
     37     def run_once(self, cros_host, sonic_host, app='ChromeCast', payload=None,
     38                  extension_dir=None):
     39         """Sonic test to start an app.
     40 
     41         By default this test will test tab cast by installing an extension
     42         on the cros host and using chromedriver to cast a tab. If another app
     43         is specified, like YouTube or Netflix, the app is tested directly
     44         through the server running on port 8080 on the sonic device.
     45 
     46         @param app: The name of the application to start.
     47             eg: YouTube
     48         @param payload: The payload to send to the app.
     49             eg: http://www.youtube.com
     50         @param extension_dir: The directory to load a custom extension from.
     51 
     52         @raises CmdExecutionError: If a command failed to execute on the host.
     53         @raises TestError: If the app didn't start, or the app was unrecognized,
     54             or the payload is invalid.
     55         """
     56         logging.info('Testing app %s, sonic_host %s and chromeos device %s ',
     57                      app, sonic_host.hostname, cros_host.hostname)
     58         if app == 'ChromeCast':
     59             sonic_host.enable_test_extension()
     60             client_at = autotest.Autotest(cros_host)
     61             client_at.run_test('desktopui_SonicExtension',
     62                                chromecast_ip=sonic_host.hostname,
     63                                extension_dir=extension_dir)
     64         elif payload and (app == 'Netflix' or app == 'YouTube'):
     65             sonic_host.run('logcat -c')
     66             sonic_host.client.start_app(app, payload)
     67             log = sonic_host.run('logcat -d').stdout
     68             app_started_confirmation = 'App started:'
     69             for line in log.split('\n'):
     70                 if app_started_confirmation in line:
     71                     logging.info('Successfully started app: %s', line)
     72                     break
     73             else:
     74                 logging.error(log)
     75                 raise error.TestError('App %s failed to start' % app)
     76         else:
     77             raise error.TestError('Cannot start app %s with payload %s' %
     78                                   (app, payload))
     79 
     80 
     81     def cleanup(self, cros_host, sonic_host, app='ChromeCast'):
     82         sonic_host.client.stop_app(app)
     83         if self.extension_path:
     84             shutil.rmtree(self.extension_path, ignore_errors=True)
     85