Reland "AndroidService: Refactor uprev and unpin endpoints."
This is a reland of f878992e96bd45cd5c42fc55a19b7c338276aa8a
The uprev script doesn't always uprev the package, fix the
commands.py implementation to handle the no-op case.
Original change's description:
> AndroidService: Refactor uprev and unpin endpoints.
>
> The previous refactor caused errors, and was too out of date to
> reland. Reimplemented in new CL with fixes and updates.
>
> BUG=chromium:956244, chromium:982121
> TEST=run_tests
> TEST=android pfq tryjob
>
> Change-Id: I1dc2aacfa68112d3b190d90eeb91e2db5aeb8674
> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/1753024
> Tested-by: Alex Klein <saklein@chromium.org>
> Commit-Queue: Alex Klein <saklein@chromium.org>
> Reviewed-by: David Burger <dburger@chromium.org>
BUG=chromium:956244, chromium:982121
TEST=run_tests
TEST=android pfq tryjob
Change-Id: Ie7a5a6d4997eb74624ea0909f812fe7a441930ea
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/1762279
Tested-by: Alex Klein <saklein@chromium.org>
Auto-Submit: Alex Klein <saklein@chromium.org>
Reviewed-by: David Burger <dburger@chromium.org>
Commit-Queue: Alex Klein <saklein@chromium.org>
diff --git a/api/controller/android_unittest.py b/api/controller/android_unittest.py
index 59f2342..dee7b35 100644
--- a/api/controller/android_unittest.py
+++ b/api/controller/android_unittest.py
@@ -7,79 +7,80 @@
from __future__ import print_function
+import mock
+
from chromite.api import api_config
from chromite.api.controller import android
from chromite.api.gen.chromite.api import android_pb2
from chromite.api.gen.chromiumos import common_pb2
-# TODO(crbug/904939): implement service/android.py
-from chromite.cbuildbot import commands
from chromite.lib import constants
from chromite.lib import cros_build_lib
from chromite.lib import cros_test_lib
from chromite.lib import osutils
+from chromite.lib.build_target_util import BuildTarget
+from chromite.service import packages
+
class MarkStableTest(cros_test_lib.MockTestCase, api_config.ApiConfigMixin):
"""Unittests for MarkStable."""
def setUp(self):
- self.command = self.PatchObject(commands, 'MarkAndroidAsStable')
+ self.uprev = self.PatchObject(packages, 'uprev_android')
self.input_proto = android_pb2.MarkStableRequest()
self.input_proto.tracking_branch = 'tracking-branch'
self.input_proto.package_name = 'android-package-name'
self.input_proto.android_build_branch = 'android_build_branch'
- self.board1 = self.input_proto.boards.add()
- self.board1.name = 'board1'
- self.board2 = self.input_proto.boards.add()
- self.board2.name = 'board2'
+ self.input_proto.build_targets.add().name = 'foo'
+ self.input_proto.build_targets.add().name = 'bar'
+
+ self.build_targets = [BuildTarget('foo'), BuildTarget('bar')]
self.response = android_pb2.MarkStableResponse()
def testValidateOnly(self):
"""Sanity check that a validate only call does not execute any logic."""
- patch = self.PatchObject(commands, 'MarkAndroidAsStable')
-
android.MarkStable(self.input_proto, self.response,
self.validate_only_config)
- patch.assert_not_called()
+ self.uprev.assert_not_called()
def testFailsIfTrackingBranchMissing(self):
"""Fails if tracking_branch is missing."""
self.input_proto.tracking_branch = ''
with self.assertRaises(cros_build_lib.DieSystemExit):
android.MarkStable(self.input_proto, self.response, self.api_config)
- self.command.assert_not_called()
+ self.uprev.assert_not_called()
def testFailsIfPackageNameMissing(self):
"""Fails if package_name is missing."""
self.input_proto.package_name = ''
with self.assertRaises(cros_build_lib.DieSystemExit):
android.MarkStable(self.input_proto, self.response, self.api_config)
- self.command.assert_not_called()
+ self.uprev.assert_not_called()
def testFailsIfAndroidBuildBranchMissing(self):
"""Fails if android_build_branch is missing."""
self.input_proto.android_build_branch = ''
with self.assertRaises(cros_build_lib.DieSystemExit):
android.MarkStable(self.input_proto, self.response, self.api_config)
- self.command.assert_not_called()
+ self.uprev.assert_not_called()
def testCallsCommandCorrectly(self):
"""Test that commands.MarkAndroidAsStable is called correctly."""
self.input_proto.android_version = 'android-version'
self.input_proto.android_gts_build_branch = 'gts-branch'
- self.command.return_value = 'cat/android-1.2.3'
+ self.uprev.return_value = 'cat/android-1.2.3'
atom = common_pb2.PackageInfo()
atom.category = 'cat'
atom.package_name = 'android'
atom.version = '1.2.3'
android.MarkStable(self.input_proto, self.response, self.api_config)
- self.command.assert_called_once_with(
- buildroot=self.input_proto.buildroot,
+ self.uprev.assert_called_once_with(
tracking_branch=self.input_proto.tracking_branch,
android_package=self.input_proto.package_name,
android_build_branch=self.input_proto.android_build_branch,
- boards=self.input_proto.boards,
+ chroot=mock.ANY,
+ build_targets=self.build_targets,
android_version=self.input_proto.android_version,
android_gts_build_branch=self.input_proto.android_gts_build_branch)
self.assertEqual(self.response.android_atom, atom)
@@ -90,14 +91,14 @@
"""Test that early exit is handled correctly."""
self.input_proto.android_version = 'android-version'
self.input_proto.android_gts_build_branch = 'gts-branch'
- self.command.return_value = ''
+ self.uprev.return_value = ''
android.MarkStable(self.input_proto, self.response, self.api_config)
- self.command.assert_called_once_with(
- buildroot=self.input_proto.buildroot,
+ self.uprev.assert_called_once_with(
tracking_branch=self.input_proto.tracking_branch,
android_package=self.input_proto.package_name,
android_build_branch=self.input_proto.android_build_branch,
- boards=self.input_proto.boards,
+ chroot=mock.ANY,
+ build_targets=self.build_targets,
android_version=self.input_proto.android_version,
android_gts_build_branch=self.input_proto.android_gts_build_branch)
self.assertEqual(self.response.status,
@@ -107,18 +108,18 @@
"""Test that pinned error is handled correctly."""
self.input_proto.android_version = 'android-version'
self.input_proto.android_gts_build_branch = 'gts-branch'
- self.command.side_effect = commands.AndroidIsPinnedUprevError('pin/xx-1.1')
+ self.uprev.side_effect = packages.AndroidIsPinnedUprevError('pin/xx-1.1')
atom = common_pb2.PackageInfo()
atom.category = 'pin'
atom.package_name = 'xx'
atom.version = '1.1'
android.MarkStable(self.input_proto, self.response, self.api_config)
- self.command.assert_called_once_with(
- buildroot=self.input_proto.buildroot,
+ self.uprev.assert_called_once_with(
tracking_branch=self.input_proto.tracking_branch,
android_package=self.input_proto.package_name,
android_build_branch=self.input_proto.android_build_branch,
- boards=self.input_proto.boards,
+ chroot=mock.ANY,
+ build_targets=self.build_targets,
android_version=self.input_proto.android_version,
android_gts_build_branch=self.input_proto.android_gts_build_branch)
self.assertEqual(self.response.android_atom, atom)