blob: 04dd53c0581151ecfa203779d4899989a4e7f8b5 [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
Ryan Cui6290f032012-11-20 15:44:43 -08007import os
Mike Frysinger166fea02021-02-12 05:30:33 -05008from unittest import mock
Ryan Cui6290f032012-11-20 15:44:43 -08009
Aviv Keshetb7519e12016-10-04 00:50:00 -070010from chromite.lib import constants
Ryan Cui6290f032012-11-20 15:44:43 -080011from chromite.lib import cros_build_lib
12from chromite.lib import cros_test_lib
Ryan Cui6290f032012-11-20 15:44:43 -080013from chromite.lib import osutils
14from chromite.lib import partial_mock
Chris McDonald2463b9f2020-03-31 15:55:31 -060015from chromite.lib import sudo
Mike Frysinger40ffb532021-02-12 07:36:08 -050016from chromite.scripts import cros_generate_sysroot as cros_gen
Ryan Cui6290f032012-11-20 15:44:43 -080017
18
19Dir = cros_test_lib.Directory
20
21
22class CrosGenMock(partial_mock.PartialMock):
Don Garrett25f309a2014-03-19 14:02:12 -070023 """Helper class to Mock out cros_generate_sysroot.GenerateSysroot."""
24
Ryan Cui6290f032012-11-20 15:44:43 -080025 TARGET = 'chromite.scripts.cros_generate_sysroot.GenerateSysroot'
26 ATTRS = ('_InstallToolchain', '_InstallKernelHeaders',
27 '_InstallBuildDependencies')
28
29 TOOLCHAIN = 'toolchain'
30 KERNEL_HEADERS = 'kernel_headers'
31 BUILD_DEPS = 'build-deps'
32
33 def _InstallToolchain(self, inst):
34 osutils.Touch(os.path.join(inst.sysroot, self.TOOLCHAIN))
35
36 def _InstallKernelHeaders(self, inst):
37 osutils.Touch(os.path.join(inst.sysroot, self.KERNEL_HEADERS))
38
39 def _InstallBuildDependencies(self, inst):
40 osutils.Touch(os.path.join(inst.sysroot, self.BUILD_DEPS))
41
42 def VerifyTarball(self, tarball):
43 dir_struct = [Dir('.', []), self.TOOLCHAIN, self.KERNEL_HEADERS,
44 self.BUILD_DEPS]
45 cros_test_lib.VerifyTarball(tarball, dir_struct)
46
47
48BOARD = 'lumpy'
49TAR_NAME = 'test.tar.xz'
Ryan Cui6290f032012-11-20 15:44:43 -080050
51
Ryan Cui4d6fca92012-12-13 16:41:56 -080052class OverallTest(cros_test_lib.MockTempDirTestCase):
Don Garrett25f309a2014-03-19 14:02:12 -070053 """Tests for cros_generate_sysroot."""
Ryan Cui6290f032012-11-20 15:44:43 -080054
55 def setUp(self):
Ryan Cuif1416f32013-01-22 18:43:41 -080056 self.cg_mock = self.StartPatcher(CrosGenMock())
Chris McDonald2463b9f2020-03-31 15:55:31 -060057 self.PatchObject(sudo.SudoKeepAlive, '_IdentifyTTY', return_value='unknown')
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(
Mike Frysinger3bb61cb2022-04-14 16:07:44 -040064 ['--board', BOARD, '--out-dir', str(self.tempdir),
Ryan Cui4d6fca92012-12-13 16:41:56 -080065 '--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(
Mike Frysinger3bb61cb2022-04-14 16:07:44 -040076 ['--board', BOARD, '--out-dir', str(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([])
Mike Frysinger2d589a12019-08-25 14:15:12 -040082 self.assertEqual(
Ryan Cui6290f032012-11-20 15:44:43 -080083 options.out_file, 'sysroot_chromeos-base_chromeos-chrome.tar.xz')
84
Manoj Gupta2c2a2a22018-02-12 13:13:32 -080085 def testMultiplePkgsTargetName(self):
86 """Test getting the right target name with multiple pkgs."""
Mike Frysinger80de5012019-08-01 14:10:53 -040087 pkgs = '%s virtual/target-os' % constants.CHROME_CP
Manoj Gupta2c2a2a22018-02-12 13:13:32 -080088 options = cros_gen.ParseCommandLine(
Mike Frysinger3bb61cb2022-04-14 16:07:44 -040089 ['--board', BOARD, '--out-dir', str(self.tempdir),
Manoj Gupta2c2a2a22018-02-12 13:13:32 -080090 '--package', pkgs])
91
Mike Frysinger2d589a12019-08-25 14:15:12 -040092 self.assertEqual(
Manoj Gupta2c2a2a22018-02-12 13:13:32 -080093 options.out_file, 'sysroot_chromeos-base_chromeos-chrome.tar.xz')
94
Ryan Cui6290f032012-11-20 15:44:43 -080095 def testExistingTarget(self):
96 """Erroring out on pre-existing target."""
97 options = self._Parse(['--out-file', TAR_NAME])
98 osutils.Touch(os.path.join(self.tempdir, TAR_NAME))
99 self.assertRaises(cros_build_lib.DieSystemExit,
100 cros_gen.FinishParsing, options)
101
102 def testNonExisting(self):
103 """Erroring out on non-existent output dir."""
104 options = cros_gen.ParseCommandLine(
105 ['--board', BOARD, '--out-dir', self.BAD_TARGET_DIR, '--package',
David James629febb2012-11-25 13:07:34 -0800106 constants.CHROME_CP])
Ryan Cui6290f032012-11-20 15:44:43 -0800107 self.assertRaises(cros_build_lib.DieSystemExit,
108 cros_gen.FinishParsing, options)