blob: bbb1f97ab12bb685cefbe8a2212536295541ee16 [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
Mike Frysinger6a2b0f22020-02-20 13:34:07 -050012import sys
Bertrand SIMONNET1e146e52014-12-11 14:11:56 -080013
14from chromite.lib import cros_test_lib
15from chromite.scripts import cros_install_debug_syms
Mike Frysinger8e99b372019-12-05 19:05:02 -050016from chromite.utils import outcap
Bertrand SIMONNET1e146e52014-12-11 14:11:56 -080017
18
Mike Frysinger6a2b0f22020-02-20 13:34:07 -050019assert sys.version_info >= (3, 6), 'This module requires Python 3.6+'
20
21
Bertrand SIMONNET1e146e52014-12-11 14:11:56 -080022SimpleIndex = namedtuple('SimpleIndex', 'header packages')
23
24
25class InstallDebugSymsTest(cros_test_lib.MockTestCase):
26 """Test the parsing of package index"""
27
28 def setUp(self):
29 self.local_binhosts = ['/build/something/packages/',
30 'file:///build/somethingelse/packages',
31 'file://localhost/build/another/packages']
32
33 self.remote_binhosts = ['http://domain.com/binhost',
34 'gs://chromeos-stuff/binhost']
35
36 def testGetLocalPackageIndex(self):
37 """Check that local binhosts are fetched correctly."""
Mike Frysinger80de5012019-08-01 14:10:53 -040038 self.PatchObject(cros_install_debug_syms.binpkg, 'GrabLocalPackageIndex',
Bertrand SIMONNET1e146e52014-12-11 14:11:56 -080039 return_value=SimpleIndex({}, {}))
40 self.PatchObject(cros_install_debug_syms.os.path, 'isdir',
41 return_value=True)
42 for binhost in self.local_binhosts:
43 cros_install_debug_syms.GetPackageIndex(binhost)
44
45 def testGetRemotePackageIndex(self):
46 """Check that remote binhosts are fetched correctly."""
Mike Frysinger80de5012019-08-01 14:10:53 -040047 self.PatchObject(cros_install_debug_syms.binpkg, 'GrabRemotePackageIndex',
Bertrand SIMONNET1e146e52014-12-11 14:11:56 -080048 return_value=SimpleIndex({}, {}))
49 for binhost in self.remote_binhosts:
50 cros_install_debug_syms.GetPackageIndex(binhost)
51
52 def testListRemoteBinhost(self):
53 """Check that urls are generated correctly for remote binhosts."""
54 chaps_cpv = 'chromeos-base/chaps-0-r2'
55 metrics_cpv = 'chromeos-base/metrics-0-r4'
56
57 index = SimpleIndex({}, [{'CPV': 'chromeos-base/shill-0-r1'},
58 {'CPV': chaps_cpv,
59 'DEBUG_SYMBOLS': 'yes'},
60 {'CPV': metrics_cpv,
61 'DEBUG_SYMBOLS': 'yes',
62 'PATH': 'path/to/binpkg.tbz2'}])
63 self.PatchObject(cros_install_debug_syms, 'GetPackageIndex',
64 return_value=index)
65
66 for binhost in self.remote_binhosts:
67 expected = {chaps_cpv: os.path.join(binhost, chaps_cpv + '.debug.tbz2'),
68 metrics_cpv: os.path.join(binhost,
69 'path/to/binpkg.debug.tbz2')}
Mike Frysinger2d589a12019-08-25 14:15:12 -040070 self.assertEqual(cros_install_debug_syms.ListBinhost(binhost), expected)
Bertrand SIMONNET1e146e52014-12-11 14:11:56 -080071
72 def testListRemoteBinhostWithURI(self):
73 """Check that urls are generated correctly when URI is defined."""
74 index = SimpleIndex({'URI': 'gs://chromeos-prebuilts'},
75 [{'CPV': 'chromeos-base/shill-0-r1',
76 'DEBUG_SYMBOLS': 'yes',
77 'PATH': 'amd64-generic/paladin1234/shill-0-r1.tbz2'}])
78 self.PatchObject(cros_install_debug_syms, 'GetPackageIndex',
79 return_value=index)
80
81 binhost = 'gs://chromeos-prebuilts/gizmo-paladin/'
82 debug_symbols_url = ('gs://chromeos-prebuilts/amd64-generic'
83 '/paladin1234/shill-0-r1.debug.tbz2')
Mike Frysinger2d589a12019-08-25 14:15:12 -040084 self.assertEqual(cros_install_debug_syms.ListBinhost(binhost),
85 {'chromeos-base/shill-0-r1': debug_symbols_url})
Mike Frysinger8e99b372019-12-05 19:05:02 -050086
87
88class InstallArgsTest(cros_test_lib.MockTestCase):
89 """Test InstallArgs utility funcs."""
90
91 def testListInstallArgs(self):
92 """Check ListInstallArgs behavior."""
93 parser = cros_install_debug_syms.GetParser()
94 opts = parser.parse_args(['--board', 'betty', 'sys-fs/fuse'])
95 self.PatchObject(cros_install_debug_syms, 'GetInstallArgs', return_value=[
96 ('a/b-1', 'gs://bucket/b-1.tbz2'),
97 ('c/d-1', 'gs://bucket/d-1.tbz2'),
98 ])
99 with outcap.OutputCapturer() as cap:
100 cros_install_debug_syms.ListInstallArgs(opts, '/foo')
101 self.assertEqual('a/b-1 gs://bucket/b-1.tbz2\nc/d-1 gs://bucket/d-1.tbz2\n',
102 cap.GetStdout())
103
104 def testGetInstallArgsList(self):
105 """Check GetInstallArgsList behavior."""
106 stdout = ('sys-apps/which-2.21 gs://bucket/board/which-2.21.debug.tbz2\n'
107 'dev-libs/foo-1-r1 gs://bucket/board/foo-1-r1.debug.tbz2\n')
108 rc = self.StartPatcher(cros_test_lib.RunCommandMock())
109 rc.AddCmdResult(cmd=['foo', '--list'], stdout=stdout)
110 self.assertEqual(
111 [['sys-apps/which-2.21', 'gs://bucket/board/which-2.21.debug.tbz2'],
112 ['dev-libs/foo-1-r1', 'gs://bucket/board/foo-1-r1.debug.tbz2']],
113 cros_install_debug_syms.GetInstallArgsList(['foo']))