| # Copyright 2014 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. |
| |
| """This is a server side test to check no EDID on external display.""" |
| |
| import logging |
| |
| from autotest_lib.client.bin import utils |
| from autotest_lib.client.common_lib import error |
| from autotest_lib.client.cros.chameleon import chameleon_port_finder |
| from autotest_lib.client.cros.chameleon import chameleon_screen_test |
| from autotest_lib.client.cros.chameleon import edid |
| from autotest_lib.server import test |
| from autotest_lib.server.cros.multimedia import remote_facade_factory |
| |
| |
| class display_NoEdid(test.test): |
| """Server side test to check no EDID on external display. |
| |
| This test talks to a Chameleon board and a DUT to set up, run, and verify |
| the case that no EDID on the external display. |
| """ |
| version = 1 |
| |
| STANDARD_MODE_RESOLUTIONS = [(1024, 768), (1024, 720), (800, 600)] |
| |
| def run_once(self, host, test_mirrored=False): |
| factory = remote_facade_factory.RemoteFacadeFactory(host) |
| display_facade = factory.create_display_facade() |
| chameleon_board = host.chameleon |
| |
| chameleon_board.setup_and_reset(self.outputdir) |
| finder = chameleon_port_finder.ChameleonVideoInputFinder( |
| chameleon_board, display_facade) |
| |
| errors = [] |
| for chameleon_port in finder.iterate_all_ports(): |
| screen_test = chameleon_screen_test.ChameleonScreenTest( |
| host, chameleon_port, display_facade, self.outputdir) |
| |
| with chameleon_port.use_edid(edid.NO_EDID): |
| connector_name = utils.wait_for_value_changed( |
| display_facade.get_external_connector_name, |
| old_value=False) |
| if not connector_name: |
| error_message = 'Failed to detect display without an EDID' |
| logging.error(error_message) |
| errors.append(error_message) |
| continue |
| |
| logging.info('Set mirrored: %s', test_mirrored) |
| display_facade.set_mirrored(test_mirrored) |
| |
| resolution = display_facade.get_external_resolution() |
| if resolution not in self.STANDARD_MODE_RESOLUTIONS: |
| error_message = ('Switched to a non-standard mode: %r' % |
| resolution) |
| logging.error(error_message) |
| errors.append(error_message) |
| continue |
| |
| screen_test.test_screen_with_image( |
| resolution, test_mirrored, errors) |
| |
| if errors: |
| raise error.TestFail('; '.join(set(errors))) |