libweave: Extract weave::Settings struct
This will help to avoid a log of getters in BuffetConfig interface.
BUG=brillo:1242
TEST='FEATURES=test emerge-gizmo buffet'
Change-Id: I76399760d77df950c6471d113f8cc0671faaa040
Reviewed-on: https://chromium-review.googlesource.com/286591
Trybot-Ready: Vitaly Buka <vitalybuka@chromium.org>
Tested-by: Vitaly Buka <vitalybuka@chromium.org>
Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
Commit-Queue: Vitaly Buka <vitalybuka@chromium.org>
diff --git a/buffet/manager.cc b/buffet/manager.cc
index dd1ba79..572963e 100644
--- a/buffet/manager.cc
+++ b/buffet/manager.cc
@@ -264,15 +264,15 @@
dbus_adaptor_.SetStatus(weave::EnumToString(status));
}
-void Manager::OnConfigChanged(const weave::BuffetConfig& config) {
- dbus_adaptor_.SetDeviceId(config.device_id());
- dbus_adaptor_.SetOemName(config.oem_name());
- dbus_adaptor_.SetModelName(config.model_name());
- dbus_adaptor_.SetModelId(config.model_id());
- dbus_adaptor_.SetName(config.name());
- dbus_adaptor_.SetDescription(config.description());
- dbus_adaptor_.SetLocation(config.location());
- dbus_adaptor_.SetAnonymousAccessRole(config.local_anonymous_access_role());
+void Manager::OnConfigChanged(const weave::Settings& settings) {
+ dbus_adaptor_.SetDeviceId(settings.device_id);
+ dbus_adaptor_.SetOemName(settings.oem_name);
+ dbus_adaptor_.SetModelName(settings.model_name);
+ dbus_adaptor_.SetModelId(settings.model_id);
+ dbus_adaptor_.SetName(settings.name);
+ dbus_adaptor_.SetDescription(settings.description);
+ dbus_adaptor_.SetLocation(settings.location);
+ dbus_adaptor_.SetAnonymousAccessRole(settings.local_anonymous_access_role);
}
void Manager::UpdateWiFiBootstrapState(weave::WifiSetupState state) {
diff --git a/buffet/manager.h b/buffet/manager.h
index feb6b9d..6db50fe 100644
--- a/buffet/manager.h
+++ b/buffet/manager.h
@@ -102,7 +102,7 @@
void OnStateChanged();
void OnRegistrationChanged(weave::RegistrationStatus status);
- void OnConfigChanged(const weave::BuffetConfig& config);
+ void OnConfigChanged(const weave::Settings& settings);
void UpdateWiFiBootstrapState(weave::WifiSetupState state);
void OnPairingStart(const std::string& session_id,
weave::PairingType pairing_type,
diff --git a/libweave/src/buffet_config.cc b/libweave/src/buffet_config.cc
index 5355566..a4a38da 100644
--- a/libweave/src/buffet_config.cc
+++ b/libweave/src/buffet_config.cc
@@ -91,6 +91,28 @@
} // namespace config_keys
+Settings BuffetConfig::CreateDefaultSettings() {
+ Settings result;
+ result.client_id = "58855907228.apps.googleusercontent.com";
+ result.client_secret = "eHSAREAHrIqPsHBxCE9zPPBi";
+ result.api_key = "AIzaSyDSq46gG-AxUnC3zoqD9COIPrjolFsMfMA";
+ result.oauth_url = "https://accounts.google.com/o/oauth2/";
+ result.service_url = "https://www.googleapis.com/clouddevices/v1/";
+ result.name = "Developer device";
+ result.local_anonymous_access_role = "viewer";
+ result.local_discovery_enabled = true;
+ result.local_pairing_enabled = true;
+ result.oem_name = "Chromium";
+ result.model_name = "Brillo";
+ result.model_id = "AAAAA";
+ result.device_kind = "vendor";
+ result.polling_period = base::TimeDelta::FromSeconds(7);
+ result.backup_polling_period = base::TimeDelta::FromMinutes(30);
+ result.wifi_auto_setup_enabled = true;
+ result.pairing_modes.emplace(PairingType::kPinCode);
+ return result;
+}
+
BuffetConfig::BuffetConfig(std::unique_ptr<StorageInterface> storage)
: storage_{std::move(storage)} {
}
@@ -100,6 +122,16 @@
std::unique_ptr<StorageInterface>{new FileStorage{state_path}}} {
}
+void BuffetConfig::AddOnChangedCallback(const OnChangedCallback& callback) {
+ on_changed_.push_back(callback);
+ // Force to read current state.
+ callback.Run(settings_);
+}
+
+const Settings& BuffetConfig::GetSettings() const {
+ return settings_;
+}
+
void BuffetConfig::Load(const base::FilePath& config_path) {
chromeos::KeyValueStore store;
if (base::PathExists(config_path)) {
@@ -113,45 +145,46 @@
Transaction change{this};
change.save_ = false;
- store.GetString(config_keys::kClientId, &client_id_);
- CHECK(!client_id_.empty());
+ store.GetString(config_keys::kClientId, &settings_.client_id);
+ CHECK(!settings_.client_id.empty());
- store.GetString(config_keys::kClientSecret, &client_secret_);
- CHECK(!client_secret_.empty());
+ store.GetString(config_keys::kClientSecret, &settings_.client_secret);
+ CHECK(!settings_.client_secret.empty());
- store.GetString(config_keys::kApiKey, &api_key_);
- CHECK(!api_key_.empty());
+ store.GetString(config_keys::kApiKey, &settings_.api_key);
+ CHECK(!settings_.api_key.empty());
- store.GetString(config_keys::kOAuthURL, &oauth_url_);
- CHECK(!oauth_url_.empty());
+ store.GetString(config_keys::kOAuthURL, &settings_.oauth_url);
+ CHECK(!settings_.oauth_url.empty());
- store.GetString(config_keys::kServiceURL, &service_url_);
- CHECK(!service_url_.empty());
+ store.GetString(config_keys::kServiceURL, &settings_.service_url);
+ CHECK(!settings_.service_url.empty());
- store.GetString(config_keys::kOemName, &oem_name_);
- CHECK(!oem_name_.empty());
+ store.GetString(config_keys::kOemName, &settings_.oem_name);
+ CHECK(!settings_.oem_name.empty());
- store.GetString(config_keys::kModelName, &model_name_);
- CHECK(!model_name_.empty());
+ store.GetString(config_keys::kModelName, &settings_.model_name);
+ CHECK(!settings_.model_name.empty());
- store.GetString(config_keys::kModelId, &model_id_);
- device_kind_ = GetDeviceKind(model_id_);
+ store.GetString(config_keys::kModelId, &settings_.model_id);
+ settings_.device_kind = GetDeviceKind(settings_.model_id);
std::string polling_period_str;
if (store.GetString(config_keys::kPollingPeriodMs, &polling_period_str))
- CHECK(StringToTimeDelta(polling_period_str, &polling_period_));
+ CHECK(StringToTimeDelta(polling_period_str, &settings_.polling_period));
if (store.GetString(config_keys::kBackupPollingPeriodMs, &polling_period_str))
- CHECK(StringToTimeDelta(polling_period_str, &backup_polling_period_));
+ CHECK(StringToTimeDelta(polling_period_str,
+ &settings_.backup_polling_period));
store.GetBoolean(config_keys::kWifiAutoSetupEnabled,
- &wifi_auto_setup_enabled_);
+ &settings_.wifi_auto_setup_enabled);
std::string embedded_code_path;
if (store.GetString(config_keys::kEmbeddedCodePath, &embedded_code_path)) {
- embedded_code_path_ = base::FilePath(embedded_code_path);
- if (!embedded_code_path_.empty())
- pairing_modes_ = {PairingType::kEmbeddedCode};
+ settings_.embedded_code_path = base::FilePath(embedded_code_path);
+ if (!settings_.embedded_code_path.empty())
+ settings_.pairing_modes = {PairingType::kEmbeddedCode};
}
std::string modes_str;
@@ -163,25 +196,26 @@
CHECK(StringToEnum(mode, &pairing_mode));
pairing_modes.insert(pairing_mode);
}
- pairing_modes_ = std::move(pairing_modes);
+ settings_.pairing_modes = std::move(pairing_modes);
}
// Empty name set by user or server is allowed, still we expect some
// meaningfull config value.
- store.GetString(config_keys::kName, &name_);
- CHECK(!name_.empty());
+ store.GetString(config_keys::kName, &settings_.name);
+ CHECK(!settings_.name.empty());
- store.GetString(config_keys::kDescription, &description_);
- store.GetString(config_keys::kLocation, &location_);
+ store.GetString(config_keys::kDescription, &settings_.description);
+ store.GetString(config_keys::kLocation, &settings_.location);
store.GetString(config_keys::kLocalAnonymousAccessRole,
- &local_anonymous_access_role_);
- CHECK(IsValidAccessRole(local_anonymous_access_role_))
- << "Invalid role: " << local_anonymous_access_role_;
+ &settings_.local_anonymous_access_role);
+ CHECK(IsValidAccessRole(settings_.local_anonymous_access_role))
+ << "Invalid role: " << settings_.local_anonymous_access_role;
store.GetBoolean(config_keys::kLocalDiscoveryEnabled,
- &local_discovery_enabled_);
- store.GetBoolean(config_keys::kLocalPairingEnabled, &local_pairing_enabled_);
+ &settings_.local_discovery_enabled);
+ store.GetBoolean(config_keys::kLocalPairingEnabled,
+ &settings_.local_pairing_enabled);
change.LoadState();
}
@@ -247,23 +281,25 @@
if (!storage_)
return false;
base::DictionaryValue dict;
- dict.SetString(config_keys::kClientId, client_id_);
- dict.SetString(config_keys::kClientSecret, client_secret_);
- dict.SetString(config_keys::kApiKey, api_key_);
- dict.SetString(config_keys::kOAuthURL, oauth_url_);
- dict.SetString(config_keys::kServiceURL, service_url_);
- dict.SetString(config_keys::kRefreshToken, refresh_token_);
- dict.SetString(config_keys::kDeviceId, device_id_);
- dict.SetString(config_keys::kRobotAccount, robot_account_);
- dict.SetString(config_keys::kLastConfiguredSsid, last_configured_ssid_);
- dict.SetString(config_keys::kName, name_);
- dict.SetString(config_keys::kDescription, description_);
- dict.SetString(config_keys::kLocation, location_);
+ dict.SetString(config_keys::kClientId, settings_.client_id);
+ dict.SetString(config_keys::kClientSecret, settings_.client_secret);
+ dict.SetString(config_keys::kApiKey, settings_.api_key);
+ dict.SetString(config_keys::kOAuthURL, settings_.oauth_url);
+ dict.SetString(config_keys::kServiceURL, settings_.service_url);
+ dict.SetString(config_keys::kRefreshToken, settings_.refresh_token);
+ dict.SetString(config_keys::kDeviceId, settings_.device_id);
+ dict.SetString(config_keys::kRobotAccount, settings_.robot_account);
+ dict.SetString(config_keys::kLastConfiguredSsid,
+ settings_.last_configured_ssid);
+ dict.SetString(config_keys::kName, settings_.name);
+ dict.SetString(config_keys::kDescription, settings_.description);
+ dict.SetString(config_keys::kLocation, settings_.location);
dict.SetString(config_keys::kLocalAnonymousAccessRole,
- local_anonymous_access_role_);
+ settings_.local_anonymous_access_role);
dict.SetBoolean(config_keys::kLocalDiscoveryEnabled,
- local_discovery_enabled_);
- dict.SetBoolean(config_keys::kLocalPairingEnabled, local_pairing_enabled_);
+ settings_.local_discovery_enabled);
+ dict.SetBoolean(config_keys::kLocalPairingEnabled,
+ settings_.local_pairing_enabled);
return storage_->Save(dict);
}
@@ -278,7 +314,7 @@
LOG(ERROR) << "Invalid role: " << role;
return false;
}
- config_->local_anonymous_access_role_ = role;
+ settings_->local_anonymous_access_role = role;
return true;
}
@@ -288,7 +324,7 @@
if (save_)
config_->Save();
for (const auto& cb : config_->on_changed_)
- cb.Run(*config_);
+ cb.Run(*settings_);
config_ = nullptr;
}
diff --git a/libweave/src/buffet_config.h b/libweave/src/buffet_config.h
index d384b89..d0296da 100644
--- a/libweave/src/buffet_config.h
+++ b/libweave/src/buffet_config.h
@@ -20,20 +20,46 @@
class StorageInterface;
+struct Settings {
+ std::string client_id;
+ std::string client_secret;
+ std::string api_key;
+ std::string oauth_url;
+ std::string service_url;
+ std::string name;
+ std::string description;
+ std::string location;
+ std::string local_anonymous_access_role;
+ bool local_discovery_enabled{true};
+ bool local_pairing_enabled{true};
+ std::string oem_name;
+ std::string model_name;
+ std::string model_id;
+ std::string device_kind;
+ base::TimeDelta polling_period;
+ base::TimeDelta backup_polling_period;
+
+ bool wifi_auto_setup_enabled{true};
+ std::set<PairingType> pairing_modes;
+ base::FilePath embedded_code_path;
+
+ std::string device_id;
+ std::string refresh_token;
+ std::string robot_account;
+ std::string last_configured_ssid;
+};
+
// Handles reading buffet config and state files.
class BuffetConfig final {
public:
- using OnChangedCallback = base::Callback<void(const BuffetConfig&)>;
+ using OnChangedCallback = base::Callback<void(const Settings&)>;
explicit BuffetConfig(std::unique_ptr<StorageInterface> storage);
explicit BuffetConfig(const base::FilePath& state_path);
- void AddOnChangedCallback(const OnChangedCallback& callback) {
- on_changed_.push_back(callback);
- // Force to read current state.
- callback.Run(*this);
- }
+ void AddOnChangedCallback(const OnChangedCallback& callback);
+ const Settings& GetSettings() const;
void Load(const base::FilePath& config_path);
void Load(const chromeos::KeyValueStore& store);
@@ -44,44 +70,45 @@
// object.
class Transaction final {
public:
- explicit Transaction(BuffetConfig* config) : config_(config) {
+ explicit Transaction(BuffetConfig* config)
+ : config_(config), settings_(&config->settings_) {
CHECK(config_);
}
~Transaction();
- void set_client_id(const std::string& id) { config_->client_id_ = id; }
+ void set_client_id(const std::string& id) { settings_->client_id = id; }
void set_client_secret(const std::string& secret) {
- config_->client_secret_ = secret;
+ settings_->client_secret = secret;
}
- void set_api_key(const std::string& key) { config_->api_key_ = key; }
- void set_oauth_url(const std::string& url) { config_->oauth_url_ = url; }
+ void set_api_key(const std::string& key) { settings_->api_key = key; }
+ void set_oauth_url(const std::string& url) { settings_->oauth_url = url; }
void set_service_url(const std::string& url) {
- config_->service_url_ = url;
+ settings_->service_url = url;
}
- void set_name(const std::string& name) { config_->name_ = name; }
+ void set_name(const std::string& name) { settings_->name = name; }
void set_description(const std::string& description) {
- config_->description_ = description;
+ settings_->description = description;
}
void set_location(const std::string& location) {
- config_->location_ = location;
+ settings_->location = location;
}
bool set_local_anonymous_access_role(const std::string& role);
void set_local_discovery_enabled(bool enabled) {
- config_->local_discovery_enabled_ = enabled;
+ settings_->local_discovery_enabled = enabled;
}
void set_local_pairing_enabled(bool enabled) {
- config_->local_pairing_enabled_ = enabled;
+ settings_->local_pairing_enabled = enabled;
}
- void set_device_id(const std::string& id) { config_->device_id_ = id; }
+ void set_device_id(const std::string& id) { settings_->device_id = id; }
void set_refresh_token(const std::string& token) {
- config_->refresh_token_ = token;
+ settings_->refresh_token = token;
}
void set_robot_account(const std::string& account) {
- config_->robot_account_ = account;
+ settings_->robot_account = account;
}
void set_last_configured_ssid(const std::string& ssid) {
- config_->last_configured_ssid_ = ssid;
+ settings_->last_configured_ssid = ssid;
}
void Commit();
@@ -90,74 +117,57 @@
friend class BuffetConfig;
void LoadState();
BuffetConfig* config_;
+ Settings* settings_;
bool save_{true};
};
- const std::string& client_id() const { return client_id_; }
- const std::string& client_secret() const { return client_secret_; }
- const std::string& api_key() const { return api_key_; }
- const std::string& oauth_url() const { return oauth_url_; }
- const std::string& service_url() const { return service_url_; }
- const std::string& oem_name() const { return oem_name_; }
- const std::string& model_name() const { return model_name_; }
- const std::string& model_id() const { return model_id_; }
- const std::string& device_kind() const { return device_kind_; }
- base::TimeDelta polling_period() const { return polling_period_; }
+ const std::string& client_id() const { return settings_.client_id; }
+ const std::string& client_secret() const { return settings_.client_secret; }
+ const std::string& api_key() const { return settings_.api_key; }
+ const std::string& oauth_url() const { return settings_.oauth_url; }
+ const std::string& service_url() const { return settings_.service_url; }
+ const std::string& oem_name() const { return settings_.oem_name; }
+ const std::string& model_name() const { return settings_.model_name; }
+ const std::string& model_id() const { return settings_.model_id; }
+ const std::string& device_kind() const { return settings_.device_kind; }
+ base::TimeDelta polling_period() const { return settings_.polling_period; }
base::TimeDelta backup_polling_period() const {
- return backup_polling_period_;
+ return settings_.backup_polling_period;
}
- bool wifi_auto_setup_enabled() const { return wifi_auto_setup_enabled_; }
- const std::set<PairingType>& pairing_modes() const { return pairing_modes_; }
+ bool wifi_auto_setup_enabled() const {
+ return settings_.wifi_auto_setup_enabled;
+ }
+ const std::set<PairingType>& pairing_modes() const {
+ return settings_.pairing_modes;
+ }
const base::FilePath& embedded_code_path() const {
- return embedded_code_path_;
+ return settings_.embedded_code_path;
}
- const std::string& name() const { return name_; }
- const std::string& description() const { return description_; }
- const std::string& location() const { return location_; }
+ const std::string& name() const { return settings_.name; }
+ const std::string& description() const { return settings_.description; }
+ const std::string& location() const { return settings_.location; }
const std::string& local_anonymous_access_role() const {
- return local_anonymous_access_role_;
+ return settings_.local_anonymous_access_role;
}
- bool local_pairing_enabled() const { return local_pairing_enabled_; }
- bool local_discovery_enabled() const { return local_discovery_enabled_; }
+ bool local_pairing_enabled() const { return settings_.local_pairing_enabled; }
+ bool local_discovery_enabled() const {
+ return settings_.local_discovery_enabled;
+ }
- const std::string& device_id() const { return device_id_; }
- const std::string& refresh_token() const { return refresh_token_; }
- const std::string& robot_account() const { return robot_account_; }
+ const std::string& device_id() const { return settings_.device_id; }
+ const std::string& refresh_token() const { return settings_.refresh_token; }
+ const std::string& robot_account() const { return settings_.robot_account; }
const std::string& last_configured_ssid() const {
- return last_configured_ssid_;
+ return settings_.last_configured_ssid;
}
private:
bool Save();
+ static Settings CreateDefaultSettings();
- std::string client_id_{"58855907228.apps.googleusercontent.com"};
- std::string client_secret_{"eHSAREAHrIqPsHBxCE9zPPBi"};
- std::string api_key_{"AIzaSyDSq46gG-AxUnC3zoqD9COIPrjolFsMfMA"};
- std::string oauth_url_{"https://accounts.google.com/o/oauth2/"};
- std::string service_url_{"https://www.googleapis.com/clouddevices/v1/"};
- std::string name_{"Developer device"};
- std::string description_;
- std::string location_;
- std::string local_anonymous_access_role_{"viewer"};
- bool local_discovery_enabled_{true};
- bool local_pairing_enabled_{true};
- std::string oem_name_{"Chromium"};
- std::string model_name_{"Brillo"};
- std::string model_id_{"AAAAA"};
- std::string device_kind_{"vendor"};
- base::TimeDelta polling_period_{base::TimeDelta::FromSeconds(7)};
- base::TimeDelta backup_polling_period_{base::TimeDelta::FromMinutes(30)};
-
- bool wifi_auto_setup_enabled_{true};
- std::set<PairingType> pairing_modes_{PairingType::kPinCode};
- base::FilePath embedded_code_path_;
-
- std::string device_id_;
- std::string refresh_token_;
- std::string robot_account_;
- std::string last_configured_ssid_;
+ Settings settings_ = CreateDefaultSettings();
// Serialization interface to save and load buffet state.
std::unique_ptr<StorageInterface> storage_;
diff --git a/libweave/src/buffet_config_unittest.cc b/libweave/src/buffet_config_unittest.cc
index a286c34..7811814 100644
--- a/libweave/src/buffet_config_unittest.cc
+++ b/libweave/src/buffet_config_unittest.cc
@@ -31,7 +31,7 @@
base::Bind(&BuffetConfigTest::OnConfigChanged, base::Unretained(this)));
}
- MOCK_METHOD1(OnConfigChanged, void(const BuffetConfig&));
+ MOCK_METHOD1(OnConfigChanged, void(const Settings&));
StorageInterface* storage_{nullptr};
std::unique_ptr<BuffetConfig> config_;
diff --git a/libweave/src/privet/cloud_delegate.cc b/libweave/src/privet/cloud_delegate.cc
index c5efb4d..9ef680d 100644
--- a/libweave/src/privet/cloud_delegate.cc
+++ b/libweave/src/privet/cloud_delegate.cc
@@ -249,7 +249,7 @@
CHECK(command_owners_.erase(command->GetID()));
}
- void OnConfigChanged(const BuffetConfig&) { NotifyOnDeviceInfoChanged(); }
+ void OnConfigChanged(const Settings&) { NotifyOnDeviceInfoChanged(); }
void OnRegistrationChanged(RegistrationStatus status) {
if (status == RegistrationStatus::kUnconfigured) {