shill: cellular: Update storage identifier based on SID for CDMA.

BUG=chromium:297396
TEST=Build and run unit tests.

Change-Id: Id463eb819b2778a91945eb9987532bb338ebdbbc
Reviewed-on: https://chromium-review.googlesource.com/170422
Reviewed-by: Ben Chan <benchan@chromium.org>
Tested-by: Arman Uguray <armansito@chromium.org>
Commit-Queue: Arman Uguray <armansito@chromium.org>
diff --git a/cellular_capability_universal_cdma_unittest.cc b/cellular_capability_universal_cdma_unittest.cc
index 891f42b..b7daca1 100644
--- a/cellular_capability_universal_cdma_unittest.cc
+++ b/cellular_capability_universal_cdma_unittest.cc
@@ -7,6 +7,7 @@
 #include <string>
 #include <vector>
 
+#include <base/string_util.h>
 #include <base/stringprintf.h>
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
@@ -91,6 +92,10 @@
     cellular_->service_ = new CellularService(&modem_info_, cellular_);
   }
 
+  void ClearService() {
+    cellular_->service_ = NULL;
+  }
+
   void ReleaseCapabilityProxies() {
     capability_->ReleaseProxies();
   }
@@ -525,6 +530,46 @@
   EXPECT_STREQ("#777", map["number"].reader().get_string());
 }
 
+TEST_F(CellularCapabilityUniversalCDMAMainTest, UpdateStorageIdentifier) {
+  ClearService();
+  EXPECT_FALSE(cellular_->service().get());
+  capability_->UpdateStorageIdentifier();
+  EXPECT_FALSE(cellular_->service().get());
+
+  SetService();
+  EXPECT_TRUE(cellular_->service().get());
+
+  const string kPrefix =
+      string(shill::kTypeCellular) + "_" + string(kMachineAddress) + "_";
+  const string kDefaultIdentifierPattern = kPrefix + "CDMANetwork*";
+
+  // GetCellularOperatorBySID returns NULL.
+  EXPECT_CALL(*modem_info_.mock_cellular_operator_info(),
+              GetCellularOperatorBySID(_))
+      .WillOnce(Return(nullptr));
+  capability_->UpdateStorageIdentifier();
+  EXPECT_TRUE(::MatchPattern(cellular_->service()->GetStorageIdentifier(),
+                             kDefaultIdentifierPattern));
+  Mock::VerifyAndClearExpectations(modem_info_.mock_cellular_operator_info());
+
+  CellularOperatorInfo::CellularOperator provider;
+  EXPECT_CALL(*modem_info_.mock_cellular_operator_info(),
+              GetCellularOperatorBySID(_))
+      .Times(2)
+      .WillRepeatedly(Return(&provider));
+
+  // |provider.identifier_| is empty.
+  capability_->UpdateStorageIdentifier();
+  EXPECT_TRUE(::MatchPattern(cellular_->service()->GetStorageIdentifier(),
+                             kDefaultIdentifierPattern));
+
+  // Success.
+  provider.identifier_ = "testidentifier";
+  capability_->UpdateStorageIdentifier();
+  EXPECT_EQ(kPrefix + "testidentifier",
+            cellular_->service()->GetStorageIdentifier());
+}
+
 TEST_F(CellularCapabilityUniversalCDMADispatcherTest,
        UpdatePendingActivationState) {
   capability_->activation_state_ = MM_MODEM_CDMA_ACTIVATION_STATE_ACTIVATED;