1# Copyright 2014 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
5import logging
6import os
7
8from autotest_lib.client.bin import test, utils
9from autotest_lib.client.common_lib import file_utils
10from autotest_lib.client.common_lib import logging_manager
11
12
13class platform_Crouton(test.test):
14    """
15    Tests crouton
16    """
17    version = 1
18
19
20    def _parse_args(self, args):
21        self._repo = "dnschneid/crouton"
22        self._branch = "master"
23        self._runargs = "00"
24        self._env = ""
25
26        for option_name, value in args.iteritems():
27            if option_name == 'repo':
28                self._repo = value
29            elif option_name == 'branch':
30                self._branch = value
31            elif option_name == 'runargs':
32                self._runargs = value
33            elif option_name == 'env':
34                self._env = value
35
36
37    def run_once(self, args={}):
38        self._parse_args(args)
39
40        logging.info("Running crouton test:")
41        logging.info(" - repo: %s", self._repo);
42        logging.info(" - branch: %s", self._branch);
43        logging.info(" - runargs: %s", self._runargs);
44        logging.info(" - env:%s", self._env);
45        logging.debug(" - resultsdir: %s", self.resultsdir)
46        logging.debug(' - tmpdir: %s', self.tmpdir)
47
48        crouton_temp_file = os.path.join(self.tmpdir, "archive.tar.gz")
49        crouton_url = 'https://github.com/%s/archive/%s.tar.gz' \
50                                            % (self._repo, self._branch)
51
52        logging.info('Downloading crouton tarball: "%s".', crouton_url)
53        file_utils.download_file(crouton_url, crouton_temp_file)
54
55        os.chdir(self.tmpdir)
56        utils.system('tar xvf %s --strip-components 1' % crouton_temp_file)
57
58        # Set environment. Only allow setting CROUTON_MIRROR_* variables
59        for env_pair in self._env.split(";"):
60            keyval = env_pair.split("=")
61            if len(keyval) == 2 and keyval[0].find("CROUTON_MIRROR_") == 0:
62                logging.debug('Setting env %s=%s', keyval[0], keyval[1])
63                os.environ[keyval[0]] = keyval[1]
64
65        # Pass arguments separately to avoid problems with Little Bobby Tables.
66        args = ['test/run.sh', '-l', self.resultsdir] + self._runargs.split()
67        utils.run('sh', args=args,
68                  timeout=None, ignore_status=False,
69                  stderr_tee=logging_manager.LoggingFile(level=logging.INFO))
70
71
72    def cleanup(self):
73        # Reset hung task panic, see crbug.com/420094
74        utils.system('echo 1 > /proc/sys/kernel/hung_task_panic')
75