blob: e56fe6dce388c8960fd16f26fb72a5b077165247 [file] [log] [blame]
Ryan Cui6290f032012-11-20 15:44:43 -08001#!/usr/bin/python
Ryan Cui6290f032012-11-20 15:44:43 -08002# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
Don Garrett25f309a2014-03-19 14:02:12 -07006"""Unittests for cros_generate_sysroot."""
7
Ryan Cui6290f032012-11-20 15:44:43 -08008import os
9import sys
10
11sys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)),
12 '..', '..'))
Don Garrett88b8d782014-05-13 17:30:55 -070013from chromite.cbuildbot import constants
Ryan Cui6290f032012-11-20 15:44:43 -080014from chromite.lib import cros_build_lib
15from chromite.lib import cros_test_lib
16from chromite.scripts import cros_generate_sysroot as cros_gen
17from chromite.lib import osutils
18from chromite.lib import partial_mock
19
Brian Harringe7524372012-12-23 02:02:56 -080020# TODO(build): Finish test wrapper (http://crosbug.com/37517).
21# Until then, this has to be after the chromite imports.
22import mock
23
Ryan Cui6290f032012-11-20 15:44:43 -080024
25Dir = cros_test_lib.Directory
26
27
28class CrosGenMock(partial_mock.PartialMock):
Don Garrett25f309a2014-03-19 14:02:12 -070029 """Helper class to Mock out cros_generate_sysroot.GenerateSysroot."""
30
Ryan Cui6290f032012-11-20 15:44:43 -080031 TARGET = 'chromite.scripts.cros_generate_sysroot.GenerateSysroot'
32 ATTRS = ('_InstallToolchain', '_InstallKernelHeaders',
33 '_InstallBuildDependencies')
34
35 TOOLCHAIN = 'toolchain'
36 KERNEL_HEADERS = 'kernel_headers'
37 BUILD_DEPS = 'build-deps'
38
39 def _InstallToolchain(self, inst):
40 osutils.Touch(os.path.join(inst.sysroot, self.TOOLCHAIN))
41
42 def _InstallKernelHeaders(self, inst):
43 osutils.Touch(os.path.join(inst.sysroot, self.KERNEL_HEADERS))
44
45 def _InstallBuildDependencies(self, inst):
46 osutils.Touch(os.path.join(inst.sysroot, self.BUILD_DEPS))
47
48 def VerifyTarball(self, tarball):
49 dir_struct = [Dir('.', []), self.TOOLCHAIN, self.KERNEL_HEADERS,
50 self.BUILD_DEPS]
51 cros_test_lib.VerifyTarball(tarball, dir_struct)
52
53
54BOARD = 'lumpy'
55TAR_NAME = 'test.tar.xz'
Ryan Cui6290f032012-11-20 15:44:43 -080056
57
Ryan Cui4d6fca92012-12-13 16:41:56 -080058class OverallTest(cros_test_lib.MockTempDirTestCase):
Don Garrett25f309a2014-03-19 14:02:12 -070059 """Tests for cros_generate_sysroot."""
Ryan Cui6290f032012-11-20 15:44:43 -080060
61 def setUp(self):
Ryan Cuif1416f32013-01-22 18:43:41 -080062 self.cg_mock = self.StartPatcher(CrosGenMock())
Ryan Cui6290f032012-11-20 15:44:43 -080063
64 def testTarballGeneration(self):
65 """End-to-end test of tarball generation."""
Ryan Cui4d6fca92012-12-13 16:41:56 -080066 with mock.patch.object(cros_build_lib, 'IsInsideChroot'):
67 cros_build_lib.IsInsideChroot.returnvalue = True
68 cros_gen.main(
69 ['--board', BOARD, '--out-dir', self.tempdir,
70 '--out-file', TAR_NAME, '--package', constants.CHROME_CP])
71 self.cg_mock.VerifyTarball(os.path.join(self.tempdir, TAR_NAME))
Ryan Cui6290f032012-11-20 15:44:43 -080072
73
74class InterfaceTest(cros_test_lib.TempDirTestCase):
75 """Test Parsing and error checking functionality."""
76
77 BAD_TARGET_DIR = '/path/to/nowhere'
78
79 def _Parse(self, extra_args):
80 return cros_gen.ParseCommandLine(
81 ['--board', BOARD, '--out-dir', self.tempdir,
David James629febb2012-11-25 13:07:34 -080082 '--package', constants.CHROME_CP] + extra_args)
Ryan Cui6290f032012-11-20 15:44:43 -080083
84 def testDefaultTargetName(self):
85 """We are getting the right default target name."""
86 options = self._Parse([])
87 self.assertEquals(
88 options.out_file, 'sysroot_chromeos-base_chromeos-chrome.tar.xz')
89
90 def testExistingTarget(self):
91 """Erroring out on pre-existing target."""
92 options = self._Parse(['--out-file', TAR_NAME])
93 osutils.Touch(os.path.join(self.tempdir, TAR_NAME))
94 self.assertRaises(cros_build_lib.DieSystemExit,
95 cros_gen.FinishParsing, options)
96
97 def testNonExisting(self):
98 """Erroring out on non-existent output dir."""
99 options = cros_gen.ParseCommandLine(
100 ['--board', BOARD, '--out-dir', self.BAD_TARGET_DIR, '--package',
David James629febb2012-11-25 13:07:34 -0800101 constants.CHROME_CP])
Ryan Cui6290f032012-11-20 15:44:43 -0800102 self.assertRaises(cros_build_lib.DieSystemExit,
103 cros_gen.FinishParsing, options)
104
105
106if __name__ == '__main__':
107 cros_test_lib.main()