blob: 7291b109bdead9b8fc1b66cfdddcff2cdd675e13 [file] [log] [blame] [edit]
# Copyright 2018 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import logging
from autotest_lib.client.common_lib import error
from autotest_lib.client.common_lib.cros import arc
from autotest_lib.client.common_lib.cros import chrome
from autotest_lib.client.bin import test
from autotest_lib.client.bin import utils
from autotest_lib.client.cros import cros_ui
TIMEOUT=5
SLEEP_INTERVAL=1
# TODO(pmalani): Change this to actually talk to midis and make
# sure basic functionality works.
class cheets_Midis(test.test):
""" Test to verify midis daemon starts correctly.
A simple test which verifies whether:
- midis starts up correctly on ARC container start-up.
- midis restarts correctly on logging-out.
"""
version = 1
def _get_midis_pid(self):
""" Get the midis daemon pid using pgrep. """
cmd = 'pgrep midis'
result = utils.run(cmd, ignore_status=True).stdout
try:
return int(result)
except ValueError:
logging.error('Error parsing pgrep result: %s', result)
return None
def _poll_for_midis_pid(self):
""" Repeatedly calls _get_midis_pid, until we succeed or timeout. """
try:
return utils.poll_for_condition(condition=self._get_midis_pid,
timeout=TIMEOUT,
sleep_interval=SLEEP_INTERVAL)
except utils.TimeoutError:
logging.error('Timed out waiting for midis')
return None
def run_once(self):
""" Restart Chrome with ARC and check that midis also restarts. """
old_midis_pid = None
session = None
with chrome.Chrome(
arc_mode=arc.arc_common.ARC_MODE_ENABLED,
dont_override_profile=False) as cr:
session = cros_ui.get_chrome_session_ident()
old_midis_pid = self._poll_for_midis_pid()
if old_midis_pid == None:
raise error.TestFail('midis not running in Chrome OS.')
cros_ui.wait_for_chrome_ready(session)
new_midis_pid = self._poll_for_midis_pid()
if new_midis_pid == None:
raise error.TestFail('midis not running after Chrome shut down.')
if new_midis_pid == old_midis_pid:
raise error.TestFail('midis didn\'t restart.')
logging.info('Restarted midis with pid %d.', new_midis_pid)