68 lines
2.7 KiB
Python
68 lines
2.7 KiB
Python
# 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)))
|