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))