Remove commission flag validator as it is not required PiperOrigin-RevId: 581803494
diff --git a/ui_automator/ui_automator.py b/ui_automator/ui_automator.py index 41b2bad..10f6fac 100644 --- a/ui_automator/ui_automator.py +++ b/ui_automator/ui_automator.py
@@ -105,13 +105,6 @@ ) -flags.register_validator( - 'commission', - lambda value: value and len(value) == 3, - message=_COMMISSIONING_FLAG_USAGE_GUIDE, -) - - def get_android_device_ready(func: Callable[..., Any]) -> Callable[..., Any]: """A decorator to check if an Android device can be controlled by installed apk. @@ -312,11 +305,16 @@ def _process_flags(ui_automator: UIAutomator) -> None: """Does specific action based on given flag values.""" if _COMMISSION.value: + if len(_COMMISSION.value) != 3: + raise flags.IllegalFlagValueError(_COMMISSIONING_FLAG_USAGE_GUIDE) + ui_automator.commission_device(*_COMMISSION.value) + if _DECOMMISSION.value: ui_automator.decommission_device(_DECOMMISSION.value) +# TODO(b/309745485): Type of argv should be Squence[str]. def _main(argv) -> None: if argv and len(argv) > 1: raise app.UsageError(f'Too many command-line arguments: {argv!r}')
diff --git a/ui_automator/ui_automator_test.py b/ui_automator/ui_automator_test.py index 637e97b..66eba17 100644 --- a/ui_automator/ui_automator_test.py +++ b/ui_automator/ui_automator_test.py
@@ -19,6 +19,7 @@ import unittest from unittest import mock +from absl import flags from absl.testing import flagsaver from mobly.controllers import android_device from mobly.controllers.android_device_lib import adb @@ -53,7 +54,11 @@ _FAKE_SYS_ARGV_FOR_COMMISSIONING_WITH_INVALID_LENGTH = [ _PYTHON_BIN_PATH + 'ui-automator', '--commission', - '', + 'm5', +] +_FAKE_SYS_ARGV_FOR_COMMISSIONING_WITH_EMPTY_VALUE = [ + _PYTHON_BIN_PATH + 'ui-automator', + '--commission', ] @@ -450,25 +455,37 @@ mock_commission_device.assert_called_once_with( mock.ANY, 'm5stack', '34970112332', 'Office' ) - mock_exit.assert_called() + mock_exit.assert_called_once() - @mock.patch.object(sys.stderr, 'write', autospec=True) - @mock.patch.object(sys, 'exit', autospec=True) - def test_commission_with_cmd_invalid_arg_should_stderr( - self, mock_exit, mock_stderr_write + @flagsaver.flagsaver( + (ui_automator._COMMISSION, ['m5']) + ) + def test_commission_with_cmd_invalid_arg_should_raise_an_error( + self ): with mock.patch.object( sys, 'argv', _FAKE_SYS_ARGV_FOR_COMMISSIONING_WITH_INVALID_LENGTH ): + with self.assertRaises(flags.IllegalFlagValueError): + ui_automator.run() + + self.mock_android_device.mbs.commissionDevice.assert_not_called() + + @mock.patch.object(sys.stderr, 'write', autospec=True) + @mock.patch.object(sys, 'exit', autospec=True) + def test_commission_with_cmd_invalid_args_should_stderr( + self, mock_exit, mock_stderr_write + ): + with mock.patch.object( + sys, 'argv', _FAKE_SYS_ARGV_FOR_COMMISSIONING_WITH_EMPTY_VALUE + ): ui_automator.run() self.assertEqual(mock_stderr_write.call_count, 2) first_call_args = ''.join(mock_stderr_write.call_args_list[0][0]) self.assertEqual( first_call_args, - 'FATAL Flags parsing error: flag --commission=[]: Use' - ' --commission {DeviceName},{PairingCode},{GHARoom} to commission a' - ' device to google fabric on GHA.\n', + 'FATAL Flags parsing error: Missing value for flag --commission\n', ) second_call_args = ''.join(mock_stderr_write.call_args_list[1][0]) self.assertEqual( @@ -496,7 +513,7 @@ mock_commission_device.assert_not_called() mock_decommission_device.assert_called_once_with(mock.ANY, 'm5stack') - mock_exit.assert_called() + mock_exit.assert_called_once() @mock.patch.object(android_device, 'get_all_instances', autospec=True) def test_decommission_device_raises_an_error_with_invalid_device_name(