buffet: Added local_discovery_enabled and local_pairing_enabled options Options will be added to base state and modified by base.updateBaseConfiguration command. Renamed anonymous_access_role to local_anonymous_access_role for consistency. BUG=brillo:810 TEST='FEATURES=test emerge-storm buffet' Change-Id: I97476d75260898fea110652b85019d6eaa9cc58a Reviewed-on: https://chromium-review.googlesource.com/270808 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/buffet_config.cc b/buffet/buffet_config.cc index bcab1ef..a97b654 100644 --- a/buffet/buffet_config.cc +++ b/buffet/buffet_config.cc
@@ -57,7 +57,9 @@ const char kName[] = "name"; const char kDescription[] = "description"; const char kLocation[] = "location"; -const char kAnonymousAccessRole[] = "anonymous_access_role"; +const char kLocalAnonymousAccessRole[] = "local_anonymous_access_role"; +const char kLocalDiscoveryEnabled[] = "local_discovery_enabled"; +const char kLocalPairingEnabled[] = "local_pairing_enabled"; const char kOemName[] = "oem_name"; const char kModelName[] = "model_name"; const char kModelId[] = "model_id"; @@ -107,22 +109,32 @@ store.GetString(config_keys::kDescription, &description_); store.GetString(config_keys::kLocation, &location_); - store.GetString(config_keys::kAnonymousAccessRole, &anonymous_access_role_); - CHECK(IsValidAccessRole(anonymous_access_role_)) - << "Invalid role: " << anonymous_access_role_; + store.GetString(config_keys::kLocalAnonymousAccessRole, + &local_anonymous_access_role_); + CHECK(IsValidAccessRole(local_anonymous_access_role_)) + << "Invalid role: " << local_anonymous_access_role_; + + store.GetBoolean(config_keys::kLocalDiscoveryEnabled, + &local_discovery_enabled_); + store.GetBoolean(config_keys::kLocalPairingEnabled, &local_pairing_enabled_); } -void BuffetConfig::set_name(const std::string& name) { - CHECK(!name.empty()); - name_ = name; -} - -void BuffetConfig::set_anonymous_access_role(const std::string& role) { - if (IsValidAccessRole(role)) { - anonymous_access_role_ = role; - } else { - LOG(ERROR) << "Invalid role: " << role; +bool BuffetConfig::set_name(const std::string& name) { + if (name.empty()) { + LOG(ERROR) << "Invalid name: " << name; + return false; } + name_ = name; + return true; +} + +bool BuffetConfig::set_local_anonymous_access_role(const std::string& role) { + if (!IsValidAccessRole(role)) { + LOG(ERROR) << "Invalid role: " << role; + return false; + } + local_anonymous_access_role_ = role; + return true; } } // namespace buffet
diff --git a/buffet/buffet_config.h b/buffet/buffet_config.h index e3fc6ba..0ebdf8e 100644 --- a/buffet/buffet_config.h +++ b/buffet/buffet_config.h
@@ -33,14 +33,25 @@ const std::string& name() const { return name_; } const std::string& description() const { return description_; } const std::string& location() const { return location_; } - std::string anonymous_access_role() const { return anonymous_access_role_; } + std::string local_anonymous_access_role() const { + return local_anonymous_access_role_; + } + bool local_pairing_enabled() const { return local_pairing_enabled_; } + bool local_discovery_enabled() const { return local_discovery_enabled_; } - void set_name(const std::string& name); + bool set_name(const std::string& name); void set_description(const std::string& description) { description_ = description; } void set_location(const std::string& location) { location_ = location; } - void set_anonymous_access_role(const std::string& role); + + bool set_local_anonymous_access_role(const std::string& role); + void set_local_discovery_enabled(bool enabled) { + local_discovery_enabled_ = enabled; + } + void set_local_pairing_enabled(bool enabled) { + local_pairing_enabled_ = enabled; + } private: std::string client_id_{"58855907228.apps.googleusercontent.com"}; @@ -51,7 +62,9 @@ std::string name_{"Developer device"}; std::string description_; std::string location_; - std::string anonymous_access_role_{"viewer"}; + 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"};
diff --git a/buffet/device_registration_info.cc b/buffet/device_registration_info.cc index 80e7e9b..2fd2bfb 100644 --- a/buffet/device_registration_info.cc +++ b/buffet/device_registration_info.cc
@@ -45,7 +45,9 @@ const char kName[] = "name"; const char kDescription[] = "description"; const char kLocation[] = "location"; -const char kAnonymousAccessRole[] = "anonymous_access_role"; +const char kLocalAnonymousAccessRole[] = "local_anonymous_access_role"; +const char kLocalDiscoveryEnabled[] = "local_discovery_enabled"; +const char kLocalPairingEnabled[] = "local_pairing_enabled"; } // namespace storage_keys } // namespace buffet @@ -189,7 +191,7 @@ // Read all available data before failing. std::string name; - if (dict->GetString(storage_keys::kName, &name) && !name.empty()) + if (dict->GetString(storage_keys::kName, &name)) config_->set_name(name); std::string description; @@ -201,8 +203,18 @@ config_->set_location(location); std::string access_role; - if (dict->GetString(storage_keys::kAnonymousAccessRole, &access_role)) - config_->set_anonymous_access_role(access_role); + if (dict->GetString(storage_keys::kLocalAnonymousAccessRole, &access_role)) + config_->set_local_anonymous_access_role(access_role); + + bool local_discovery_enabled{false}; + if (dict->GetBoolean(storage_keys::kLocalDiscoveryEnabled, + &local_discovery_enabled)) + config_->set_local_discovery_enabled(local_discovery_enabled); + + bool local_pairing_enabled{false}; + if (dict->GetBoolean(storage_keys::kLocalPairingEnabled, + &local_pairing_enabled)) + config_->set_local_pairing_enabled(local_pairing_enabled); dict->GetString(storage_keys::kRefreshToken, &refresh_token_); dict->GetString(storage_keys::kRobotAccount, &device_robot_account_); @@ -233,8 +245,12 @@ dict.SetString(storage_keys::kName, config_->name()); dict.SetString(storage_keys::kDescription, config_->description()); dict.SetString(storage_keys::kLocation, config_->location()); - dict.SetString(storage_keys::kAnonymousAccessRole, - config_->anonymous_access_role()); + dict.SetString(storage_keys::kLocalAnonymousAccessRole, + config_->local_anonymous_access_role()); + dict.SetBoolean(storage_keys::kLocalDiscoveryEnabled, + config_->local_discovery_enabled()); + dict.SetBoolean(storage_keys::kLocalPairingEnabled, + config_->local_pairing_enabled()); return storage_->Save(dict); } @@ -765,17 +781,16 @@ const std::string& description, const std::string& location, chromeos::ErrorPtr* error) { - if (name.empty()) { - chromeos::Error::AddTo(error, FROM_HERE, kErrorDomainBuffet, - "invalid_parameter", "Empty device name"); + if (!config_->set_name(name)) { + chromeos::Error::AddToPrintf(error, FROM_HERE, kErrorDomainBuffet, + "invalid_parameter", "Invalid name: %s", + name.c_str()); return false; } - config_->set_name(name); config_->set_description(description); config_->set_location(location); Save(); - OnConfigChanged(); if (HaveRegistrationCredentials(nullptr)) { @@ -1040,7 +1055,7 @@ manager_->SetName(config_->name()); manager_->SetDescription(config_->description()); manager_->SetLocation(config_->location()); - manager_->SetAnonymousAccessRole(config_->anonymous_access_role()); + manager_->SetAnonymousAccessRole(config_->local_anonymous_access_role()); } void DeviceRegistrationInfo::OnCommandDefsChanged() {
diff --git a/buffet/device_registration_info_unittest.cc b/buffet/device_registration_info_unittest.cc index 417aff4..934ae51 100644 --- a/buffet/device_registration_info_unittest.cc +++ b/buffet/device_registration_info_unittest.cc
@@ -198,7 +198,9 @@ config_store.SetString("name", "Coffee Pot"); config_store.SetString("description", "Easy to clean"); config_store.SetString("location", "Kitchen"); - config_store.SetString("anonymous_access_role", "viewer"); + config_store.SetString("local_anonymous_access_role", "viewer"); + config_store.SetBoolean("local_local_discovery_enabled", true); + config_store.SetBoolean("local_local_pairing_enabled", false); config_store.SetString("model_id", "AAAAA"); config_store.SetString("oauth_url", test_data::kOAuthURL); config_store.SetString("service_url", test_data::kServiceURL); @@ -241,16 +243,19 @@ } TEST_F(DeviceRegistrationInfoTest, VerifySave) { - base::DictionaryValue data; - data.SetString(storage_keys::kRefreshToken, "d"); - data.SetString(storage_keys::kDeviceId, "e"); - data.SetString(storage_keys::kRobotAccount, "h"); - data.SetString(storage_keys::kName, "k"); - data.SetString(storage_keys::kDescription, "l"); - data.SetString(storage_keys::kLocation, "m"); - data.SetString(storage_keys::kAnonymousAccessRole, "user"); + auto expected = R"({ + 'description': 'l', + 'device_id': 'e', + 'local_anonymous_access_role': 'user', + 'local_discovery_enabled': true, + 'local_pairing_enabled': true, + 'location': 'm', + 'name': 'k', + 'refresh_token': 'd', + 'robot_account': 'h' + })"; - storage_->Save(data); + storage_->Save(*unittests::CreateDictionaryValue(expected)); // This test isn't really trying to test Load, it is just the easiest // way to initialize the properties in dev_reg_. @@ -260,7 +265,8 @@ base::DictionaryValue empty; storage_->Save(empty); EXPECT_TRUE(DeviceRegistrationInfo::TestHelper::Save(dev_reg_.get())); - EXPECT_TRUE(storage_->Load()->Equals(&data)); + + EXPECT_JSON_EQ(expected, *storage_->Load()); } TEST_F(DeviceRegistrationInfoTest, GetOAuthURL) {
diff --git a/buffet/device_registration_storage_keys.h b/buffet/device_registration_storage_keys.h index d48bbf8..5ce8083 100644 --- a/buffet/device_registration_storage_keys.h +++ b/buffet/device_registration_storage_keys.h
@@ -17,7 +17,9 @@ extern const char kName[]; extern const char kDescription[]; extern const char kLocation[]; -extern const char kAnonymousAccessRole[]; +extern const char kLocalAnonymousAccessRole[]; +extern const char kLocalDiscoveryEnabled[]; +extern const char kLocalPairingEnabled[]; } // namespace storage_keys } // namespace buffet