| # Copyright 2022 The ChromiumOS Authors | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| """Tests the `cros try` command.""" | |
| from pathlib import Path | |
| from typing import List | |
| from chromite.cli.cros import cros_try | |
| from chromite.lib import cipd | |
| from chromite.lib import cros_test_lib | |
| from chromite.scripts import cros | |
| MOCK_TRY_DIR = Path("/tmp/try") | |
| MOCK_TRY_BIN = MOCK_TRY_DIR / "try" | |
| class TryCommandTest(cros_test_lib.RunCommandTestCase): | |
| """Test the TryCommand class.""" | |
| def setUp(self): | |
| """Create patches.""" | |
| self._cipd_install_patch = self.PatchObject( | |
| cipd, "InstallPackage", return_value=MOCK_TRY_DIR | |
| ) | |
| def runCrosTry(self, try_args: List[str]): | |
| """Simulate running the `cros try` command with the specified args.""" | |
| return cros.main(["try"] + try_args) | |
| def testArgsForwarding(self): | |
| """Test that calling `cros try` forwards args to the try binary.""" | |
| self.runCrosTry(["release", "-staging"]) | |
| self.rc.assertCommandCalled( | |
| [str(MOCK_TRY_BIN), "release", "-staging"], | |
| check=False, | |
| stderr=True, | |
| encoding="utf-8", | |
| ) | |
| def testExitCode(self): | |
| """Test that `cros try` returns the try binary's exit code.""" | |
| self.rc.AddCmdResult([str(MOCK_TRY_BIN), "invalid-cmd"], returncode=128) | |
| actual_retcode = self.runCrosTry(["invalid-cmd"]) | |
| self.assertEqual(actual_retcode, 128) | |
| def testDoubleDashes(self): | |
| """Unit tests for _ModifyFlagsToDoubleDashes.""" | |
| # pylint: disable=protected-access | |
| for in_str, expected_out in ( | |
| ("-flag", "--flag"), | |
| ("\n-flag", "\n--flag"), | |
| ("--flag", "--flag"), | |
| ("-contains-dash", "--contains-dash"), | |
| ("[-flag]", "[--flag]"), | |
| ("-g", "-g"), | |
| ): | |
| actual_out = cros_try._ModifyFlagsToDoubleDashes(in_str) | |
| self.assertEqual(actual_out, expected_out) | |
| def testTryVersion(self): | |
| """Test the default/overridden try version.""" | |
| self.runCrosTry(["release"]) | |
| self._cipd_install_patch.assert_called_with( | |
| cipd.GetCIPDFromCache(), | |
| cros_try.CIPD_TRY_PACKAGE, | |
| "prod", | |
| ) | |
| self.runCrosTry( | |
| ["--try-version", "my-cool-version", "release", "--staging"] | |
| ) | |
| self._cipd_install_patch.assert_called_with( | |
| cipd.GetCIPDFromCache(), | |
| cros_try.CIPD_TRY_PACKAGE, | |
| "my-cool-version", | |
| ) | |
| self.rc.assertCommandCalled( | |
| [str(MOCK_TRY_BIN), "release", "--staging"], | |
| check=False, | |
| stderr=True, | |
| encoding="utf-8", | |
| ) |