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) {