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