• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2014 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5"""This is a server side test to check no EDID on external display."""
6
7import logging
8
9from autotest_lib.client.bin import utils
10from autotest_lib.client.common_lib import error
11from autotest_lib.client.cros.chameleon import chameleon_port_finder
12from autotest_lib.client.cros.chameleon import chameleon_screen_test
13from autotest_lib.client.cros.chameleon import edid
14from autotest_lib.server import test
15from autotest_lib.server.cros.multimedia import remote_facade_factory
16
17
18class display_NoEdid(test.test):
19    """Server side test to check no EDID on external display.
20
21    This test talks to a Chameleon board and a DUT to set up, run, and verify
22    the case that no EDID on the external display.
23    """
24    version = 1
25
26    STANDARD_MODE_RESOLUTIONS = [(1024, 768), (1024, 720), (800, 600)]
27
28    def run_once(self, host, test_mirrored=False):
29        factory = remote_facade_factory.RemoteFacadeFactory(host)
30        display_facade = factory.create_display_facade()
31        chameleon_board = host.chameleon
32
33        chameleon_board.setup_and_reset(self.outputdir)
34        finder = chameleon_port_finder.ChameleonVideoInputFinder(
35                chameleon_board, display_facade)
36
37        errors = []
38        for chameleon_port in finder.iterate_all_ports():
39            screen_test = chameleon_screen_test.ChameleonScreenTest(
40                    host, chameleon_port, display_facade, self.outputdir)
41
42            with chameleon_port.use_edid(edid.NO_EDID):
43                connector_name = utils.wait_for_value_changed(
44                            display_facade.get_external_connector_name,
45                            old_value=False)
46                if not connector_name:
47                    error_message = 'Failed to detect display without an EDID'
48                    logging.error(error_message)
49                    errors.append(error_message)
50                    continue
51
52                logging.info('Set mirrored: %s', test_mirrored)
53                display_facade.set_mirrored(test_mirrored)
54
55                resolution = display_facade.get_external_resolution()
56                if resolution not in self.STANDARD_MODE_RESOLUTIONS:
57                    error_message = ('Switched to a non-standard mode: %r' %
58                                     resolution)
59                    logging.error(error_message)
60                    errors.append(error_message)
61                    continue
62
63                screen_test.test_screen_with_image(
64                        resolution, test_mirrored, errors)
65
66        if errors:
67            raise error.TestFail('; '.join(set(errors)))
68