blob: 5aefe8b573e134afd05b6d4825eb5af1e249e095 [file] [log] [blame]
Bertrand SIMONNET1e146e52014-12-11 14:11:56 -08001# Copyright 2014 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
5"""Unittests for cros_install_debug_syms.py"""
6
Bertrand SIMONNET1e146e52014-12-11 14:11:56 -08007from collections import namedtuple
8import os
Bertrand SIMONNET1e146e52014-12-11 14:11:56 -08009
10from chromite.lib import cros_test_lib
11from chromite.scripts import cros_install_debug_syms
Mike Frysinger8e99b372019-12-05 19:05:02 -050012from chromite.utils import outcap
Bertrand SIMONNET1e146e52014-12-11 14:11:56 -080013
Mike Frysinger807d8282022-04-28 22:45:17 -040014
Greg Edelstona4c9b3b2020-01-07 17:51:13 -070015pytestmark = cros_test_lib.pytestmark_inside_only
16
Bertrand SIMONNET1e146e52014-12-11 14:11:56 -080017
Alex Klein1699fab2022-09-08 08:46:06 -060018SimpleIndex = namedtuple("SimpleIndex", "header packages")
Bertrand SIMONNET1e146e52014-12-11 14:11:56 -080019
20
21class InstallDebugSymsTest(cros_test_lib.MockTestCase):
Alex Klein1699fab2022-09-08 08:46:06 -060022 """Test the parsing of package index"""
Bertrand SIMONNET1e146e52014-12-11 14:11:56 -080023
Alex Klein1699fab2022-09-08 08:46:06 -060024 def setUp(self):
25 self.local_binhosts = [
26 "/build/something/packages/",
27 "file:///build/somethingelse/packages",
28 "file://localhost/build/another/packages",
29 ]
Bertrand SIMONNET1e146e52014-12-11 14:11:56 -080030
Alex Klein1699fab2022-09-08 08:46:06 -060031 self.remote_binhosts = [
32 "http://domain.com/binhost",
33 "gs://chromeos-stuff/binhost",
34 ]
Bertrand SIMONNET1e146e52014-12-11 14:11:56 -080035
Alex Klein1699fab2022-09-08 08:46:06 -060036 def testGetLocalPackageIndex(self):
37 """Check that local binhosts are fetched correctly."""
38 self.PatchObject(
39 cros_install_debug_syms.binpkg,
40 "GrabLocalPackageIndex",
41 return_value=SimpleIndex({}, {}),
42 )
43 self.PatchObject(
44 cros_install_debug_syms.os.path, "isdir", return_value=True
45 )
46 for binhost in self.local_binhosts:
47 cros_install_debug_syms.GetPackageIndex(binhost)
Bertrand SIMONNET1e146e52014-12-11 14:11:56 -080048
Alex Klein1699fab2022-09-08 08:46:06 -060049 def testGetRemotePackageIndex(self):
50 """Check that remote binhosts are fetched correctly."""
51 self.PatchObject(
52 cros_install_debug_syms.binpkg,
53 "GrabRemotePackageIndex",
54 return_value=SimpleIndex({}, {}),
55 )
56 for binhost in self.remote_binhosts:
57 cros_install_debug_syms.GetPackageIndex(binhost)
Bertrand SIMONNET1e146e52014-12-11 14:11:56 -080058
Alex Klein1699fab2022-09-08 08:46:06 -060059 def testListRemoteBinhost(self):
60 """Check that urls are generated correctly for remote binhosts."""
61 chaps_cpv = "chromeos-base/chaps-0-r2"
62 metrics_cpv = "chromeos-base/metrics-0-r4"
Bertrand SIMONNET1e146e52014-12-11 14:11:56 -080063
Alex Klein1699fab2022-09-08 08:46:06 -060064 index = SimpleIndex(
65 {},
66 [
67 {"CPV": "chromeos-base/shill-0-r1"},
68 {"CPV": chaps_cpv, "DEBUG_SYMBOLS": "yes"},
69 {
70 "CPV": metrics_cpv,
71 "DEBUG_SYMBOLS": "yes",
72 "PATH": "path/to/binpkg.tbz2",
73 },
74 ],
75 )
76 self.PatchObject(
77 cros_install_debug_syms, "GetPackageIndex", return_value=index
78 )
Bertrand SIMONNET1e146e52014-12-11 14:11:56 -080079
Alex Klein1699fab2022-09-08 08:46:06 -060080 for binhost in self.remote_binhosts:
81 expected = {
82 chaps_cpv: os.path.join(binhost, chaps_cpv + ".debug.tbz2"),
83 metrics_cpv: os.path.join(binhost, "path/to/binpkg.debug.tbz2"),
84 }
85 self.assertEqual(
86 cros_install_debug_syms.ListBinhost(binhost), expected
87 )
Bertrand SIMONNET1e146e52014-12-11 14:11:56 -080088
Alex Klein1699fab2022-09-08 08:46:06 -060089 def testListRemoteBinhostWithURI(self):
90 """Check that urls are generated correctly when URI is defined."""
91 index = SimpleIndex(
92 {"URI": "gs://chromeos-prebuilts"},
93 [
94 {
95 "CPV": "chromeos-base/shill-0-r1",
96 "DEBUG_SYMBOLS": "yes",
97 "PATH": "amd64-generic/paladin1234/shill-0-r1.tbz2",
98 }
99 ],
100 )
101 self.PatchObject(
102 cros_install_debug_syms, "GetPackageIndex", return_value=index
103 )
Bertrand SIMONNET1e146e52014-12-11 14:11:56 -0800104
Alex Klein1699fab2022-09-08 08:46:06 -0600105 binhost = "gs://chromeos-prebuilts/gizmo-paladin/"
106 debug_symbols_url = (
107 "gs://chromeos-prebuilts/amd64-generic"
108 "/paladin1234/shill-0-r1.debug.tbz2"
109 )
110 self.assertEqual(
111 cros_install_debug_syms.ListBinhost(binhost),
112 {"chromeos-base/shill-0-r1": debug_symbols_url},
113 )
Mike Frysinger8e99b372019-12-05 19:05:02 -0500114
115
116class InstallArgsTest(cros_test_lib.MockTestCase):
Alex Klein1699fab2022-09-08 08:46:06 -0600117 """Test InstallArgs utility funcs."""
Mike Frysinger8e99b372019-12-05 19:05:02 -0500118
Alex Klein1699fab2022-09-08 08:46:06 -0600119 def testListInstallArgs(self):
120 """Check ListInstallArgs behavior."""
121 parser = cros_install_debug_syms.GetParser()
122 opts = parser.parse_args(["--board", "betty", "sys-fs/fuse"])
123 self.PatchObject(
124 cros_install_debug_syms,
125 "GetInstallArgs",
126 return_value=[
127 ("a/b-1", "gs://bucket/b-1.tbz2"),
128 ("c/d-1", "gs://bucket/d-1.tbz2"),
129 ],
130 )
131 with outcap.OutputCapturer() as cap:
132 cros_install_debug_syms.ListInstallArgs(opts, "/foo")
133 self.assertEqual(
134 "a/b-1 gs://bucket/b-1.tbz2\nc/d-1 gs://bucket/d-1.tbz2\n",
135 cap.GetStdout(),
136 )
Mike Frysinger8e99b372019-12-05 19:05:02 -0500137
Alex Klein1699fab2022-09-08 08:46:06 -0600138 def testGetInstallArgsList(self):
139 """Check GetInstallArgsList behavior."""
140 stdout = (
141 "sys-apps/which-2.21 gs://bucket/board/which-2.21.debug.tbz2\n"
142 "dev-libs/foo-1-r1 gs://bucket/board/foo-1-r1.debug.tbz2\n"
143 )
144 rc = self.StartPatcher(cros_test_lib.RunCommandMock())
145 rc.AddCmdResult(cmd=["foo", "--list"], stdout=stdout)
146 self.assertEqual(
147 [
148 [
149 "sys-apps/which-2.21",
150 "gs://bucket/board/which-2.21.debug.tbz2",
151 ],
152 ["dev-libs/foo-1-r1", "gs://bucket/board/foo-1-r1.debug.tbz2"],
153 ],
154 cros_install_debug_syms.GetInstallArgsList(["foo"]),
155 )