shill: cellular: Fix CellularCapabilityUniversalCDMA::IsRegistered().

A CDMA modem may register on a network but fail to determine the roaming
status. ModemManager reports the CDMA (1xRTT/EVDO) registeration state
as MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED. This CL fixes
CellularCapabilityUniversalCDMA::IsRegistered() to include
MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED as a 'registered' state.
Otherwise, shill does not create a cellular service in such a scenario.

BUG=chromium:319496
TEST=Tested the following:
1. Build and run unit tests.
2. Verify that shill creates a cellular service for a CDMA dongle (e.g.
   ZTE AC2738) that registers on a CDMA network but fails to determine
   the roaming status.
3. Verify that shill creates a cellular service for a CDMA dongle (e.g.
   Huawei E1561) that registers on a CDMA network and reports the
   registeration status as 'home'.

Change-Id: I8b8d616a1965e237606aedef5c5bdce590f5fdaa
Reviewed-on: https://chromium-review.googlesource.com/176871
Reviewed-by: Thieu Le <thieule@chromium.org>
Tested-by: Ben Chan <benchan@chromium.org>
Commit-Queue: Ben Chan <benchan@chromium.org>
diff --git a/cellular_capability_universal_cdma.cc b/cellular_capability_universal_cdma.cc
index a1a4ecc..0e5d612 100644
--- a/cellular_capability_universal_cdma.cc
+++ b/cellular_capability_universal_cdma.cc
@@ -464,14 +464,10 @@
 }
 
 bool CellularCapabilityUniversalCDMA::IsRegistered() {
-  return (cdma_1x_registration_state_ ==
-              MM_MODEM_CDMA_REGISTRATION_STATE_HOME ||
-          cdma_1x_registration_state_ ==
-              MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING ||
-          cdma_evdo_registration_state_ ==
-              MM_MODEM_CDMA_REGISTRATION_STATE_HOME ||
-          cdma_evdo_registration_state_ ==
-              MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING);
+  return (cdma_1x_registration_state_ !=
+              MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN ||
+          cdma_evdo_registration_state_ !=
+              MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN);
 }
 
 void CellularCapabilityUniversalCDMA::SetUnregistered(bool /*searching*/) {
diff --git a/cellular_capability_universal_cdma.h b/cellular_capability_universal_cdma.h
index 4946f55..0eca428 100644
--- a/cellular_capability_universal_cdma.h
+++ b/cellular_capability_universal_cdma.h
@@ -84,6 +84,7 @@
   FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest,
               CreateFriendlyServiceName);
   FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest, IsActivating);
+  FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest, IsRegistered);
   FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest,
               IsServiceActivationRequired);
   FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest,
diff --git a/cellular_capability_universal_cdma_unittest.cc b/cellular_capability_universal_cdma_unittest.cc
index b7daca1..c495671 100644
--- a/cellular_capability_universal_cdma_unittest.cc
+++ b/cellular_capability_universal_cdma_unittest.cc
@@ -523,6 +523,80 @@
   EXPECT_FALSE(capability_->IsActivating());
 }
 
+TEST_F(CellularCapabilityUniversalCDMAMainTest, IsRegistered) {
+  capability_->cdma_1x_registration_state_ =
+      MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN;
+  capability_->cdma_evdo_registration_state_ =
+      MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN;
+  EXPECT_FALSE(capability_->IsRegistered());
+
+  capability_->cdma_evdo_registration_state_ =
+      MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED;
+  EXPECT_TRUE(capability_->IsRegistered());
+
+  capability_->cdma_evdo_registration_state_ =
+      MM_MODEM_CDMA_REGISTRATION_STATE_HOME;
+  EXPECT_TRUE(capability_->IsRegistered());
+
+  capability_->cdma_evdo_registration_state_ =
+      MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING;
+  EXPECT_TRUE(capability_->IsRegistered());
+
+  capability_->cdma_1x_registration_state_ =
+      MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED;
+  capability_->cdma_evdo_registration_state_ =
+      MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN;
+  EXPECT_TRUE(capability_->IsRegistered());
+
+  capability_->cdma_evdo_registration_state_ =
+      MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED;
+  EXPECT_TRUE(capability_->IsRegistered());
+
+  capability_->cdma_evdo_registration_state_ =
+      MM_MODEM_CDMA_REGISTRATION_STATE_HOME;
+  EXPECT_TRUE(capability_->IsRegistered());
+
+  capability_->cdma_evdo_registration_state_ =
+      MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING;
+  EXPECT_TRUE(capability_->IsRegistered());
+
+  capability_->cdma_1x_registration_state_ =
+      MM_MODEM_CDMA_REGISTRATION_STATE_HOME;
+  capability_->cdma_evdo_registration_state_ =
+      MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN;
+  EXPECT_TRUE(capability_->IsRegistered());
+
+  capability_->cdma_evdo_registration_state_ =
+      MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED;
+  EXPECT_TRUE(capability_->IsRegistered());
+
+  capability_->cdma_evdo_registration_state_ =
+      MM_MODEM_CDMA_REGISTRATION_STATE_HOME;
+  EXPECT_TRUE(capability_->IsRegistered());
+
+  capability_->cdma_evdo_registration_state_ =
+      MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING;
+  EXPECT_TRUE(capability_->IsRegistered());
+
+  capability_->cdma_1x_registration_state_ =
+      MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING;
+  capability_->cdma_evdo_registration_state_ =
+      MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN;
+  EXPECT_TRUE(capability_->IsRegistered());
+
+  capability_->cdma_evdo_registration_state_ =
+      MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED;
+  EXPECT_TRUE(capability_->IsRegistered());
+
+  capability_->cdma_evdo_registration_state_ =
+      MM_MODEM_CDMA_REGISTRATION_STATE_HOME;
+  EXPECT_TRUE(capability_->IsRegistered());
+
+  capability_->cdma_evdo_registration_state_ =
+      MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING;
+  EXPECT_TRUE(capability_->IsRegistered());
+}
+
 TEST_F(CellularCapabilityUniversalCDMAMainTest, SetupConnectProperties) {
   DBusPropertiesMap map;
   capability_->SetupConnectProperties(&map);