15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/usr/bin/env python
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved.
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file.
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import logging
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import os
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import subprocess
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import sys
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import pyauto_functional  # Must be imported before pyauto
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import pyauto
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)sys.path.append('/usr/local')  # To make autotest libs importable.
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from autotest.cros import cros_ui
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from autotest.cros import cryptohome
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChromeosVolume(pyauto.PyUITest):
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Test case for volume levels.
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Test volume and mute changes with different state like, login,
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  lock, logout, etc...
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def setUp(self):
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # We want a clean session_manager instance for every run,
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # so restart ui now.
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cros_ui.stop(allow_fail=True)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cryptohome.remove_all_vaults()
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cros_ui.start(wait_for_login_prompt=False)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    pyauto.PyUITest.setUp(self)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self._initial_volume_info = self.GetVolumeInfo()
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def tearDown(self):
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.SetVolume(self._initial_volume_info['volume'])
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.SetMute(self._initial_volume_info['is_mute'])
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    pyauto.PyUITest.tearDown(self)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def ShouldAutoLogin(self):
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return False
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def _Login(self):
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """Perform login"""
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    credentials = self.GetPrivateInfo()['test_google_account']
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.Login(credentials['username'], credentials['password'])
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    logging.info('Logged in as %s' % credentials['username'])
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    login_info = self.GetLoginInfo()
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.assertTrue(login_info['is_logged_in'], msg='Login failed.')
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testDefaultVolume(self):
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """Test the default volume settings"""
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self._Login()
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    board_name = self.ChromeOSBoard()
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default_volume = self.GetPrivateInfo()['default_volume']
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    assert default_volume.get(board_name), \
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           'No volume settings available for %s.' % board_name
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    expected = {u'volume': default_volume[board_name],
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                u'is_mute': default_volume['is_mute']}
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    volume = self.GetVolumeInfo()
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.assertEqual(volume.get('is_mute'), expected.get('is_mute'))
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.assertAlmostEqual(volume.get('volume'), expected.get('volume'),
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        msg='Volume settings are set to %s, not matching with default '
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            'volume settings %s.' % (volume, expected))
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testLoginLogoutVolume(self):
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """Test that volume settings are preserved after login and logout"""
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    before_login = self.GetVolumeInfo()
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self._Login()
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    after_login = self.GetVolumeInfo()
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.assertEqual(before_login, after_login,
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        msg='Before login : %s and after login : %s, volume states are not '
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            'matching' % (before_login, after_login))
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.Logout()
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    after_logout = self.GetVolumeInfo()
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.assertEqual(after_login, after_logout,
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        msg='Before logout : %s and after logout : %s, volume states are not '
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            'matching' % (after_login, after_logout))
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testLoginLockoutVolume(self):
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """Test that volume changes on the lock screen, are preserved"""
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    lock_volume = {u'volume': 50.000000000000014, u'is_mute': True}
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self._Login()
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    login_vol = self.GetVolumeInfo()
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.LockScreen()
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.SetVolume(lock_volume['volume'])
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.SetMute(lock_volume['is_mute'])
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.UnlockScreen(self.GetPrivateInfo()['test_google_account']['password'])
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    after_login = self.GetVolumeInfo()
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.assertEqual(lock_volume, after_login,
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        msg='Locking screen volume changes are not preserved')
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if __name__ == '__main__':
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pyauto_functional.Main()
96