blob: 8d39bdbc5ac6174a4d5b840091db698d701cb766 [file] [log] [blame]
Mike Frysingere58c0e22017-10-04 15:43:30 -04001# -*- coding: utf-8 -*-
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
Mike Frysinger383367e2014-09-16 15:06:17 -04008from __future__ import print_function
9
Ryan Cui6290f032012-11-20 15:44:43 -080010import os
Ryan Cui6290f032012-11-20 15:44:43 -080011
Mike Frysinger6db648e2018-07-24 19:57:58 -040012import mock
13
Aviv Keshetb7519e12016-10-04 00:50:00 -070014from chromite.lib import constants
Ryan Cui6290f032012-11-20 15:44:43 -080015from chromite.lib import cros_build_lib
16from chromite.lib import cros_test_lib
17from chromite.scripts import cros_generate_sysroot as cros_gen
18from chromite.lib import osutils
19from chromite.lib import partial_mock
Chris McDonald2463b9f2020-03-31 15:55:31 -060020from chromite.lib import sudo
Ryan Cui6290f032012-11-20 15:44:43 -080021
22
23Dir = cros_test_lib.Directory
24
25
26class CrosGenMock(partial_mock.PartialMock):
Don Garrett25f309a2014-03-19 14:02:12 -070027 """Helper class to Mock out cros_generate_sysroot.GenerateSysroot."""
28
Ryan Cui6290f032012-11-20 15:44:43 -080029 TARGET = 'chromite.scripts.cros_generate_sysroot.GenerateSysroot'
30 ATTRS = ('_InstallToolchain', '_InstallKernelHeaders',
31 '_InstallBuildDependencies')
32
33 TOOLCHAIN = 'toolchain'
34 KERNEL_HEADERS = 'kernel_headers'
35 BUILD_DEPS = 'build-deps'
36
37 def _InstallToolchain(self, inst):
38 osutils.Touch(os.path.join(inst.sysroot, self.TOOLCHAIN))
39
40 def _InstallKernelHeaders(self, inst):
41 osutils.Touch(os.path.join(inst.sysroot, self.KERNEL_HEADERS))
42
43 def _InstallBuildDependencies(self, inst):
44 osutils.Touch(os.path.join(inst.sysroot, self.BUILD_DEPS))
45
46 def VerifyTarball(self, tarball):
47 dir_struct = [Dir('.', []), self.TOOLCHAIN, self.KERNEL_HEADERS,
48 self.BUILD_DEPS]
49 cros_test_lib.VerifyTarball(tarball, dir_struct)
50
51
52BOARD = 'lumpy'
53TAR_NAME = 'test.tar.xz'
Ryan Cui6290f032012-11-20 15:44:43 -080054
55
Ryan Cui4d6fca92012-12-13 16:41:56 -080056class OverallTest(cros_test_lib.MockTempDirTestCase):
Don Garrett25f309a2014-03-19 14:02:12 -070057 """Tests for cros_generate_sysroot."""
Ryan Cui6290f032012-11-20 15:44:43 -080058
59 def setUp(self):
Ryan Cuif1416f32013-01-22 18:43:41 -080060 self.cg_mock = self.StartPatcher(CrosGenMock())
Chris McDonald2463b9f2020-03-31 15:55:31 -060061 self.PatchObject(sudo.SudoKeepAlive, '_IdentifyTTY', return_value='unknown')
Ryan Cui6290f032012-11-20 15:44:43 -080062
63 def testTarballGeneration(self):
64 """End-to-end test of tarball generation."""
Ryan Cui4d6fca92012-12-13 16:41:56 -080065 with mock.patch.object(cros_build_lib, 'IsInsideChroot'):
66 cros_build_lib.IsInsideChroot.returnvalue = True
67 cros_gen.main(
68 ['--board', BOARD, '--out-dir', self.tempdir,
69 '--out-file', TAR_NAME, '--package', constants.CHROME_CP])
70 self.cg_mock.VerifyTarball(os.path.join(self.tempdir, TAR_NAME))
Ryan Cui6290f032012-11-20 15:44:43 -080071
72
73class InterfaceTest(cros_test_lib.TempDirTestCase):
74 """Test Parsing and error checking functionality."""
75
76 BAD_TARGET_DIR = '/path/to/nowhere'
77
78 def _Parse(self, extra_args):
79 return cros_gen.ParseCommandLine(
80 ['--board', BOARD, '--out-dir', self.tempdir,
David James629febb2012-11-25 13:07:34 -080081 '--package', constants.CHROME_CP] + extra_args)
Ryan Cui6290f032012-11-20 15:44:43 -080082
83 def testDefaultTargetName(self):
84 """We are getting the right default target name."""
85 options = self._Parse([])
Mike Frysinger2d589a12019-08-25 14:15:12 -040086 self.assertEqual(
Ryan Cui6290f032012-11-20 15:44:43 -080087 options.out_file, 'sysroot_chromeos-base_chromeos-chrome.tar.xz')
88
Manoj Gupta2c2a2a22018-02-12 13:13:32 -080089 def testMultiplePkgsTargetName(self):
90 """Test getting the right target name with multiple pkgs."""
Mike Frysinger80de5012019-08-01 14:10:53 -040091 pkgs = '%s virtual/target-os' % constants.CHROME_CP
Manoj Gupta2c2a2a22018-02-12 13:13:32 -080092 options = cros_gen.ParseCommandLine(
93 ['--board', BOARD, '--out-dir', self.tempdir,
94 '--package', pkgs])
95
Mike Frysinger2d589a12019-08-25 14:15:12 -040096 self.assertEqual(
Manoj Gupta2c2a2a22018-02-12 13:13:32 -080097 options.out_file, 'sysroot_chromeos-base_chromeos-chrome.tar.xz')
98
Ryan Cui6290f032012-11-20 15:44:43 -080099 def testExistingTarget(self):
100 """Erroring out on pre-existing target."""
101 options = self._Parse(['--out-file', TAR_NAME])
102 osutils.Touch(os.path.join(self.tempdir, TAR_NAME))
103 self.assertRaises(cros_build_lib.DieSystemExit,
104 cros_gen.FinishParsing, options)
105
106 def testNonExisting(self):
107 """Erroring out on non-existent output dir."""
108 options = cros_gen.ParseCommandLine(
109 ['--board', BOARD, '--out-dir', self.BAD_TARGET_DIR, '--package',
David James629febb2012-11-25 13:07:34 -0800110 constants.CHROME_CP])
Ryan Cui6290f032012-11-20 15:44:43 -0800111 self.assertRaises(cros_build_lib.DieSystemExit,
112 cros_gen.FinishParsing, options)