libweave: Add command line flag to override ssid Custom SSID can be useful test client applications. BUG=none TEST='FEATURES=test emerge-gizmo buffet' Change-Id: I2a52543df2d62a35a38e2277bff865a0962069b9 Reviewed-on: https://chromium-review.googlesource.com/286662 Reviewed-by: Vitaly Buka <vitalybuka@chromium.org> Commit-Queue: Vitaly Buka <vitalybuka@chromium.org> Tested-by: Vitaly Buka <vitalybuka@chromium.org>
diff --git a/buffet/etc/init/buffet.conf b/buffet/etc/init/buffet.conf index bd273c1..6948605 100644 --- a/buffet/etc/init/buffet.conf +++ b/buffet/etc/init/buffet.conf
@@ -13,11 +13,12 @@ env BUFFET_ENABLE_XMPP= env BUFFET_STATE_PATH= env BUFFET_CONFIG_PATH= -env BUFFET_TEST_DEFINITIONS_PATH= env BUFFET_ENABLE_PING=false -env BUFFET_DISABLE_SECURITY=false env BUFFET_DEVICE_WHITELIST= env BUFFET_DISABLE_PRIVET=false +env BUFFET_TEST_DEFINITIONS_PATH= +env BUFFET_DISABLE_SECURITY=false +env BUFFET_TEST_PRIVET_SSID= pre-start script mkdir -m 0755 -p /var/lib/buffet @@ -31,12 +32,13 @@ --v="${BUFFET_LOG_LEVEL}" \ --config_path="${BUFFET_CONFIG_PATH}" \ --state_path="${BUFFET_STATE_PATH}" \ - --test_definitions_path="${BUFFET_TEST_DEFINITIONS_PATH}" \ - --enable_xmpp="${BUFFET_ENABLE_XMPP}" \ --disable_security="${BUFFET_DISABLE_SECURITY}" \ --enable_ping="${BUFFET_ENABLE_PING}" \ --device_whitelist="${BUFFET_DEVICE_WHITELIST}" \ - --disable_privet="${BUFFET_DISABLE_PRIVET}" + --disable_privet="${BUFFET_DISABLE_PRIVET}" \ + --test_definitions_path="${BUFFET_TEST_DEFINITIONS_PATH}" \ + --enable_xmpp="${BUFFET_ENABLE_XMPP}" \ + --test_privet_ssid="${BUFFET_TEST_PRIVET_SSID}" # Wait for daemon to claim its D-Bus name before transitioning to started. post-start exec gdbus wait --system --timeout 30 org.chromium.Buffet
diff --git a/buffet/main.cc b/buffet/main.cc index 510dd04..0d1dff9 100644 --- a/buffet/main.cc +++ b/buffet/main.cc
@@ -56,17 +56,22 @@ "Path to file containing config information."); DEFINE_string(state_path, kDefaultStateFilePath, "Path to file containing state information."); - DEFINE_string(test_definitions_path, "", - "Path to directory containing additional command " - "and state definitions. For use in test only."); DEFINE_bool(enable_xmpp, true, "Connect to GCD via a persistent XMPP connection."); DEFINE_bool(disable_privet, false, "disable Privet protocol"); - DEFINE_bool(disable_security, false, "disable Privet security for tests"); DEFINE_bool(enable_ping, false, "enable test HTTP handler at /privet/ping"); DEFINE_string(device_whitelist, "", "Comma separated list of network interfaces to monitor for " "connectivity (an empty list enables all interfaces)."); + + DEFINE_bool(disable_security, false, + "disable Privet security for tests. For test only."); + DEFINE_string(test_privet_ssid, "", + "Fixed SSID for WiFi bootstrapping. For test only."); + DEFINE_string(test_definitions_path, "", + "Path to directory containing additional command " + "and state definitions. For test only."); + chromeos::FlagHelper::Init(argc, argv, "Privet protocol handler daemon"); if (FLAGS_config_path.empty()) FLAGS_config_path = kDefaultConfigFilePath; @@ -91,6 +96,7 @@ options.disable_privet = FLAGS_disable_privet; options.disable_security = FLAGS_disable_security; options.enable_ping = FLAGS_enable_ping; + options.test_privet_ssid = FLAGS_test_privet_ssid; buffet::Daemon daemon{options}; return daemon.Run();
diff --git a/libweave/include/weave/device.h b/libweave/include/weave/device.h index 5a49409..4adaa53 100644 --- a/libweave/include/weave/device.h +++ b/libweave/include/weave/device.h
@@ -46,11 +46,12 @@ base::FilePath state_path; base::FilePath definitions_path; base::FilePath test_definitions_path; - bool xmpp_enabled{true}; + bool xmpp_enabled = true; std::set<std::string> device_whitelist; - bool disable_privet{false}; - bool disable_security{false}; - bool enable_ping{false}; + bool disable_privet = false; + bool disable_security = false; + bool enable_ping = false; + std::string test_privet_ssid; }; virtual ~Device() = default;
diff --git a/libweave/src/privet/privet_manager.cc b/libweave/src/privet/privet_manager.cc index 1c48548..5638726 100644 --- a/libweave/src/privet/privet_manager.cc +++ b/libweave/src/privet/privet_manager.cc
@@ -82,8 +82,8 @@ if (device->GetConfig().wifi_auto_setup_enabled()) { VLOG(1) << "Enabling WiFi bootstrapping."; wifi_bootstrap_manager_.reset(new WifiBootstrapManager( - device->GetConfig().last_configured_ssid(), shill_client, - ap_manager_client_.get(), cloud_.get())); + device->GetConfig().last_configured_ssid(), options.test_privet_ssid, + 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 487450c..a52b11c 100644 --- a/libweave/src/privet/wifi_bootstrap_manager.cc +++ b/libweave/src/privet/wifi_bootstrap_manager.cc
@@ -25,19 +25,21 @@ WifiBootstrapManager::WifiBootstrapManager( const std::string& last_configured_ssid, + const std::string& test_privet_ssid, ShillClient* shill_client, ApManagerClient* ap_manager_client, CloudDelegate* gcd) : shill_client_{shill_client}, ap_manager_client_{ap_manager_client}, ssid_generator_{gcd, this}, - last_configured_ssid_{last_configured_ssid} { + last_configured_ssid_{last_configured_ssid}, + test_privet_ssid_{test_privet_ssid} { cloud_observer_.Add(gcd); } void WifiBootstrapManager::Init() { CHECK(!is_initialized_); - std::string ssid = ssid_generator_.GenerateSsid(); + std::string ssid = GenerateSsid(); if (ssid.empty()) return; // Delay initialization until ssid_generator_ is ready. UpdateConnectionState(); @@ -81,7 +83,7 @@ base::TimeDelta::FromSeconds(kBootstrapTimeoutSeconds)); } // TODO(vitalybuka): Add SSID probing. - std::string ssid = ssid_generator_.GenerateSsid(); + std::string ssid = GenerateSsid(); CHECK(!ssid.empty()); ap_manager_client_->Start(ssid); } @@ -155,6 +157,11 @@ listener.Run(new_state); } +std::string WifiBootstrapManager::GenerateSsid() const { + return test_privet_ssid_.empty() ? ssid_generator_.GenerateSsid() + : test_privet_ssid_; +} + const ConnectionState& WifiBootstrapManager::GetConnectionState() const { return connection_state_; }
diff --git a/libweave/src/privet/wifi_bootstrap_manager.h b/libweave/src/privet/wifi_bootstrap_manager.h index 4a68c46..7ade295 100644 --- a/libweave/src/privet/wifi_bootstrap_manager.h +++ b/libweave/src/privet/wifi_bootstrap_manager.h
@@ -36,6 +36,7 @@ using StateListener = base::Callback<void(State)>; WifiBootstrapManager(const std::string& last_configured_ssid, + const std::string& test_privet_ssid, ShillClient* shill_client, ApManagerClient* ap_manager_client, CloudDelegate* gcd); @@ -76,6 +77,8 @@ void UpdateState(State new_state); void NotifyStateListeners(State new_state) const; + std::string GenerateSsid() const; + // If we've been bootstrapped successfully before, and we're bootstrapping // again because we slipped offline for a sufficiently longtime, we want // to return to monitoring mode periodically in case our connectivity issues @@ -101,6 +104,7 @@ std::vector<StateListener> state_listeners_; bool currently_online_{false}; std::string last_configured_ssid_; + std::string test_privet_ssid_; ScopedObserver<CloudDelegate, CloudDelegate::Observer> cloud_observer_{this};