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};