aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVitaly Buka <vitalybuka@google.com>2016-01-12 12:22:04 -0800
committerVitaly Buka <vitalybuka@google.com>2016-01-12 12:22:04 -0800
commit190346d65ac92f65cf5fd30b35e0e6a19db218e6 (patch)
tree6b728cdcc7147082d03a460180106176ad7ac312
parent02650001988801f874b9bcea46efab1303b902b1 (diff)
parent0a8ab9973e1fdf6b41d8f7b49529c9bd97a9071c (diff)
downloadlibweave-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.cc11
-rw-r--r--src/device_registration_info_unittest.cc35
-rw-r--r--src/weave_unittest.cc11
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 {