shill: vpn: Set the friendly VPN service name.

Also, implement a more concise KeyValueStore string lookup method and add unit
tests.

BUG=chromium-os:27775
TEST=unit tests

Change-Id: If6ab38a9110c09275816bcc6ca992a77425859eb
Reviewed-on: https://gerrit.chromium.org/gerrit/18106
Commit-Ready: Darin Petkov <petkov@chromium.org>
Reviewed-by: Darin Petkov <petkov@chromium.org>
Tested-by: Darin Petkov <petkov@chromium.org>
diff --git a/vpn_provider.cc b/vpn_provider.cc
index be3c466..8ac7b38 100644
--- a/vpn_provider.cc
+++ b/vpn_provider.cc
@@ -35,7 +35,8 @@
 VPNServiceRefPtr VPNProvider::GetService(const KeyValueStore &args,
                                          Error *error) {
   VLOG(2) << __func__;
-  if (!args.ContainsString(flimflam::kProviderTypeProperty)) {
+  string type = args.LookupString(flimflam::kProviderTypeProperty, "");
+  if (type.empty()) {
     Error::PopulateAndLog(
         error, Error::kNotSupported, "Missing VPN type property.");
     return NULL;
@@ -46,7 +47,6 @@
     return NULL;
   }
 
-  const string &type = args.GetString(flimflam::kProviderTypeProperty);
   scoped_ptr<VPNDriver> driver;
   if (type == flimflam::kProviderOpenVpn) {
     driver.reset(new OpenVPNDriver(
@@ -61,6 +61,10 @@
   VPNServiceRefPtr service = new VPNService(
       control_interface_, dispatcher_, metrics_, manager_, driver.release());
   service->set_storage_id(storage_id);
+  string name = args.LookupString(flimflam::kProviderNameProperty, "");
+  if (!name.empty()) {
+    service->set_friendly_name(name);
+  }
   services_.push_back(service);
   manager_->RegisterService(service);
   return service;