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(