xref: /aosp_15_r20/external/autotest/client/bin/unit_test.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1*9c5db199SXin Li# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
2*9c5db199SXin Li# Use of this source code is governed by a BSD-style license that can be
3*9c5db199SXin Li# found in the LICENSE file.
4*9c5db199SXin Li
5*9c5db199SXin Liimport logging, os
6*9c5db199SXin Li
7*9c5db199SXin Lifrom autotest_lib.client.bin import test
8*9c5db199SXin Lifrom autotest_lib.client.common_lib import utils
9*9c5db199SXin Li
10*9c5db199SXin Liclass unit_test(test.test):
11*9c5db199SXin Li    """
12*9c5db199SXin Li    Unit test should simply subclass this test which handles everything.
13*9c5db199SXin Li    """
14*9c5db199SXin Li    version = 1
15*9c5db199SXin Li    preserve_srcdir = True
16*9c5db199SXin Li
17*9c5db199SXin Li
18*9c5db199SXin Li    def setup(self):
19*9c5db199SXin Li      os.chdir(self.srcdir)
20*9c5db199SXin Li      utils.make('clean')
21*9c5db199SXin Li      utils.make('all')
22*9c5db199SXin Li
23*9c5db199SXin Li      self.job.setup_dep(['gtest'])
24*9c5db199SXin Li
25*9c5db199SXin Li    def run_once(self):
26*9c5db199SXin Li        dep ='gtest'
27*9c5db199SXin Li        dep_dir = os.path.join(self.autodir, 'deps', dep)
28*9c5db199SXin Li        self.job.install_pkg(dep, 'dep', dep_dir)
29*9c5db199SXin Li
30*9c5db199SXin Li        # Run the unit test, gather the results and place the gcda files for
31*9c5db199SXin Li        # code coverage in the results directory.
32*9c5db199SXin Li
33*9c5db199SXin Li        os.chdir(self.srcdir)
34*9c5db199SXin Li        result = utils.run('LD_LIBRARY_PATH=' + dep_dir +
35*9c5db199SXin Li                           ' GCOV_PREFIX=' + self.resultsdir +
36*9c5db199SXin Li                           ' GCOV_PREFIX_STRIP=9999 ./unit_test > ' +
37*9c5db199SXin Li                           self.resultsdir + '/unit_test_result.txt')
38*9c5db199SXin Li        logging.debug(result.stderr)
39*9c5db199SXin Li        logging.info('result: ' + self.resultsdir + '/unit_test_result.txt')
40*9c5db199SXin Li
41*9c5db199SXin Li    def cleanup(self):
42*9c5db199SXin Li        # This is a hack - we should only need to copy back the .gcda file but
43*9c5db199SXin Li        # we don't know how to access the source on the server. So copy
44*9c5db199SXin Li        # everything back.
45*9c5db199SXin Li
46*9c5db199SXin Li        os.chdir(self.srcdir)
47*9c5db199SXin Li        utils.run('cp * ' + self.resultsdir)
48