moblab_test.py revision 492242d0e51e400cfe7077c7d245cebb3314f8fa
1492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi# Copyright (c) 2014 The Chromium OS Authors. All rights reserved. 2492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi# Use of this source code is governed by a BSD-style license that can be 3492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi# found in the LICENSE file. 4492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basiimport logging 5492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basiimport os 6492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basiimport re 7492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 8492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basifrom autotest_lib.client.common_lib import error, global_config 9492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basifrom autotest_lib.server import test 10492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basifrom autotest_lib.server.hosts import moblab_host 11492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 12492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 13492242d0e51e400cfe7077c7d245cebb3314f8faSimran BasiDEFAULT_IMAGE_STORAGE_SERVER = global_config.global_config.get_config_value( 14492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 'CROS', 'image_storage_server') 15492242d0e51e400cfe7077c7d245cebb3314f8faSimran BasiMOBLAB_BOTO_FILE_DEST = '/home/moblab/.boto' 16492242d0e51e400cfe7077c7d245cebb3314f8faSimran BasiSTORAGE_SERVER_REGEX = 'gs://.*/' 17492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 18492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 19492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basiclass MoblabTest(test.test): 20492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi """Base class for Moblab tests. 21492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi """ 22492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 23492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi def initialize(self, host, boto_path='', 24492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi image_storage_server=DEFAULT_IMAGE_STORAGE_SERVER): 25492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi """Initialize the Moblab Host. 26492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 27492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi * Installs a boto file. 28492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi * Sets up the image storage server for this test. 29492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi * Finds and adds DUTs on the testing subnet. 30492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 31492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi @param boto_path: Path to the boto file we want to install. 32492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi @param image_storage_server: image storage server to use for grabbing 33492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi images from Google Storage. 34492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi """ 35492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi super(MoblabTest, self).initialize() 36492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi self._host = host 37492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi self.install_boto_file(boto_path) 38492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi self.set_image_storage_server(image_storage_server) 39492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi self._host.wait_afe_up() 40492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi self._host.find_and_add_duts() 41492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 42492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 43492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi def install_boto_file(self, boto_path=''): 44492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi """Install a boto file on the Moblab device. 45492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 46492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi @param boto_path: Path to the boto file to install. If None, sends the 47492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi boto file in the current HOME directory. 48492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 49492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi @raises error.TestError if the boto file does not exist. 50492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi """ 51492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi if not boto_path: 52492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi boto_path = os.path.join(os.getenv('HOME'), '.boto') 53492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi if not os.path.exists(boto_path): 54492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi raise error.TestError('Boto File:%s does not exist.' % boto_path) 55492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi self._host.send_file(boto_path, MOBLAB_BOTO_FILE_DEST) 56492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi self._host.run('chown moblab:moblab %s' % MOBLAB_BOTO_FILE_DEST) 57492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 58492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 59492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi def set_image_storage_server(self, image_storage_server): 60492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi """Set the image storage server. 61492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 62492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi @param image_storage_server: Name of image storage server to use. Must 63492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi follow format or gs://bucket-name/ 64492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi (Note trailing slash is required). 65492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 66492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi @raises error.TestError if the image_storage_server is incorrectly 67492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi formatted. 68492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi """ 69492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi if not re.match(STORAGE_SERVER_REGEX, image_storage_server): 70492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi raise error.TestError( 71492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 'Image Storage Server supplied is not in the correct ' 72492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 'format. Must start with gs:// and end with a trailing ' 73492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 'slash: %s' % image_storage_server) 74492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi logging.debug('Setting image_storage_server to %s', 75492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi image_storage_server) 76492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi # If the image_storage_server is already set, delete it. 77492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi self._host.run('sed -i /image_storage_server/d %s' % 78492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi moblab_host.SHADOW_CONFIG_PATH, ignore_status=True) 79492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi self._host.run("sed -i '/\[CROS\]/ a\image_storage_server: " 80492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi "%s' %s" %(image_storage_server, 81492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi moblab_host.SHADOW_CONFIG_PATH))