shill: Add SIMLockEnabled to the SIM lock status properties and emit changes.

This patch replaces the StrIntPair class with the more generic KeyValueStore and
updates cellular's SIMLockStatus property to include the enabled key/value pair.

BUG=chromium-os:25850
TEST=unit tests

Change-Id: I2662cb468807e3afa04c3699e323f31282e1a50e
Reviewed-on: https://gerrit.chromium.org/gerrit/15325
Tested-by: Darin Petkov <petkov@chromium.org>
Reviewed-by: Eric Shienbrood <ers@chromium.org>
Reviewed-by: mukesh agrawal <quiche@chromium.org>
Commit-Ready: Darin Petkov <petkov@chromium.org>
diff --git a/cellular_capability_gsm_unittest.cc b/cellular_capability_gsm_unittest.cc
index 9ba5870..c648819 100644
--- a/cellular_capability_gsm_unittest.cc
+++ b/cellular_capability_gsm_unittest.cc
@@ -513,4 +513,29 @@
             cellular_->service()->GetStorageIdentifier());
 }
 
+TEST_F(CellularCapabilityGSMTest, OnModemManagerPropertiesChanged) {
+  EXPECT_EQ(MM_MODEM_GSM_ACCESS_TECH_UNKNOWN, capability_->access_technology_);
+  EXPECT_FALSE(capability_->sim_lock_status_.enabled);
+  EXPECT_EQ("", capability_->sim_lock_status_.lock_type);
+  EXPECT_EQ(0, capability_->sim_lock_status_.retries_left);
+  DBusPropertiesMap props;
+  static const char kLockType[] = "sim-pin";
+  const int kRetries = 3;
+  props[CellularCapabilityGSM::kPropertyAccessTechnology].writer().
+      append_uint32(MM_MODEM_GSM_ACCESS_TECH_EDGE);
+  props[CellularCapabilityGSM::kPropertyEnabledFacilityLocks].writer().
+      append_uint32(MM_MODEM_GSM_FACILITY_SIM);
+  props[CellularCapabilityGSM::kPropertyUnlockRequired].writer().append_string(
+      kLockType);
+  props[CellularCapabilityGSM::kPropertyUnlockRetries].writer().append_uint32(
+      kRetries);
+  EXPECT_CALL(*device_adaptor_,
+              EmitKeyValueStoreChanged(flimflam::kSIMLockStatusProperty, _));
+  capability_->OnModemManagerPropertiesChanged(props);
+  EXPECT_EQ(MM_MODEM_GSM_ACCESS_TECH_EDGE, capability_->access_technology_);
+  EXPECT_TRUE(capability_->sim_lock_status_.enabled);
+  EXPECT_EQ(kLockType, capability_->sim_lock_status_.lock_type);
+  EXPECT_EQ(kRetries, capability_->sim_lock_status_.retries_left);
+}
+
 }  // namespace shill