blob: 18e415d44516985e508b0971fb5219214fa80b9c [file] [log] [blame]
# Copyright (c) 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 stressing DUT by switching Chameleon EDID."""
import glob
import logging
import os
from autotest_lib.client.common_lib import error
from autotest_lib.server.cros.chameleon import chameleon_test
from autotest_lib.server.cros.chameleon import edid
class display_EdidStress(chameleon_test.ChameleonTest):
"""Server side external display test.
This test switches Chameleon EDID from among a large pool of EDIDs, tests
DUT recognizes the emulated monitor and emits the correct video signal to
Chameleon.
"""
version = 1
def initialize(self, host):
super(display_EdidStress, self).initialize(host)
self.backup_edid()
def cleanup(self):
super(display_EdidStress, self).cleanup()
self.restore_edid()
def run_once(self, host):
errors = []
edid_path = os.path.join(self.bindir, 'test_data', 'edids', '*')
logging.info('See the display on Chameleon: port %d (%s)',
self.chameleon_port.get_connector_id(),
self.chameleon_port.get_connector_type())
for filepath in glob.glob(edid_path):
filename = os.path.basename(filepath)
logging.info('Apply EDID: %s...', filename)
self.chameleon_port.apply_edid(edid.Edid.from_file(filepath))
try:
logging.info('Reconnect output...')
self.display_client.reconnect_output_and_wait()
chameleon_resolution = self.chameleon_port.get_resolution()
logging.info('See the resolution on Chameleon: %dx%d',
*chameleon_resolution)
framebuffer_resolution = self.display_client.get_resolution()
logging.info('See the resolution on framebuffer: %dx%d',
*framebuffer_resolution)
if chameleon_resolution == framebuffer_resolution:
logging.info('Resolutions match.')
else:
error_message = ('Resolutions not match on EDID %s: '
'(chameleon) %dx%d != %dx%d (dut)' %
((filename, ) + chameleon_resolution +
framebuffer_resolution))
logging.error(error_message)
errors.append(error_message)
finally:
self.display_client.close_tab()
if errors:
raise error.TestFail('; '.join(errors))