1# Lint as: python2, python3 2# Copyright 2018 The Chromium OS Authors. All rights reserved. 3# Use of this source code is governed by a BSD-style license that can be 4# found in the LICENSE file. 5 6import logging 7import time 8 9from autotest_lib.server import test 10from autotest_lib.client.bin import utils 11from autotest_lib.client.common_lib import error 12from autotest_lib.client.cros.chameleon import chameleon_port_finder 13from autotest_lib.client.cros.chameleon import chameleon_screen_test 14from autotest_lib.server.cros.multimedia import remote_facade_factory 15 16 17class display_CheckModesAfterSignOutSignIn(test.test): 18 """ To Check the modes after sign out/sign in""" 19 version = 1 20 KEY_DELAY = 0.3 21 LOGOUT_DELAY = 20 22 23 def logout(self): 24 """Log out the User""" 25 logging.info("Signing out") 26 27 # Pressing the keys twice to logout 28 self.input_facade.blocking_playback_of_default_file("keyboard", 29 'keyboard_ctrl+shift+q') 30 time.sleep(self.KEY_DELAY) 31 self.input_facade.blocking_playback_of_default_file("keyboard", 32 'keyboard_ctrl+shift+q') 33 34 def is_logged_out(self): 35 """Will check whether user logged out""" 36 logging.debug("checking /home/chronos/user/Downloads/ to know " 37 "whether user logged out or not!") 38 return self.host.path_exists('/home/chronos/user/Downloads/') is False 39 40 def check_mode(self, test_mirrored_mode=True): 41 """Checks the display mode is as expected 42 43 @param test_mirrored: True if mirror mode 44 @raise error.TestFail if the display mode is not preserved. 45 """ 46 logging.info("Is Mirrored mode enabled?: %s", 47 self.display_facade.is_mirrored_enabled()) 48 if self.display_facade.is_mirrored_enabled() != test_mirrored_mode: 49 raise error.TestFail('Display mode %s is not preserved!' % 50 ('mirrored' if test_mirrored_mode 51 else 'extended')) 52 53 def check_external_display(self, test_mirrored): 54 """Display status check 55 56 @param test_mirrored: True if mirror mode 57 """ 58 59 # Check connector 60 if self.screen_test.check_external_display_connected( 61 self.connector_used, self.errors) is None: 62 63 # Check mode is same as beginning of the test 64 self.check_mode(test_mirrored) 65 66 # Check test image 67 resolution = self.chameleon_port.get_resolution() 68 self.screen_test.test_screen_with_image( 69 resolution, test_mirrored, self.errors) 70 71 def run_test_on_port(self, chameleon_port, test_mirrored): 72 """Run the test on the given Chameleon port. 73 74 @param chameleon_port: a ChameleonPorts object. 75 @param test_mirrored: True if mirror mode 76 @raise error.TestFail if any display errors 77 """ 78 self.chameleon_port = chameleon_port 79 self.screen_test = chameleon_screen_test.ChameleonScreenTest( 80 self.host, chameleon_port, self.display_facade, self.outputdir) 81 82 # Get connector type used (HDMI,DP,...) 83 self.connector_used = self.display_facade.get_external_connector_name() 84 85 # Set main display mode for the test 86 logging.info("Setting Mirrored display mode") 87 self.display_facade.set_mirrored(test_mirrored) 88 self.logout() 89 utils.poll_for_condition( 90 self.is_logged_out, 91 exception=error.TestFail('User is not logged out'), 92 timeout=self.LOGOUT_DELAY, 93 sleep_interval=1) 94 logging.info("Restarting the chrome again!") 95 self.browser_facade.start_default_chrome(restart=True) 96 logging.info("Checking the external display mode and image!") 97 self.check_external_display(test_mirrored) 98 if self.errors: 99 raise error.TestFail('; '.join(set(self.errors))) 100 101 def run_once(self, host, test_mirrored=True): 102 """Checks the mode is preserved after logout 103 104 @param host: DUT object 105 @param test_mirrored: True if mirror mode 106 """ 107 self.host = host 108 self.errors = list() 109 chameleon_board = host.chameleon 110 factory = remote_facade_factory.RemoteFacadeFactory( 111 self.host, results_dir=self.resultsdir) 112 self.display_facade = factory.create_display_facade() 113 self.browser_facade = factory.create_browser_facade() 114 self.input_facade = factory.create_input_facade() 115 self.input_facade.initialize_input_playback("keyboard") 116 chameleon_board.setup_and_reset(self.outputdir) 117 finder = chameleon_port_finder.ChameleonVideoInputFinder( 118 chameleon_board, self.display_facade) 119 120 # Iterates all connected video ports and ensures every of them plugged 121 for chameleon_port in finder.iterate_all_ports(): 122 self.run_test_on_port(chameleon_port, test_mirrored) 123