libweave: Add 'ble_setup_enabled' config option

Add a 'ble_setup_enabled' option to the device config.  This will
control whether or not we enable wifi credentials bootstrapping
over Bluetooth Low Energy.  BLE bootstrapping isn't implemented yet,
this is just a first step.

TEST=buffet_config_unittest
BUG=brillo:1266

Change-Id: Idbe1444ec9b74b8393ffd2dd932d7b85ae4ff948
Reviewed-on: https://chromium-review.googlesource.com/289321
Reviewed-by: Vitaly Buka <vitalybuka@chromium.org>
Tested-by: Rob Ginda <rginda@chromium.org>
Commit-Queue: Rob Ginda <rginda@chromium.org>
diff --git a/libweave/include/weave/config.h b/libweave/include/weave/config.h
index 6b87385..a13eee5 100644
--- a/libweave/include/weave/config.h
+++ b/libweave/include/weave/config.h
@@ -35,6 +35,7 @@
   base::TimeDelta backup_polling_period;
 
   bool wifi_auto_setup_enabled{true};
+  bool ble_setup_enabled{false};
   std::set<PairingType> pairing_modes;
   base::FilePath embedded_code_path;
 
diff --git a/libweave/src/buffet_config.cc b/libweave/src/buffet_config.cc
index a4a38da..ee15693 100644
--- a/libweave/src/buffet_config.cc
+++ b/libweave/src/buffet_config.cc
@@ -85,6 +85,7 @@
 const char kDeviceId[] = "device_id";
 const char kRobotAccount[] = "robot_account";
 const char kWifiAutoSetupEnabled[] = "wifi_auto_setup_enabled";
+const char kBleSetupEnabled[] = "ble_setup_enabled";
 const char kEmbeddedCodePath[] = "embedded_code_path";
 const char kPairingModes[] = "pairing_modes";
 const char kLastConfiguredSsid[] = "last_configured_ssid";
@@ -109,6 +110,7 @@
   result.polling_period = base::TimeDelta::FromSeconds(7);
   result.backup_polling_period = base::TimeDelta::FromMinutes(30);
   result.wifi_auto_setup_enabled = true;
+  result.ble_setup_enabled = false;
   result.pairing_modes.emplace(PairingType::kPinCode);
   return result;
 }
@@ -180,6 +182,9 @@
   store.GetBoolean(config_keys::kWifiAutoSetupEnabled,
                    &settings_.wifi_auto_setup_enabled);
 
+  store.GetBoolean(config_keys::kBleSetupEnabled,
+                   &settings_.ble_setup_enabled);
+
   std::string embedded_code_path;
   if (store.GetString(config_keys::kEmbeddedCodePath, &embedded_code_path)) {
     settings_.embedded_code_path = base::FilePath(embedded_code_path);
diff --git a/libweave/src/buffet_config.h b/libweave/src/buffet_config.h
index 8924365..f2c4891 100644
--- a/libweave/src/buffet_config.h
+++ b/libweave/src/buffet_config.h
@@ -112,6 +112,9 @@
   bool wifi_auto_setup_enabled() const {
     return settings_.wifi_auto_setup_enabled;
   }
+  bool ble_setup_enabled() const {
+    return settings_.ble_setup_enabled;
+  }
   const std::set<PairingType>& pairing_modes() const {
     return settings_.pairing_modes;
   }
diff --git a/libweave/src/buffet_config_unittest.cc b/libweave/src/buffet_config_unittest.cc
index 7811814..7c80b06 100644
--- a/libweave/src/buffet_config_unittest.cc
+++ b/libweave/src/buffet_config_unittest.cc
@@ -58,6 +58,7 @@
   EXPECT_EQ(base::TimeDelta::FromSeconds(7), config_->polling_period());
   EXPECT_EQ(base::TimeDelta::FromMinutes(30), config_->backup_polling_period());
   EXPECT_TRUE(config_->wifi_auto_setup_enabled());
+  EXPECT_FALSE(config_->ble_setup_enabled());
   EXPECT_EQ(std::set<PairingType>{PairingType::kPinCode},
             config_->pairing_modes());
   EXPECT_EQ("", config_->embedded_code_path().value());
@@ -86,6 +87,7 @@
   config_store.SetString("polling_period_ms", "12345");
   config_store.SetString("backup_polling_period_ms", "6589");
   config_store.SetBoolean("wifi_auto_setup_enabled", false);
+  config_store.SetBoolean("ble_setup_enabled", true);
   config_store.SetString("pairing_modes",
                          "pinCode,embeddedCode,ultrasound32,audible32");
   config_store.SetString("embedded_code_path", "/conf_code");
@@ -120,6 +122,7 @@
   EXPECT_EQ(base::TimeDelta::FromMilliseconds(6589),
             config_->backup_polling_period());
   EXPECT_FALSE(config_->wifi_auto_setup_enabled());
+  EXPECT_TRUE(config_->ble_setup_enabled());
   std::set<PairingType> pairing_types{
       PairingType::kPinCode, PairingType::kEmbeddedCode,
       PairingType::kUltrasound32, PairingType::kAudible32};
@@ -205,6 +208,8 @@
   EXPECT_EQ(default_.backup_polling_period(), config_->backup_polling_period());
   EXPECT_EQ(default_.wifi_auto_setup_enabled(),
             config_->wifi_auto_setup_enabled());
+  EXPECT_EQ(default_.ble_setup_enabled(),
+            config_->ble_setup_enabled());
   EXPECT_EQ(default_.pairing_modes(), config_->pairing_modes());
   EXPECT_EQ(default_.embedded_code_path(), config_->embedded_code_path());
   EXPECT_EQ("state_name", config_->name());
diff --git a/libweave/src/privet/privet_manager.cc b/libweave/src/privet/privet_manager.cc
index 5638726..698283a 100644
--- a/libweave/src/privet/privet_manager.cc
+++ b/libweave/src/privet/privet_manager.cc
@@ -83,6 +83,7 @@
     VLOG(1) << "Enabling WiFi bootstrapping.";
     wifi_bootstrap_manager_.reset(new WifiBootstrapManager(
         device->GetConfig().last_configured_ssid(), options.test_privet_ssid,
+        device->GetConfig().ble_setup_enabled(),
         shill_client, ap_manager_client_.get(), cloud_.get()));
     wifi_bootstrap_manager_->Init();
   }
