Home | History | Annotate | Download | only in platform_InputScreenshot
      1 # Copyright 2017 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 import time
      6 import os.path
      7 
      8 from autotest_lib.client.bin import test
      9 from autotest_lib.client.bin import utils
     10 from autotest_lib.client.common_lib import error
     11 from autotest_lib.client.common_lib.cros import chrome
     12 from autotest_lib.client.cros.input_playback import input_playback
     13 
     14 
     15 class platform_InputScreenshot(test.test):
     16     """Tests if key combinations will create a screenshot."""
     17     version = 1
     18     _WAIT = 5
     19     _TMP = '/tmp'
     20     _DOWNLOADS = '/home/chronos/user/Downloads'
     21     _SCREENSHOT = 'Screenshot*'
     22     _ERROR = list()
     23     _MIN_SIZE = 1000
     24 
     25     def warmup(self):
     26         """Test setup."""
     27         # Emulate keyboard.
     28         # See input_playback. The keyboard is used to play back shortcuts.
     29         # Remove all screenshots.
     30         self.player = input_playback.InputPlayback()
     31         self.player.emulate(input_type='keyboard')
     32         self.player.find_connected_inputs()
     33         self.remove_screenshot()
     34 
     35 
     36     def remove_screenshot(self):
     37         """Remove all screenshots."""
     38         utils.system_output('rm -f %s/%s %s/%s' %(self._TMP, self._SCREENSHOT,
     39                             self._DOWNLOADS, self._SCREENSHOT))
     40 
     41 
     42     def confirm_file_exist(self, filepath):
     43         """Check if screenshot file can be found and with minimum size.
     44 
     45         @param filepath file path.
     46 
     47         @raises: error.TestFail if screenshot file does not exist.
     48 
     49         """
     50         if not os.path.isdir(filepath):
     51             raise error.TestNAError("%s folder is not found" % filepath)
     52 
     53         if not (utils.system_output('sync; sleep 2; find %s -name "%s"'
     54                                     % (filepath, self._SCREENSHOT))):
     55             self._ERROR.append('Screenshot was not found under:%s' % filepath)
     56 
     57         filesize = utils.system_output('ls -l %s/%s | cut -d" " -f5'
     58                                        % (filepath, self._SCREENSHOT))
     59         if filesize < self._MIN_SIZE:
     60             self._ERROR.append('Screenshot size:%s at %s is wrong'
     61                                % (filesize, filepath))
     62 
     63 
     64     def create_screenshot(self):
     65         """Create a screenshot."""
     66         self.player.blocking_playback_of_default_file(
     67                input_type='keyboard', filename='keyboard_ctrl+f5')
     68         time.sleep(self._WAIT)
     69 
     70 
     71     def run_once(self):
     72         # Screenshot under /tmp without login.
     73         self.create_screenshot()
     74         self.confirm_file_exist(self._TMP)
     75 
     76         # Screenshot under /Downloads after login.
     77         with chrome.Chrome() as cr:
     78             self.create_screenshot()
     79             self.confirm_file_exist(self._DOWNLOADS)
     80 
     81         if self._ERROR:
     82             raise error.TestFail('; '.join(self._ERROR))
     83 
     84     def cleanup(self):
     85         """Test cleanup."""
     86         self.player.close()
     87         self.remove_screenshot()
     88