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. 43dc370160a024416bc4a31cafd7a67455c74c4f6Prathmesh Prabhu 53dc370160a024416bc4a31cafd7a67455c74c4f6Prathmesh Prabhuimport datetime 6492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basiimport logging 7492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basiimport re 8492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 9be3585f95e656a9cb35df305c173545d9723bc43Prathmesh Prabhuimport common 10492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basifrom autotest_lib.client.common_lib import error, global_config 11492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basifrom autotest_lib.server import test 12492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basifrom autotest_lib.server.hosts import moblab_host 13492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 14492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 15492242d0e51e400cfe7077c7d245cebb3314f8faSimran BasiDEFAULT_IMAGE_STORAGE_SERVER = global_config.global_config.get_config_value( 16492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 'CROS', 'image_storage_server') 171affd71e99ea67d56e4d3bc794ca8164957c2400Prathmesh PrabhuSTORAGE_SERVER_REGEX = '(gs://|/).*/' 18e4e50a50f03c31071048f846067c2c3635afd318Prathmesh PrabhuDEFAULT_SERVICES_INIT_TIMEOUT_M = 5 19492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 20492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 21492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basiclass MoblabTest(test.test): 22492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi """Base class for Moblab tests. 23492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi """ 24492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 25e4e50a50f03c31071048f846067c2c3635afd318Prathmesh Prabhu def initialize( 26e4e50a50f03c31071048f846067c2c3635afd318Prathmesh Prabhu self, 27e4e50a50f03c31071048f846067c2c3635afd318Prathmesh Prabhu host, 28e4e50a50f03c31071048f846067c2c3635afd318Prathmesh Prabhu boto_path='', 29e4e50a50f03c31071048f846067c2c3635afd318Prathmesh Prabhu image_storage_server=DEFAULT_IMAGE_STORAGE_SERVER, 30e4e50a50f03c31071048f846067c2c3635afd318Prathmesh Prabhu services_init_timeout_m=DEFAULT_SERVICES_INIT_TIMEOUT_M, 31e4e50a50f03c31071048f846067c2c3635afd318Prathmesh Prabhu ): 32492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi """Initialize the Moblab Host. 33492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 34492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi * Installs a boto file. 35492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi * Sets up the image storage server for this test. 36492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi * Finds and adds DUTs on the testing subnet. 37492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 38492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi @param boto_path: Path to the boto file we want to install. 39492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi @param image_storage_server: image storage server to use for grabbing 40e4e50a50f03c31071048f846067c2c3635afd318Prathmesh Prabhu images from Google Storage. 41e4e50a50f03c31071048f846067c2c3635afd318Prathmesh Prabhu @param services_init_timeout_m: Timeout (in minuts) for moblab DUT's 42e4e50a50f03c31071048f846067c2c3635afd318Prathmesh Prabhu upstart service initialzation after boot. 43492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi """ 44492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi super(MoblabTest, self).initialize() 453dc370160a024416bc4a31cafd7a67455c74c4f6Prathmesh Prabhu self._start_time = datetime.datetime.now() 46492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi self._host = host 479d29be848b4bb6b20a8f9f83fe67c9abadb49a7bPrathmesh Prabhu # When passed in from test_that or run_suite, all incoming arguments are 489d29be848b4bb6b20a8f9f83fe67c9abadb49a7bPrathmesh Prabhu # str. 499d29be848b4bb6b20a8f9f83fe67c9abadb49a7bPrathmesh Prabhu self._host.verify_moblab_services( 509d29be848b4bb6b20a8f9f83fe67c9abadb49a7bPrathmesh Prabhu timeout_m=int(services_init_timeout_m)) 51d7cf1a006871030854ecbb6c9325b5df9010aaf9Keith Haddow self._host.wait_afe_up() 52178ce7d5a00df6a9837af867cae9887dbe7f962eSimran Basi self._host.install_boto_file(boto_path) 53be3585f95e656a9cb35df305c173545d9723bc43Prathmesh Prabhu self._set_image_storage_server(image_storage_server) 54492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi self._host.find_and_add_duts() 55d7cf1a006871030854ecbb6c9325b5df9010aaf9Keith Haddow self._host.verify_duts() 56d7cf1a006871030854ecbb6c9325b5df9010aaf9Keith Haddow self._host.verify_special_tasks_complete() 57492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 58492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 593dc370160a024416bc4a31cafd7a67455c74c4f6Prathmesh Prabhu @property 603dc370160a024416bc4a31cafd7a67455c74c4f6Prathmesh Prabhu def elapsed(self): 613dc370160a024416bc4a31cafd7a67455c74c4f6Prathmesh Prabhu """A datetime.timedleta for time elapsed since start of test.""" 623dc370160a024416bc4a31cafd7a67455c74c4f6Prathmesh Prabhu return datetime.datetime.now() - self._start_time 633dc370160a024416bc4a31cafd7a67455c74c4f6Prathmesh Prabhu 643dc370160a024416bc4a31cafd7a67455c74c4f6Prathmesh Prabhu 65be3585f95e656a9cb35df305c173545d9723bc43Prathmesh Prabhu def _set_image_storage_server(self, image_storage_server): 66492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi """Set the image storage server. 67492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 68492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi @param image_storage_server: Name of image storage server to use. Must 69492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi follow format or gs://bucket-name/ 70492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi (Note trailing slash is required). 71492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi 72492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi @raises error.TestError if the image_storage_server is incorrectly 73492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi formatted. 74492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi """ 75492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi if not re.match(STORAGE_SERVER_REGEX, image_storage_server): 76492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi raise error.TestError( 771affd71e99ea67d56e4d3bc794ca8164957c2400Prathmesh Prabhu 'Image Storage Server supplied (%s) is not in the correct ' 781affd71e99ea67d56e4d3bc794ca8164957c2400Prathmesh Prabhu 'format. Remote paths must be of the form "gs://.*/" and ' 791affd71e99ea67d56e4d3bc794ca8164957c2400Prathmesh Prabhu 'local paths of the form "/.*/"' % image_storage_server) 801affd71e99ea67d56e4d3bc794ca8164957c2400Prathmesh Prabhu logging.info('Setting image_storage_server to %s', image_storage_server) 81492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi # If the image_storage_server is already set, delete it. 82492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi self._host.run('sed -i /image_storage_server/d %s' % 83492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi moblab_host.SHADOW_CONFIG_PATH, ignore_status=True) 84492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi self._host.run("sed -i '/\[CROS\]/ a\image_storage_server: " 85492242d0e51e400cfe7077c7d245cebb3314f8faSimran Basi "%s' %s" %(image_storage_server, 86d7cf1a006871030854ecbb6c9325b5df9010aaf9Keith Haddow moblab_host.SHADOW_CONFIG_PATH)) 87