blob: 32c95bbcfdbc08bce6851753107f566aaee88d5f [file] [log] [blame]
Mike Frysingere58c0e22017-10-04 15:43:30 -04001# -*- coding: utf-8 -*-
Bertrand SIMONNET1e146e52014-12-11 14:11:56 -08002# Copyright 2014 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
6"""Unittests for cros_install_debug_syms.py"""
7
8from __future__ import print_function
9
10from collections import namedtuple
11import os
Bertrand SIMONNET1e146e52014-12-11 14:11:56 -080012
13from chromite.lib import cros_test_lib
14from chromite.scripts import cros_install_debug_syms
Mike Frysinger8e99b372019-12-05 19:05:02 -050015from chromite.utils import outcap
Bertrand SIMONNET1e146e52014-12-11 14:11:56 -080016
17
18SimpleIndex = namedtuple('SimpleIndex', 'header packages')
19
20
21class InstallDebugSymsTest(cros_test_lib.MockTestCase):
22 """Test the parsing of package index"""
23
24 def setUp(self):
25 self.local_binhosts = ['/build/something/packages/',
26 'file:///build/somethingelse/packages',
27 'file://localhost/build/another/packages']
28
29 self.remote_binhosts = ['http://domain.com/binhost',
30 'gs://chromeos-stuff/binhost']
31
32 def testGetLocalPackageIndex(self):
33 """Check that local binhosts are fetched correctly."""
Mike Frysinger80de5012019-08-01 14:10:53 -040034 self.PatchObject(cros_install_debug_syms.binpkg, 'GrabLocalPackageIndex',
Bertrand SIMONNET1e146e52014-12-11 14:11:56 -080035 return_value=SimpleIndex({}, {}))
36 self.PatchObject(cros_install_debug_syms.os.path, 'isdir',
37 return_value=True)
38 for binhost in self.local_binhosts:
39 cros_install_debug_syms.GetPackageIndex(binhost)
40
41 def testGetRemotePackageIndex(self):
42 """Check that remote binhosts are fetched correctly."""
Mike Frysinger80de5012019-08-01 14:10:53 -040043 self.PatchObject(cros_install_debug_syms.binpkg, 'GrabRemotePackageIndex',
Bertrand SIMONNET1e146e52014-12-11 14:11:56 -080044 return_value=SimpleIndex({}, {}))
45 for binhost in self.remote_binhosts:
46 cros_install_debug_syms.GetPackageIndex(binhost)
47
48 def testListRemoteBinhost(self):
49 """Check that urls are generated correctly for remote binhosts."""
50 chaps_cpv = 'chromeos-base/chaps-0-r2'
51 metrics_cpv = 'chromeos-base/metrics-0-r4'
52
53 index = SimpleIndex({}, [{'CPV': 'chromeos-base/shill-0-r1'},
54 {'CPV': chaps_cpv,
55 'DEBUG_SYMBOLS': 'yes'},
56 {'CPV': metrics_cpv,
57 'DEBUG_SYMBOLS': 'yes',
58 'PATH': 'path/to/binpkg.tbz2'}])
59 self.PatchObject(cros_install_debug_syms, 'GetPackageIndex',
60 return_value=index)
61
62 for binhost in self.remote_binhosts:
63 expected = {chaps_cpv: os.path.join(binhost, chaps_cpv + '.debug.tbz2'),
64 metrics_cpv: os.path.join(binhost,
65 'path/to/binpkg.debug.tbz2')}
Mike Frysinger2d589a12019-08-25 14:15:12 -040066 self.assertEqual(cros_install_debug_syms.ListBinhost(binhost), expected)
Bertrand SIMONNET1e146e52014-12-11 14:11:56 -080067
68 def testListRemoteBinhostWithURI(self):
69 """Check that urls are generated correctly when URI is defined."""
70 index = SimpleIndex({'URI': 'gs://chromeos-prebuilts'},
71 [{'CPV': 'chromeos-base/shill-0-r1',
72 'DEBUG_SYMBOLS': 'yes',
73 'PATH': 'amd64-generic/paladin1234/shill-0-r1.tbz2'}])
74 self.PatchObject(cros_install_debug_syms, 'GetPackageIndex',
75 return_value=index)
76
77 binhost = 'gs://chromeos-prebuilts/gizmo-paladin/'
78 debug_symbols_url = ('gs://chromeos-prebuilts/amd64-generic'
79 '/paladin1234/shill-0-r1.debug.tbz2')
Mike Frysinger2d589a12019-08-25 14:15:12 -040080 self.assertEqual(cros_install_debug_syms.ListBinhost(binhost),
81 {'chromeos-base/shill-0-r1': debug_symbols_url})
Mike Frysinger8e99b372019-12-05 19:05:02 -050082
83
84class InstallArgsTest(cros_test_lib.MockTestCase):
85 """Test InstallArgs utility funcs."""
86
87 def testListInstallArgs(self):
88 """Check ListInstallArgs behavior."""
89 parser = cros_install_debug_syms.GetParser()
90 opts = parser.parse_args(['--board', 'betty', 'sys-fs/fuse'])
91 self.PatchObject(cros_install_debug_syms, 'GetInstallArgs', return_value=[
92 ('a/b-1', 'gs://bucket/b-1.tbz2'),
93 ('c/d-1', 'gs://bucket/d-1.tbz2'),
94 ])
95 with outcap.OutputCapturer() as cap:
96 cros_install_debug_syms.ListInstallArgs(opts, '/foo')
97 self.assertEqual('a/b-1 gs://bucket/b-1.tbz2\nc/d-1 gs://bucket/d-1.tbz2\n',
98 cap.GetStdout())
99
100 def testGetInstallArgsList(self):
101 """Check GetInstallArgsList behavior."""
102 stdout = ('sys-apps/which-2.21 gs://bucket/board/which-2.21.debug.tbz2\n'
103 'dev-libs/foo-1-r1 gs://bucket/board/foo-1-r1.debug.tbz2\n')
104 rc = self.StartPatcher(cros_test_lib.RunCommandMock())
105 rc.AddCmdResult(cmd=['foo', '--list'], stdout=stdout)
106 self.assertEqual(
107 [['sys-apps/which-2.21', 'gs://bucket/board/which-2.21.debug.tbz2'],
108 ['dev-libs/foo-1-r1', 'gs://bucket/board/foo-1-r1.debug.tbz2']],
109 cros_install_debug_syms.GetInstallArgsList(['foo']))