blob: 15a802aa13f919d3ad0943f44b10d67ac32c8775 [file] [log] [blame]
Mike Frysingerf1ba7ad2022-09-12 05:42:57 -04001# Copyright 2019 The ChromiumOS Authors
LaMont Jones8a1644f2019-04-16 14:30:17 -06002# 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 Android operations."""
6
Mike Frysinger166fea02021-02-12 05:30:33 -05007from unittest import mock
8
Alex Klein231d2da2019-07-22 16:44:45 -06009from chromite.api import api_config
LaMont Jones8a1644f2019-04-16 14:30:17 -060010from chromite.api.controller import android
11from chromite.api.gen.chromite.api import android_pb2
12from chromite.api.gen.chromiumos import common_pb2
Mike Frysinger40ffb532021-02-12 07:36:08 -050013from chromite.lib import build_target_lib
LaMont Jones8a1644f2019-04-16 14:30:17 -060014from chromite.lib import constants
15from chromite.lib import cros_build_lib
16from chromite.lib import cros_test_lib
17from chromite.lib import osutils
Shao-Chuan Lee01dee222021-04-09 15:28:08 +090018from chromite.service import android as service_android
Alex Klein4de25e82019-08-05 15:58:39 -060019from chromite.service import packages
20
LaMont Jones8a1644f2019-04-16 14:30:17 -060021
Shao-Chuan Lee01dee222021-04-09 15:28:08 +090022class GetLatestBuildTest(cros_test_lib.MockTestCase, api_config.ApiConfigMixin):
Alex Klein1699fab2022-09-08 08:46:06 -060023 """Unittests for GetLatestBuild."""
Shao-Chuan Lee01dee222021-04-09 15:28:08 +090024
Alex Klein1699fab2022-09-08 08:46:06 -060025 def setUp(self):
26 self._mock = self.PatchObject(service_android, "GetLatestBuild")
27 self._mock.return_value = ("7123456", {})
Alex Klein1699fab2022-09-08 08:46:06 -060028 self._output_proto = android_pb2.GetLatestBuildResponse()
Shao-Chuan Lee01dee222021-04-09 15:28:08 +090029
Shao-Chuan Lee81d3c432022-11-15 12:44:37 +090030 def _GetRequest(self, android_build_branch=None, android_package=None):
Alex Klein1699fab2022-09-08 08:46:06 -060031 req = android_pb2.GetLatestBuildRequest()
Shao-Chuan Lee81d3c432022-11-15 12:44:37 +090032 if android_build_branch is not None:
33 req.android_build_branch = android_build_branch
Alex Klein1699fab2022-09-08 08:46:06 -060034 if android_package is not None:
35 req.android_package = android_package
36 return req
Shao-Chuan Lee6e8784a2021-05-13 09:34:46 +090037
Alex Klein1699fab2022-09-08 08:46:06 -060038 def testValidateOnly(self):
39 """Test that a validate only call does not execute any logic."""
40 req = self._GetRequest(android_package="android-package")
41 android.GetLatestBuild(
42 req, self._output_proto, self.validate_only_config
43 )
44 self._mock.assert_not_called()
Shao-Chuan Lee01dee222021-04-09 15:28:08 +090045
Alex Klein1699fab2022-09-08 08:46:06 -060046 def testMockCall(self):
Alex Kleinab87ceb2023-01-24 12:00:51 -070047 """Test a mock call does not execute logic, returns mocked value."""
Alex Klein1699fab2022-09-08 08:46:06 -060048 req = self._GetRequest(android_package="android-package")
49 android.GetLatestBuild(req, self._output_proto, self.mock_call_config)
50 self._mock.assert_not_called()
51 self.assertEqual(self._output_proto.android_version, "7123456")
Shao-Chuan Lee01dee222021-04-09 15:28:08 +090052
Shao-Chuan Lee81d3c432022-11-15 12:44:37 +090053 def testFailsIfBranchAndPackageMissing(self):
Alex Kleinab87ceb2023-01-24 12:00:51 -070054 """Fails if android_build_branch and android_package are missing."""
Alex Klein1699fab2022-09-08 08:46:06 -060055 req = self._GetRequest()
56 with self.assertRaises(cros_build_lib.DieSystemExit):
57 android.GetLatestBuild(req, self._output_proto, self.api_config)
58 self._mock.assert_not_called()
Shao-Chuan Lee01dee222021-04-09 15:28:08 +090059
Shao-Chuan Lee81d3c432022-11-15 12:44:37 +090060 def testFailsIfPackageMissing(self):
61 """Fails if android_package is missing."""
62 req = self._GetRequest(android_build_branch="android-branch")
63 with self.assertRaises(cros_build_lib.DieSystemExit):
64 android.GetLatestBuild(req, self._output_proto, self.api_config)
65 self._mock.assert_not_called()
66
67 def testPackageSpecified(self):
68 """Test calling with Android package specified."""
Alex Klein1699fab2022-09-08 08:46:06 -060069 req = self._GetRequest(android_package="android-package")
70 android.GetLatestBuild(req, self._output_proto, self.api_config)
Shao-Chuan Lee81d3c432022-11-15 12:44:37 +090071 self.assertEqual(self._output_proto.android_version, "7123456")
72
73 def testBranchAndPackageSpecified(self):
74 """Test calling with both Android branch and package specified."""
75 req = self._GetRequest(
76 android_build_branch="android-branch",
77 android_package="android-package",
78 )
79 android.GetLatestBuild(req, self._output_proto, self.api_config)
80 self._mock.assert_called_once_with(
81 "android-package", build_branch="android-branch"
82 )
Alex Klein1699fab2022-09-08 08:46:06 -060083 self.assertEqual(self._output_proto.android_version, "7123456")
Shao-Chuan Lee01dee222021-04-09 15:28:08 +090084
85
Alex Klein231d2da2019-07-22 16:44:45 -060086class MarkStableTest(cros_test_lib.MockTestCase, api_config.ApiConfigMixin):
Alex Klein1699fab2022-09-08 08:46:06 -060087 """Unittests for MarkStable."""
LaMont Jones8a1644f2019-04-16 14:30:17 -060088
Alex Klein1699fab2022-09-08 08:46:06 -060089 def setUp(self):
90 self.uprev = self.PatchObject(packages, "uprev_android")
LaMont Jones8a1644f2019-04-16 14:30:17 -060091
Alex Klein1699fab2022-09-08 08:46:06 -060092 self.input_proto = android_pb2.MarkStableRequest()
93 self.input_proto.package_name = "android-package-name"
94 self.input_proto.android_build_branch = "android_build_branch"
95 self.input_proto.android_version = "android-version"
96 self.input_proto.build_targets.add().name = "foo"
97 self.input_proto.build_targets.add().name = "bar"
98 self.input_proto.skip_commit = True
Alex Klein4de25e82019-08-05 15:58:39 -060099
Alex Klein1699fab2022-09-08 08:46:06 -0600100 self.build_targets = [
101 build_target_lib.BuildTarget("foo"),
102 build_target_lib.BuildTarget("bar"),
103 ]
LaMont Jones8a1644f2019-04-16 14:30:17 -0600104
Alex Klein1699fab2022-09-08 08:46:06 -0600105 self.response = android_pb2.MarkStableResponse()
Alex Klein231d2da2019-07-22 16:44:45 -0600106
Alex Klein1699fab2022-09-08 08:46:06 -0600107 def testValidateOnly(self):
Alex Kleinab87ceb2023-01-24 12:00:51 -0700108 """Verify a validate-only call does not execute any logic."""
Alex Klein1699fab2022-09-08 08:46:06 -0600109 android.MarkStable(
110 self.input_proto, self.response, self.validate_only_config
111 )
112 self.uprev.assert_not_called()
Alex Klein231d2da2019-07-22 16:44:45 -0600113
Alex Klein1699fab2022-09-08 08:46:06 -0600114 def testMockCall(self):
Alex Kleinab87ceb2023-01-24 12:00:51 -0700115 """Test a mock call does not execute logic, returns mocked value."""
Alex Klein1699fab2022-09-08 08:46:06 -0600116 android.MarkStable(
117 self.input_proto, self.response, self.mock_call_config
118 )
119 self.uprev.assert_not_called()
120 self.assertEqual(
121 self.response.status, android_pb2.MARK_STABLE_STATUS_SUCCESS
122 )
123 self.assertEqual(self.response.android_atom.category, "category")
124 self.assertEqual(
125 self.response.android_atom.package_name, "android-package-name"
126 )
127 self.assertEqual(self.response.android_atom.version, "1.2")
Michael Mortensen25626442019-11-22 10:06:59 -0700128
Alex Klein1699fab2022-09-08 08:46:06 -0600129 def testFailsIfPackageNameMissing(self):
130 """Fails if package_name is missing."""
131 self.input_proto.package_name = ""
132 with self.assertRaises(cros_build_lib.DieSystemExit):
133 android.MarkStable(self.input_proto, self.response, self.api_config)
134 self.uprev.assert_not_called()
LaMont Jones8a1644f2019-04-16 14:30:17 -0600135
Alex Klein1699fab2022-09-08 08:46:06 -0600136 def testCallsCommandCorrectly(self):
Mike Frysinger65469e82023-06-22 23:04:42 -0400137 """Test that packages.uprev_android is called correctly."""
Alex Klein1699fab2022-09-08 08:46:06 -0600138 self.uprev.return_value = packages.UprevAndroidResult(
139 revved=True, android_atom="cat/android-1.2.3"
140 )
141 atom = common_pb2.PackageInfo()
142 atom.category = "cat"
143 atom.package_name = "android"
144 atom.version = "1.2.3"
145 android.MarkStable(self.input_proto, self.response, self.api_config)
146 self.uprev.assert_called_once_with(
147 android_package=self.input_proto.package_name,
148 chroot=mock.ANY,
149 build_targets=self.build_targets,
150 android_build_branch=self.input_proto.android_build_branch,
151 android_version=self.input_proto.android_version,
152 skip_commit=self.input_proto.skip_commit,
153 )
154 self.assertEqual(self.response.android_atom, atom)
155 self.assertEqual(
156 self.response.status, android_pb2.MARK_STABLE_STATUS_SUCCESS
157 )
LaMont Jones8a1644f2019-04-16 14:30:17 -0600158
Alex Klein1699fab2022-09-08 08:46:06 -0600159 def testHandlesEarlyExit(self):
160 """Test that early exit is handled correctly."""
161 self.uprev.return_value = packages.UprevAndroidResult(revved=False)
162 android.MarkStable(self.input_proto, self.response, self.api_config)
163 self.uprev.assert_called_once_with(
164 android_package=self.input_proto.package_name,
165 chroot=mock.ANY,
166 build_targets=self.build_targets,
167 android_build_branch=self.input_proto.android_build_branch,
168 android_version=self.input_proto.android_version,
169 skip_commit=self.input_proto.skip_commit,
170 )
171 self.assertEqual(
172 self.response.status, android_pb2.MARK_STABLE_STATUS_EARLY_EXIT
173 )
LaMont Jones8a1644f2019-04-16 14:30:17 -0600174
Alex Klein1699fab2022-09-08 08:46:06 -0600175 def testHandlesPinnedUprevError(self):
176 """Test that pinned error is handled correctly."""
177 self.uprev.side_effect = packages.AndroidIsPinnedUprevError(
178 "pin/xx-1.1"
179 )
180 atom = common_pb2.PackageInfo()
181 atom.category = "pin"
182 atom.package_name = "xx"
183 atom.version = "1.1"
184 android.MarkStable(self.input_proto, self.response, self.api_config)
185 self.uprev.assert_called_once_with(
186 android_package=self.input_proto.package_name,
187 chroot=mock.ANY,
188 build_targets=self.build_targets,
189 android_build_branch=self.input_proto.android_build_branch,
190 android_version=self.input_proto.android_version,
191 skip_commit=self.input_proto.skip_commit,
192 )
193 self.assertEqual(self.response.android_atom, atom)
194 self.assertEqual(
195 self.response.status, android_pb2.MARK_STABLE_STATUS_PINNED
196 )
LaMont Jones8a1644f2019-04-16 14:30:17 -0600197
198
Alex Klein231d2da2019-07-22 16:44:45 -0600199class UnpinVersionTest(cros_test_lib.MockTestCase, api_config.ApiConfigMixin):
Alex Klein1699fab2022-09-08 08:46:06 -0600200 """Unittests for UnpinVersion."""
LaMont Jones8a1644f2019-04-16 14:30:17 -0600201
Alex Klein1699fab2022-09-08 08:46:06 -0600202 def testCallsUnlink(self):
203 """SetAndroid calls service with correct args."""
204 safeunlink = self.PatchObject(osutils, "SafeUnlink")
205 self.PatchObject(constants, "_FindSourceRoot", return_value="SRCROOT")
LaMont Jones8a1644f2019-04-16 14:30:17 -0600206
Alex Kleinab87ceb2023-01-24 12:00:51 -0700207 # This has the side effect of making sure that input and output proto
208 # are not actually used.
Alex Klein1699fab2022-09-08 08:46:06 -0600209 android.UnpinVersion(None, None, self.api_config)
210 safeunlink.assert_called_once_with(android.ANDROIDPIN_MASK_PATH)
Alex Klein231d2da2019-07-22 16:44:45 -0600211
Alex Klein1699fab2022-09-08 08:46:06 -0600212 def testValidateOnly(self):
Alex Kleinab87ceb2023-01-24 12:00:51 -0700213 """Verify a validate-only call does not execute any logic."""
Alex Klein1699fab2022-09-08 08:46:06 -0600214 safeunlink = self.PatchObject(osutils, "SafeUnlink")
Alex Klein231d2da2019-07-22 16:44:45 -0600215
Alex Klein1699fab2022-09-08 08:46:06 -0600216 android.UnpinVersion(None, None, self.validate_only_config)
217 safeunlink.assert_not_called()
Michael Mortensen25626442019-11-22 10:06:59 -0700218
Alex Klein1699fab2022-09-08 08:46:06 -0600219 def testMockCall(self):
220 """Test that a mock call does not execute logic."""
221 safeunlink = self.PatchObject(osutils, "SafeUnlink")
Michael Mortensen25626442019-11-22 10:06:59 -0700222
Alex Klein1699fab2022-09-08 08:46:06 -0600223 android.UnpinVersion(None, None, self.mock_call_config)
224 safeunlink.assert_not_called()
225 # android.UnpinVersion does not modify the response.
Shao-Chuan Leeddcca812021-12-10 15:11:16 +0900226
227
228class WriteLKGBTest(cros_test_lib.MockTestCase, api_config.ApiConfigMixin):
Alex Klein1699fab2022-09-08 08:46:06 -0600229 """Unittests for WriteLKGB."""
Shao-Chuan Leeddcca812021-12-10 15:11:16 +0900230
Alex Klein1699fab2022-09-08 08:46:06 -0600231 def setUp(self):
232 self._output_proto = android_pb2.WriteLKGBResponse()
Shao-Chuan Leeddcca812021-12-10 15:11:16 +0900233
Shao-Chuan Lee293389c2023-01-20 17:44:35 +0900234 self.PatchObject(
235 service_android,
236 "GetAndroidBranchForPackage",
237 return_value="android-branch",
238 )
239 self.PatchObject(
240 service_android,
241 "GetAndroidPackageDir",
242 return_value="android-package-dir",
243 )
244
Shao-Chuan Leee0b9ba92023-01-18 19:35:36 +0900245 # Mock milestone for FindRuntimeArtifactsPin().
246 self.PatchObject(
247 packages,
248 "determine_milestone_version",
249 return_value="999",
250 )
251
Alex Klein1699fab2022-09-08 08:46:06 -0600252 def testValidateOnly(self):
253 """Test that a validate only call does not execute any logic."""
254 mock_write_lkgb = self.PatchObject(service_android, "WriteLKGB")
Shao-Chuan Leeddcca812021-12-10 15:11:16 +0900255
Alex Klein1699fab2022-09-08 08:46:06 -0600256 req = android_pb2.WriteLKGBRequest(
257 android_package="android-package", android_version="android-version"
258 )
259 android.WriteLKGB(req, self._output_proto, self.validate_only_config)
Shao-Chuan Leeddcca812021-12-10 15:11:16 +0900260
Alex Klein1699fab2022-09-08 08:46:06 -0600261 mock_write_lkgb.assert_not_called()
Shao-Chuan Leeddcca812021-12-10 15:11:16 +0900262
Alex Klein1699fab2022-09-08 08:46:06 -0600263 def testMockCall(self):
Alex Kleinab87ceb2023-01-24 12:00:51 -0700264 """Test a mock call does not execute logic, returns mocked value."""
Alex Klein1699fab2022-09-08 08:46:06 -0600265 mock_write_lkgb = self.PatchObject(service_android, "WriteLKGB")
Shao-Chuan Leeddcca812021-12-10 15:11:16 +0900266
Alex Klein1699fab2022-09-08 08:46:06 -0600267 req = android_pb2.WriteLKGBRequest(
268 android_package="android-package", android_version="android-version"
269 )
270 android.WriteLKGB(req, self._output_proto, self.mock_call_config)
Shao-Chuan Leeddcca812021-12-10 15:11:16 +0900271
Alex Klein1699fab2022-09-08 08:46:06 -0600272 mock_write_lkgb.assert_not_called()
273 self.assertSequenceEqual(
274 self._output_proto.modified_files, ["fake_file"]
275 )
Shao-Chuan Leeddcca812021-12-10 15:11:16 +0900276
Alex Klein1699fab2022-09-08 08:46:06 -0600277 def testFailsIfAndroidPackageMissing(self):
278 """Fails if android_package is missing."""
279 req = android_pb2.WriteLKGBRequest(android_version="android-version")
280 with self.assertRaises(cros_build_lib.DieSystemExit):
281 android.WriteLKGB(req, self._output_proto, self.api_config)
Shao-Chuan Leeddcca812021-12-10 15:11:16 +0900282
Alex Klein1699fab2022-09-08 08:46:06 -0600283 def testFailsIfAndroidVersionMissing(self):
284 """Fails if android_version is missing."""
285 req = android_pb2.WriteLKGBRequest(android_package="android-package")
286 with self.assertRaises(cros_build_lib.DieSystemExit):
287 android.WriteLKGB(req, self._output_proto, self.api_config)
Shao-Chuan Leeddcca812021-12-10 15:11:16 +0900288
Alex Klein1699fab2022-09-08 08:46:06 -0600289 def testSuccess(self):
290 """Successful request."""
291 mock_read_lkgb = self.PatchObject(
Shao-Chuan Leee0b9ba92023-01-18 19:35:36 +0900292 service_android,
293 "ReadLKGB",
Shao-Chuan Lee293389c2023-01-20 17:44:35 +0900294 return_value=dict(build_id="old-version", branch="android-branch"),
Alex Klein1699fab2022-09-08 08:46:06 -0600295 )
296 mock_write_lkgb = self.PatchObject(
297 service_android, "WriteLKGB", return_value="mock_file"
298 )
299 self.PatchObject(
300 service_android,
Shao-Chuan Leee0b9ba92023-01-18 19:35:36 +0900301 "FindRuntimeArtifactsPin",
302 return_value=None,
303 )
Shao-Chuan Leeddcca812021-12-10 15:11:16 +0900304
Alex Klein1699fab2022-09-08 08:46:06 -0600305 req = android_pb2.WriteLKGBRequest(
306 android_package="android-package", android_version="android-version"
307 )
308 android.WriteLKGB(req, self._output_proto, self.api_config)
Shao-Chuan Leeddcca812021-12-10 15:11:16 +0900309
Alex Klein1699fab2022-09-08 08:46:06 -0600310 mock_read_lkgb.assert_called_once_with("android-package-dir")
311 mock_write_lkgb.assert_called_once_with(
Shao-Chuan Leee0b9ba92023-01-18 19:35:36 +0900312 "android-package-dir",
Shao-Chuan Lee293389c2023-01-20 17:44:35 +0900313 dict(build_id="android-version", branch="android-branch"),
Alex Klein1699fab2022-09-08 08:46:06 -0600314 )
315 self.assertSequenceEqual(
316 self._output_proto.modified_files, ["mock_file"]
317 )
Shao-Chuan Leeddcca812021-12-10 15:11:16 +0900318
Alex Klein1699fab2022-09-08 08:46:06 -0600319 def testSameVersion(self):
320 """Nothing is modified if LKGB is already the same version."""
321 mock_read_lkgb = self.PatchObject(
Shao-Chuan Leee0b9ba92023-01-18 19:35:36 +0900322 service_android,
323 "ReadLKGB",
324 return_value=dict(
325 build_id="android-version",
Shao-Chuan Lee293389c2023-01-20 17:44:35 +0900326 branch="android-branch",
Shao-Chuan Leee0b9ba92023-01-18 19:35:36 +0900327 runtime_artifacts_pin="runtime-artifacts-pin",
328 ),
Alex Klein1699fab2022-09-08 08:46:06 -0600329 )
Shao-Chuan Lee293389c2023-01-20 17:44:35 +0900330 mock_write_lkgb = self.PatchObject(
Alex Klein1699fab2022-09-08 08:46:06 -0600331 service_android,
Shao-Chuan Lee293389c2023-01-20 17:44:35 +0900332 "WriteLKGB",
333 side_effect=Exception("shouldn't get called"),
Alex Klein1699fab2022-09-08 08:46:06 -0600334 )
Shao-Chuan Leee0b9ba92023-01-18 19:35:36 +0900335 self.PatchObject(
336 service_android,
337 "FindRuntimeArtifactsPin",
338 return_value="runtime-artifacts-pin",
339 )
Shao-Chuan Leeddcca812021-12-10 15:11:16 +0900340
Alex Klein1699fab2022-09-08 08:46:06 -0600341 req = android_pb2.WriteLKGBRequest(
342 android_package="android-package", android_version="android-version"
343 )
344 android.WriteLKGB(req, self._output_proto, self.api_config)
Shao-Chuan Leeddcca812021-12-10 15:11:16 +0900345
Alex Klein1699fab2022-09-08 08:46:06 -0600346 mock_read_lkgb.assert_called_once_with("android-package-dir")
347 mock_write_lkgb.assert_not_called()
348 self.assertSequenceEqual(self._output_proto.modified_files, [])
Shao-Chuan Leeddcca812021-12-10 15:11:16 +0900349
Alex Klein1699fab2022-09-08 08:46:06 -0600350 def testMissingLKGB(self):
351 """Proceed if LKGB file is currently missing."""
352 mock_read_lkgb = self.PatchObject(
353 service_android,
354 "ReadLKGB",
355 side_effect=service_android.MissingLKGBError(),
356 )
357 mock_write_lkgb = self.PatchObject(
358 service_android, "WriteLKGB", return_value="mock_file"
359 )
360 self.PatchObject(
361 service_android,
Shao-Chuan Leee0b9ba92023-01-18 19:35:36 +0900362 "FindRuntimeArtifactsPin",
363 return_value=None,
364 )
Shao-Chuan Leeddcca812021-12-10 15:11:16 +0900365
Alex Klein1699fab2022-09-08 08:46:06 -0600366 req = android_pb2.WriteLKGBRequest(
367 android_package="android-package", android_version="android-version"
368 )
369 android.WriteLKGB(req, self._output_proto, self.api_config)
Shao-Chuan Leeddcca812021-12-10 15:11:16 +0900370
Alex Klein1699fab2022-09-08 08:46:06 -0600371 mock_read_lkgb.assert_called_once_with("android-package-dir")
372 mock_write_lkgb.assert_called_once_with(
Shao-Chuan Leee0b9ba92023-01-18 19:35:36 +0900373 "android-package-dir",
Shao-Chuan Lee293389c2023-01-20 17:44:35 +0900374 dict(build_id="android-version", branch="android-branch"),
Alex Klein1699fab2022-09-08 08:46:06 -0600375 )
376 self.assertSequenceEqual(
377 self._output_proto.modified_files, ["mock_file"]
378 )
Shao-Chuan Leeddcca812021-12-10 15:11:16 +0900379
Alex Klein1699fab2022-09-08 08:46:06 -0600380 def testInvalidLKGB(self):
381 """Proceed if LKGB file currently contains invalid content."""
382 mock_read_lkgb = self.PatchObject(
383 service_android,
384 "ReadLKGB",
385 side_effect=service_android.InvalidLKGBError(),
386 )
387 mock_write_lkgb = self.PatchObject(
388 service_android, "WriteLKGB", return_value="mock_file"
389 )
390 self.PatchObject(
391 service_android,
Shao-Chuan Leee0b9ba92023-01-18 19:35:36 +0900392 "FindRuntimeArtifactsPin",
393 return_value=None,
394 )
Shao-Chuan Leeddcca812021-12-10 15:11:16 +0900395
Alex Klein1699fab2022-09-08 08:46:06 -0600396 req = android_pb2.WriteLKGBRequest(
397 android_package="android-package", android_version="android-version"
398 )
399 android.WriteLKGB(req, self._output_proto, self.api_config)
Shao-Chuan Leeddcca812021-12-10 15:11:16 +0900400
Alex Klein1699fab2022-09-08 08:46:06 -0600401 mock_read_lkgb.assert_called_once_with("android-package-dir")
402 mock_write_lkgb.assert_called_once_with(
Shao-Chuan Leee0b9ba92023-01-18 19:35:36 +0900403 "android-package-dir",
Shao-Chuan Lee293389c2023-01-20 17:44:35 +0900404 dict(build_id="android-version", branch="android-branch"),
Shao-Chuan Leee0b9ba92023-01-18 19:35:36 +0900405 )
406 self.assertSequenceEqual(
407 self._output_proto.modified_files, ["mock_file"]
408 )
409
410 def testNewRuntimeArtifactsPin(self):
411 """Proceed if a new runtime artifacts pin is found."""
412 mock_read_lkgb = self.PatchObject(
413 service_android,
414 "ReadLKGB",
415 return_value=dict(build_id="android-version"),
416 )
417 mock_write_lkgb = self.PatchObject(
418 service_android,
419 "WriteLKGB",
420 return_value="mock_file",
421 )
422 self.PatchObject(
423 service_android,
Shao-Chuan Leee0b9ba92023-01-18 19:35:36 +0900424 "FindRuntimeArtifactsPin",
425 return_value="runtime-artifacts-pin",
426 )
427
428 req = android_pb2.WriteLKGBRequest(
429 android_package="android-package", android_version="android-version"
430 )
431 android.WriteLKGB(req, self._output_proto, self.api_config)
432
433 mock_read_lkgb.assert_called_once_with("android-package-dir")
434 mock_write_lkgb.assert_called_once_with(
435 "android-package-dir",
436 dict(
437 build_id="android-version",
Shao-Chuan Lee293389c2023-01-20 17:44:35 +0900438 branch="android-branch",
Shao-Chuan Leee0b9ba92023-01-18 19:35:36 +0900439 runtime_artifacts_pin="runtime-artifacts-pin",
440 ),
Alex Klein1699fab2022-09-08 08:46:06 -0600441 )
442 self.assertSequenceEqual(
443 self._output_proto.modified_files, ["mock_file"]
444 )