cellular: Enable reboot on Qualcomm modems.
Enable reboot on Qualcomm modems now that shill supports rebooting
them.
BUG=b:168113309
TEST=test_that lazor cellular_Identifiers.tmobile --debug --iterations 6
Change-Id: I222f005174c87fa29e465eac2df7e532881e0908
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/autotest/+/2739445
Reviewed-by: Harpreet Grewal <harpreet@chromium.org>
Commit-Queue: Andrew Lassalle <andrewlassalle@chromium.org>
Tested-by: Andrew Lassalle <andrewlassalle@chromium.org>
diff --git a/client/cros/networking/cellular_proxy.py b/client/cros/networking/cellular_proxy.py
index d628d4f..4d1c2f7 100644
--- a/client/cros/networking/cellular_proxy.py
+++ b/client/cros/networking/cellular_proxy.py
@@ -143,45 +143,43 @@
if not manufacturer:
raise shill_proxy.ShillProxyError(
'Failed to get the manufacturer for the modem.')
- if "QUALCOMM" in manufacturer:
- logging.info(
- 'Qualcomm modem found. Bypassing modem reset (b/168113309)'
- )
- new_modem = modem
- else:
- modem.Reset()
- # (1) Wait for the old modem to disappear
- utils.poll_for_condition(lambda: self._is_old_modem_gone(
- old_modem_path, old_modem_mm_object),
- exception=shill_proxy.
- ShillProxyTimeoutError(
- 'Old modem disappeared'),
- timeout=60)
+ # On Qualcomm modems, rebooting the modem causes ModemManager to also
+ # restart, because when the Qrtr services are removed, qc-netmgr
+ # restarts ModemManager.
+ mm_rebooted = "QUALCOMM" in manufacturer
+ modem.Reset()
- # (2) Wait for the device to reappear
- if not expect_device:
- return None, None
- # The timeout here should be sufficient for our slowest modem to
- # reappear.
- new_modem = utils.poll_for_condition(
- lambda: self._get_reappeared_modem(model_id,
- old_modem_mm_object),
- exception=shill_proxy.ShillProxyTimeoutError(
- 'The modem reappeared after reset.'),
- timeout=60)
+ # (1) Wait for the old modem to disappear
+ utils.poll_for_condition(lambda: self._is_old_modem_gone(
+ old_modem_path, old_modem_mm_object),
+ exception=shill_proxy.ShillProxyTimeoutError(
+ 'Old modem disappeared'),
+ timeout=60)
- # (3) Check powered state of the device
- if not expect_powered:
- return new_modem, None
- success, _, _ = self.wait_for_property_in(
- new_modem,
- self.DEVICE_PROPERTY_POWERED, [self.VALUE_POWERED_ON],
- timeout_seconds=10)
- if not success:
- raise shill_proxy.ShillProxyError(
- 'After modem reset, new modem failed to enter powered '
- 'state.')
+ # (2) Wait for the device to reappear
+ if not expect_device:
+ return None, None
+ # The timeout here should be sufficient for our slowest modem to
+ # reappear.
+ new_modem = utils.poll_for_condition(
+ lambda: self._get_reappeared_modem(
+ model_id, old_modem_mm_object, mm_rebooted),
+ exception=shill_proxy.ShillProxyTimeoutError(
+ 'The modem reappeared after reset.'),
+ timeout=60)
+
+ # (3) Check powered state of the device
+ if not expect_powered:
+ return new_modem, None
+ success, _, _ = self.wait_for_property_in(new_modem,
+ self.DEVICE_PROPERTY_POWERED,
+ [self.VALUE_POWERED_ON],
+ timeout_seconds=10)
+ if not success:
+ raise shill_proxy.ShillProxyError(
+ 'After modem reset, new modem failed to enter powered '
+ 'state.')
# (4) Check that service reappears
if not expect_service:
@@ -250,12 +248,15 @@
return False
- def _get_reappeared_modem(self, model_id, old_modem_mm_object):
- """Check that a vanished modem reappers.
+ def _get_reappeared_modem(self, model_id, old_modem_mm_object, mm_reboot):
+ """Check that a vanished modem reappeers.
@param model_id: The model ID reported by the vanished modem.
@param old_modem_mm_object: The previously reported modemmanager object
path for this modem.
+ @param mm_reboot: indicates when modemmanager was rebooted.
+ When modemmanager reboots, the previous modem object name has
+ no importance.
@return The reappeared DBus object, if any. None otherwise.
@@ -266,8 +267,8 @@
if not device:
return None
properties = device.GetProperties(utf8_strings=True)
- if (model_id == properties.get(self.DEVICE_PROPERTY_MODEL_ID) and
- (old_modem_mm_object !=
- properties.get(self.DEVICE_PROPERTY_DBUS_OBJECT))):
+ if (model_id == properties.get(self.DEVICE_PROPERTY_MODEL_ID)
+ and (mm_reboot or (old_modem_mm_object != properties.get(
+ self.DEVICE_PROPERTY_DBUS_OBJECT)))):
return device
return None