shill: cellular: Update online payment portal when available.

BUG=chrome-os-partner:11985
TEST=Build and run unit tests.

Change-Id: I50085707907cfa14251f76eba1b57d3cf0604938
Reviewed-on: https://gerrit.chromium.org/gerrit/37507
Commit-Ready: Ben Chan <benchan@chromium.org>
Reviewed-by: Ben Chan <benchan@chromium.org>
Tested-by: Ben Chan <benchan@chromium.org>
diff --git a/cellular_capability_universal_unittest.cc b/cellular_capability_universal_unittest.cc
index 3bcdd0c..20ca0a3 100644
--- a/cellular_capability_universal_unittest.cc
+++ b/cellular_capability_universal_unittest.cc
@@ -42,6 +42,7 @@
 using std::string;
 using std::vector;
 using testing::InSequence;
+using testing::Invoke;
 using testing::Mock;
 using testing::NiceMock;
 using testing::Return;
@@ -64,6 +65,23 @@
           apn == expected_apn);
 }
 
+class MockCellularOperatorInfoGetOLPHelper {
+ public:
+  MockCellularOperatorInfoGetOLPHelper(const CellularService::OLP &olp) {
+    olp_.CopyFrom(olp);
+  }
+
+  ~MockCellularOperatorInfoGetOLPHelper() {}
+
+  bool GetOLP(const std::string &operator_id, CellularService::OLP *olp) {
+    olp->CopyFrom(olp_);
+    return true;
+  }
+
+ private:
+  CellularService::OLP olp_;
+};
+
 class CellularCapabilityUniversalTest : public testing::Test {
  public:
   CellularCapabilityUniversalTest()
@@ -894,6 +912,38 @@
   EXPECT_TRUE(capability_->provider_requires_roaming_);
 }
 
+TEST_F(CellularCapabilityUniversalTest, UpdateOLP) {
+  CellularService::OLP test_olp;
+  test_olp.SetURL("http://testurl");
+  test_olp.SetMethod("POST");
+  test_olp.SetPostData("esn=${esn}&imei=${imei}&imsi=${imsi}&mdn=${mdn}&"
+                       "meid=${meid}&min=${min}&iccid=${iccid}");
+
+  MockCellularOperatorInfoGetOLPHelper get_olp_helper(test_olp);
+
+  capability_->esn_ = "0";
+  capability_->imei_ = "1";
+  capability_->imsi_ = "2";
+  capability_->mdn_ = "3";
+  capability_->meid_= "4";
+  capability_->min_ = "5";
+  capability_->sim_identifier_ = "6";
+  capability_->operator_id_ = "123456";
+  cellular_->cellular_operator_info_ = &cellular_operator_info_;
+
+  EXPECT_CALL(cellular_operator_info_, GetOLP(capability_->operator_id_, _))
+      .WillOnce(Invoke(&get_olp_helper,
+                       &MockCellularOperatorInfoGetOLPHelper::GetOLP));
+
+  SetService();
+  capability_->UpdateOLP();
+  const CellularService::OLP &olp = cellular_->service()->olp();
+  EXPECT_EQ("http://testurl", olp.GetURL());
+  EXPECT_EQ("POST", olp.GetMethod());
+  EXPECT_EQ("esn=0&imei=1&imsi=2&mdn=3&meid=4&min=5&iccid=6",
+            olp.GetPostData());
+}
+
 TEST_F(CellularCapabilityUniversalTest, UpdateOperatorInfo) {
   static const char kOperatorName[] = "Swisscom";
   InitProviderDB();