diff options
author | Vitaly Buka <vitalybuka@google.com> | 2016-01-12 12:22:04 -0800 |
---|---|---|
committer | Vitaly Buka <vitalybuka@google.com> | 2016-01-12 12:22:04 -0800 |
commit | 190346d65ac92f65cf5fd30b35e0e6a19db218e6 (patch) | |
tree | 6b728cdcc7147082d03a460180106176ad7ac312 | |
parent | 02650001988801f874b9bcea46efab1303b902b1 (diff) | |
parent | 0a8ab9973e1fdf6b41d8f7b49529c9bd97a9071c (diff) | |
download | libweave-190346d65ac92f65cf5fd30b35e0e6a19db218e6.tar.gz |
Merge remote-tracking branch 'weave/master' into aosp
0a8ab99 Don't allow registration of registered device
-rw-r--r-- | src/device_registration_info.cc | 11 | ||||
-rw-r--r-- | src/device_registration_info_unittest.cc | 35 | ||||
-rw-r--r-- | src/weave_unittest.cc | 11 |
3 files changed, 51 insertions, 6 deletions
diff --git a/src/device_registration_info.cc b/src/device_registration_info.cc index a91ae6f..c374527 100644 --- a/src/device_registration_info.cc +++ b/src/device_registration_info.cc @@ -36,6 +36,7 @@ namespace weave { const char kErrorDomainOAuth2[] = "oauth2"; const char kErrorDomainGCD[] = "gcd"; const char kErrorDomainGCDServer[] = "gcd_server"; +const char kErrorAlreayRegistered[] = "already_registered"; namespace { @@ -523,6 +524,14 @@ void DeviceRegistrationInfo::RegisterDeviceError(const DoneCallback& callback, void DeviceRegistrationInfo::RegisterDevice(const std::string& ticket_id, const DoneCallback& callback) { + if (HaveRegistrationCredentials()) { + ErrorPtr error; + Error::AddTo(&error, FROM_HERE, errors::kErrorDomain, + kErrorAlreayRegistered, + "Unable to register already registered device"); + return RegisterDeviceError(callback, std::move(error)); + } + std::unique_ptr<base::DictionaryValue> device_draft = BuildDeviceResource(); CHECK(device_draft); @@ -835,7 +844,7 @@ bool DeviceRegistrationInfo::UpdateServiceConfig( const std::string& service_url, ErrorPtr* error) { if (HaveRegistrationCredentials()) { - Error::AddTo(error, FROM_HERE, errors::kErrorDomain, "already_registered", + Error::AddTo(error, FROM_HERE, errors::kErrorDomain, kErrorAlreayRegistered, "Unable to change config for registered device"); return false; } diff --git a/src/device_registration_info_unittest.cc b/src/device_registration_info_unittest.cc index ea81057..595d749 100644 --- a/src/device_registration_info_unittest.cc +++ b/src/device_registration_info_unittest.cc @@ -153,11 +153,14 @@ class DeviceRegistrationInfoTest : public ::testing::Test { dev_reg_->Start(); } - void ReloadSettings() { + void ReloadSettings(bool registered = true) { base::DictionaryValue dict; - dict.SetString("refresh_token", test_data::kRefreshToken); - dict.SetString("cloud_id", test_data::kCloudId); - dict.SetString("robot_account", test_data::kRobotAccountEmail); + dict.SetInteger("version", 1); + if (registered) { + dict.SetString("refresh_token", test_data::kRefreshToken); + dict.SetString("cloud_id", test_data::kCloudId); + dict.SetString("robot_account", test_data::kRobotAccountEmail); + } dict.SetString("device_id", test_data::kDeviceId); std::string json_string; base::JSONWriter::WriteWithOptions( @@ -373,7 +376,7 @@ TEST_F(DeviceRegistrationInfoTest, GetDeviceInfo) { } TEST_F(DeviceRegistrationInfoTest, RegisterDevice) { - ReloadSettings(); + ReloadSettings(false); auto json_traits = CreateDictionaryValue(R"({ 'base': { @@ -558,6 +561,28 @@ TEST_F(DeviceRegistrationInfoTest, RegisterDevice) { EXPECT_TRUE(done); } +TEST_F(DeviceRegistrationInfoTest, ReRegisterDevice) { + ReloadSettings(); + + bool done = false; + dev_reg_->RegisterDevice( + test_data::kClaimTicketId, base::Bind([this, &done](ErrorPtr error) { + EXPECT_TRUE(error->HasError("weave", "already_registered")); + done = true; + task_runner_.Break(); + EXPECT_EQ(GcdState::kConnecting, GetGcdState()); + + // Validate the device info saved to storage... + EXPECT_EQ(test_data::kCloudId, dev_reg_->GetSettings().cloud_id); + EXPECT_EQ(test_data::kRefreshToken, + dev_reg_->GetSettings().refresh_token); + EXPECT_EQ(test_data::kRobotAccountEmail, + dev_reg_->GetSettings().robot_account); + })); + task_runner_.Run(); + EXPECT_TRUE(done); +} + TEST_F(DeviceRegistrationInfoTest, OOBRegistrationStatus) { // After we've been initialized, we should be either offline or // unregistered, depending on whether or not we've found credentials. diff --git a/src/weave_unittest.cc b/src/weave_unittest.cc index 987b0c4..b106aab 100644 --- a/src/weave_unittest.cc +++ b/src/weave_unittest.cc @@ -433,6 +433,17 @@ TEST_F(WeaveBasicTest, Register) { })); task_runner_.Run(); EXPECT_TRUE(done); + + done = false; + device_->Register( + "TICKET_ID2", base::Bind([this, &done](ErrorPtr error) { + EXPECT_TRUE(error->HasError("weave", "already_registered")); + done = true; + task_runner_.Break(); + EXPECT_EQ("CLOUD_ID", device_->GetSettings().cloud_id); + })); + task_runner_.Run(); + EXPECT_TRUE(done); } class WeaveWiFiSetupTest : public WeaveTest { |