blob: 5954c04c2506c24d841270afc2d00c97b259073f [file] [log] [blame]
# Copyright 2014 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Unittests for cros_install_debug_syms.py"""
from collections import namedtuple
import os
from chromite.lib import cros_test_lib
from chromite.scripts import cros_install_debug_syms
from chromite.utils import outcap
pytestmark = cros_test_lib.pytestmark_inside_only
SimpleIndex = namedtuple("SimpleIndex", "header packages")
class InstallDebugSymsTest(cros_test_lib.MockTestCase):
"""Test the parsing of package index"""
def setUp(self) -> None:
self.local_binhosts = [
"/build/something/packages/",
"file:///build/somethingelse/packages",
"file://localhost/build/another/packages",
]
self.remote_binhosts = [
"http://domain.com/binhost",
"gs://chromeos-stuff/binhost",
]
def testGetLocalPackageIndex(self) -> None:
"""Check that local binhosts are fetched correctly."""
self.PatchObject(
cros_install_debug_syms.binpkg,
"GrabLocalPackageIndex",
return_value=SimpleIndex({}, {}),
)
self.PatchObject(
cros_install_debug_syms.os.path, "isdir", return_value=True
)
for binhost in self.local_binhosts:
cros_install_debug_syms.GetPackageIndex(binhost)
def testGetRemotePackageIndex(self) -> None:
"""Check that remote binhosts are fetched correctly."""
self.PatchObject(
cros_install_debug_syms.binpkg,
"GrabRemotePackageIndex",
return_value=SimpleIndex({}, {}),
)
for binhost in self.remote_binhosts:
cros_install_debug_syms.GetPackageIndex(binhost)
def testListRemoteBinhost(self) -> None:
"""Check that urls are generated correctly for remote binhosts."""
chaps_cpv = "chromeos-base/chaps-0-r2"
metrics_cpv = "chromeos-base/metrics-0-r4"
index = SimpleIndex(
{},
[
{"CPV": "chromeos-base/shill-0-r1"},
{"CPV": chaps_cpv, "DEBUG_SYMBOLS": "yes"},
{
"CPV": metrics_cpv,
"DEBUG_SYMBOLS": "yes",
"PATH": "path/to/binpkg.tbz2",
},
],
)
self.PatchObject(
cros_install_debug_syms, "GetPackageIndex", return_value=index
)
for binhost in self.remote_binhosts:
expected = {
chaps_cpv: os.path.join(binhost, chaps_cpv + ".debug.tbz2"),
metrics_cpv: os.path.join(binhost, "path/to/binpkg.debug.tbz2"),
}
self.assertEqual(
cros_install_debug_syms.ListBinhost(binhost), expected
)
def testListRemoteBinhostWithURI(self) -> None:
"""Check that urls are generated correctly when URI is defined."""
index = SimpleIndex(
{"URI": "gs://chromeos-prebuilts"},
[
{
"CPV": "chromeos-base/shill-0-r1",
"DEBUG_SYMBOLS": "yes",
"PATH": "amd64-generic/paladin1234/shill-0-r1.tbz2",
}
],
)
self.PatchObject(
cros_install_debug_syms, "GetPackageIndex", return_value=index
)
binhost = "gs://chromeos-prebuilts/gizmo-paladin/"
debug_symbols_url = (
"gs://chromeos-prebuilts/amd64-generic"
"/paladin1234/shill-0-r1.debug.tbz2"
)
self.assertEqual(
cros_install_debug_syms.ListBinhost(binhost),
{"chromeos-base/shill-0-r1": debug_symbols_url},
)
class InstallArgsTest(cros_test_lib.MockTestCase):
"""Test InstallArgs utility funcs."""
def testListInstallArgs(self) -> None:
"""Check ListInstallArgs behavior."""
parser = cros_install_debug_syms.GetParser()
opts = parser.parse_args(["--board", "betty", "sys-fs/fuse"])
self.PatchObject(
cros_install_debug_syms,
"GetInstallArgs",
return_value=[
("a/b-1", "gs://bucket/b-1.tbz2"),
("c/d-1", "gs://bucket/d-1.tbz2"),
],
)
with outcap.OutputCapturer() as cap:
cros_install_debug_syms.ListInstallArgs(opts, "/foo")
self.assertEqual(
"a/b-1 gs://bucket/b-1.tbz2\nc/d-1 gs://bucket/d-1.tbz2\n",
cap.GetStdout(),
)
def testGetInstallArgsList(self) -> None:
"""Check GetInstallArgsList behavior."""
stdout = (
"sys-apps/which-2.21 gs://bucket/board/which-2.21.debug.tbz2\n"
"dev-libs/foo-1-r1 gs://bucket/board/foo-1-r1.debug.tbz2\n"
)
rc = self.StartPatcher(cros_test_lib.RunCommandMock())
rc.AddCmdResult(cmd=["foo", "--list"], stdout=stdout)
self.assertEqual(
[
[
"sys-apps/which-2.21",
"gs://bucket/board/which-2.21.debug.tbz2",
],
["dev-libs/foo-1-r1", "gs://bucket/board/foo-1-r1.debug.tbz2"],
],
cros_install_debug_syms.GetInstallArgsList(["foo"]),
)