blob: 3bf8184f8f2c9dd24742cff1d46edad3234e339d [file] [log] [blame]
Ryan Cui6290f032012-11-20 15:44:43 -08001# Copyright (c) 2012 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
Don Garrett25f309a2014-03-19 14:02:12 -07005"""Unittests for cros_generate_sysroot."""
6
Mike Frysinger383367e2014-09-16 15:06:17 -04007from __future__ import print_function
8
Mike Frysingerea838d12014-12-08 11:55:32 -05009import mock
Ryan Cui6290f032012-11-20 15:44:43 -080010import os
Ryan Cui6290f032012-11-20 15:44:43 -080011
Aviv Keshetb7519e12016-10-04 00:50:00 -070012from chromite.lib import constants
Ryan Cui6290f032012-11-20 15:44:43 -080013from chromite.lib import cros_build_lib
14from chromite.lib import cros_test_lib
15from chromite.scripts import cros_generate_sysroot as cros_gen
16from chromite.lib import osutils
17from chromite.lib import partial_mock
18
19
20Dir = cros_test_lib.Directory
21
22
23class CrosGenMock(partial_mock.PartialMock):
Don Garrett25f309a2014-03-19 14:02:12 -070024 """Helper class to Mock out cros_generate_sysroot.GenerateSysroot."""
25
Ryan Cui6290f032012-11-20 15:44:43 -080026 TARGET = 'chromite.scripts.cros_generate_sysroot.GenerateSysroot'
27 ATTRS = ('_InstallToolchain', '_InstallKernelHeaders',
28 '_InstallBuildDependencies')
29
30 TOOLCHAIN = 'toolchain'
31 KERNEL_HEADERS = 'kernel_headers'
32 BUILD_DEPS = 'build-deps'
33
34 def _InstallToolchain(self, inst):
35 osutils.Touch(os.path.join(inst.sysroot, self.TOOLCHAIN))
36
37 def _InstallKernelHeaders(self, inst):
38 osutils.Touch(os.path.join(inst.sysroot, self.KERNEL_HEADERS))
39
40 def _InstallBuildDependencies(self, inst):
41 osutils.Touch(os.path.join(inst.sysroot, self.BUILD_DEPS))
42
43 def VerifyTarball(self, tarball):
44 dir_struct = [Dir('.', []), self.TOOLCHAIN, self.KERNEL_HEADERS,
45 self.BUILD_DEPS]
46 cros_test_lib.VerifyTarball(tarball, dir_struct)
47
48
49BOARD = 'lumpy'
50TAR_NAME = 'test.tar.xz'
Ryan Cui6290f032012-11-20 15:44:43 -080051
52
Ryan Cui4d6fca92012-12-13 16:41:56 -080053class OverallTest(cros_test_lib.MockTempDirTestCase):
Don Garrett25f309a2014-03-19 14:02:12 -070054 """Tests for cros_generate_sysroot."""
Ryan Cui6290f032012-11-20 15:44:43 -080055
56 def setUp(self):
Ryan Cuif1416f32013-01-22 18:43:41 -080057 self.cg_mock = self.StartPatcher(CrosGenMock())
Ryan Cui6290f032012-11-20 15:44:43 -080058
59 def testTarballGeneration(self):
60 """End-to-end test of tarball generation."""
Ryan Cui4d6fca92012-12-13 16:41:56 -080061 with mock.patch.object(cros_build_lib, 'IsInsideChroot'):
62 cros_build_lib.IsInsideChroot.returnvalue = True
63 cros_gen.main(
64 ['--board', BOARD, '--out-dir', self.tempdir,
65 '--out-file', TAR_NAME, '--package', constants.CHROME_CP])
66 self.cg_mock.VerifyTarball(os.path.join(self.tempdir, TAR_NAME))
Ryan Cui6290f032012-11-20 15:44:43 -080067
68
69class InterfaceTest(cros_test_lib.TempDirTestCase):
70 """Test Parsing and error checking functionality."""
71
72 BAD_TARGET_DIR = '/path/to/nowhere'
73
74 def _Parse(self, extra_args):
75 return cros_gen.ParseCommandLine(
76 ['--board', BOARD, '--out-dir', self.tempdir,
David James629febb2012-11-25 13:07:34 -080077 '--package', constants.CHROME_CP] + extra_args)
Ryan Cui6290f032012-11-20 15:44:43 -080078
79 def testDefaultTargetName(self):
80 """We are getting the right default target name."""
81 options = self._Parse([])
82 self.assertEquals(
83 options.out_file, 'sysroot_chromeos-base_chromeos-chrome.tar.xz')
84
85 def testExistingTarget(self):
86 """Erroring out on pre-existing target."""
87 options = self._Parse(['--out-file', TAR_NAME])
88 osutils.Touch(os.path.join(self.tempdir, TAR_NAME))
89 self.assertRaises(cros_build_lib.DieSystemExit,
90 cros_gen.FinishParsing, options)
91
92 def testNonExisting(self):
93 """Erroring out on non-existent output dir."""
94 options = cros_gen.ParseCommandLine(
95 ['--board', BOARD, '--out-dir', self.BAD_TARGET_DIR, '--package',
David James629febb2012-11-25 13:07:34 -080096 constants.CHROME_CP])
Ryan Cui6290f032012-11-20 15:44:43 -080097 self.assertRaises(cros_build_lib.DieSystemExit,
98 cros_gen.FinishParsing, options)