diff --git a/libweave/src/privet/wifi_bootstrap_manager.cc b/libweave/src/privet/wifi_bootstrap_manager.cc
index a52b11c..d1bf380 100644
--- a/libweave/src/privet/wifi_bootstrap_manager.cc
+++ b/libweave/src/privet/wifi_bootstrap_manager.cc
@@ -26,6 +26,7 @@
 WifiBootstrapManager::WifiBootstrapManager(
     const std::string& last_configured_ssid,
     const std::string& test_privet_ssid,
+    bool ble_setup_enabled,
     ShillClient* shill_client,
     ApManagerClient* ap_manager_client,
     CloudDelegate* gcd)
@@ -33,7 +34,8 @@
       ap_manager_client_{ap_manager_client},
       ssid_generator_{gcd, this},
       last_configured_ssid_{last_configured_ssid},
-      test_privet_ssid_{test_privet_ssid} {
+      test_privet_ssid_{test_privet_ssid},
+      ble_setup_enabled_{ble_setup_enabled} {
   cloud_observer_.Add(gcd);
 }
 
@@ -86,9 +88,11 @@
   std::string ssid = GenerateSsid();
   CHECK(!ssid.empty());
   ap_manager_client_->Start(ssid);
+  LOG_IF(INFO, ble_setup_enabled_) << "BLE Bootstrap start: not implemented.";
 }
 
 void WifiBootstrapManager::EndBootstrapping() {
+  LOG_IF(INFO, ble_setup_enabled_) << "BLE Bootstrap stop: not implemented.";
   ap_manager_client_->Stop();
 }
 
diff --git a/libweave/src/privet/wifi_bootstrap_manager.h b/libweave/src/privet/wifi_bootstrap_manager.h
index 7ade295..fbe89d0 100644
--- a/libweave/src/privet/wifi_bootstrap_manager.h
+++ b/libweave/src/privet/wifi_bootstrap_manager.h
@@ -37,6 +37,7 @@
 
   WifiBootstrapManager(const std::string& last_configured_ssid,
                        const std::string& test_privet_ssid,
+                       bool wifi_setup_enabled,
                        ShillClient* shill_client,
                        ApManagerClient* ap_manager_client,
                        CloudDelegate* gcd);
@@ -105,6 +106,7 @@
   bool currently_online_{false};
   std::string last_configured_ssid_;
   std::string test_privet_ssid_;
+  bool ble_setup_enabled_{false};
 
   ScopedObserver<CloudDelegate, CloudDelegate::Observer> cloud_observer_{this};