cros deploy: don't suggest cros-workon for non-workon'able CP
http://crrev.com/c/2373849 added a new warning, but didn't restrict it
to cros-workon'able packages.
BUG=none
TEST=`cros deploy -n ${HOST} crda` -> non-workon, no warning
TEST=`cros deploy -n ${HOST} shill` -> workon, not work'ed-on,
WARNING
TEST=`cros-workon-${BOARD} start shill; cros deploy -n ${HOST} shill`,
workon, but not rebuilt --> no warning (existing bug)
TEST=`scripts/run_pytest cli/deploy_unittest.py`
Change-Id: I3b20c9867583d35d591efbf28e4fea5c91f5653e
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/2809693
Tested-by: Brian Norris <briannorris@chromium.org>
Commit-Queue: Brian Norris <briannorris@chromium.org>
Reviewed-by: Kimiyuki Onaka <kimiyuki@google.com>
Reviewed-by: Mike Frysinger <vapier@chromium.org>
diff --git a/cli/deploy_unittest.py b/cli/deploy_unittest.py
index b78b53d..bce02d0 100644
--- a/cli/deploy_unittest.py
+++ b/cli/deploy_unittest.py
@@ -19,7 +19,9 @@
from chromite.lib import build_target_lib
from chromite.lib import cros_build_lib
from chromite.lib import cros_test_lib
+from chromite.lib import osutils
from chromite.lib import remote_access
+from chromite.lib import sysroot_lib
from chromite.lib.parser import package_info
pytestmark = [cros_test_lib.pytestmark_inside_only]
@@ -306,7 +308,8 @@
self.assertEqual(num_updates, 1)
-class TestDeploy(cros_test_lib.ProgressBarTestCase):
+class TestDeploy(cros_test_lib.ProgressBarTestCase,
+ cros_test_lib.MockTempDirTestCase):
"""Test deploy.Deploy."""
@staticmethod
@@ -314,18 +317,27 @@
return ['/path/to/%s.tbz2' % cpv.pv for cpv in cpvs]
def setUp(self):
+ # Fake being root to avoid running filesystem commands with sudo_run.
+ self.PatchObject(os, 'getuid', return_value=0)
+ self.PatchObject(os, 'geteuid', return_value=0)
+ self._sysroot = os.path.join(self.tempdir, 'sysroot')
+ osutils.SafeMakedirs(self._sysroot)
self.device = ChromiumOSDeviceHandlerFake()
self.PatchObject(
remote_access, 'ChromiumOSDeviceHandler', return_value=self.device)
self.PatchObject(cros_build_lib, 'GetBoard', return_value=None)
self.PatchObject(build_target_lib, 'get_default_sysroot_path',
- return_value='sysroot')
+ return_value=self._sysroot)
self.package_scanner = self.PatchObject(deploy, '_InstallPackageScanner')
self.get_packages_paths = self.PatchObject(
deploy, '_GetPackagesByCPV', side_effect=self.FakeGetPackagesByCPV)
self.emerge = self.PatchObject(deploy, '_Emerge', return_value=None)
self.unmerge = self.PatchObject(deploy, '_Unmerge', return_value=None)
self.PatchObject(deploy, '_GetDLCInfo', return_value=(None, None))
+ # Avoid running the portageq command.
+ sysroot_lib.Sysroot(self._sysroot).WriteConfig(
+ 'ARCH="amd64"\nPORTDIR_OVERLAY="%s"' % '/nothing/here')
+
def testDeployEmerge(self):
"""Test that deploy._Emerge is called for each package."""
@@ -346,7 +358,7 @@
# Check that package names were correctly resolved into binary packages.
self.get_packages_paths.assert_called_once_with(
- [package_info.SplitCPV(p) for p in cpvs], True, 'sysroot')
+ [package_info.SplitCPV(p) for p in cpvs], True, self._sysroot)
# Check that deploy._Emerge is called the right number of times.
self.emerge.assert_called_once_with(mock.ANY, [
'/path/to/foo-1.2.3.tbz2', '/path/to/bar-1.2.5.tbz2',
@@ -392,7 +404,7 @@
# Check that package names were correctly resolved into binary packages.
self.get_packages_paths.assert_called_once_with(
- [package_info.SplitCPV(p) for p in cpvs], True, 'sysroot')
+ [package_info.SplitCPV(p) for p in cpvs], True, self._sysroot)
# Check that deploy._Emerge is called the right number of times.
self.assertEqual(self.emerge.call_count, 1)
self.assertEqual(self.unmerge.call_count, 0)