diff options
Diffstat (limited to 'google_apis/gcm/engine/user_list_unittest.cc')
-rw-r--r-- | google_apis/gcm/engine/user_list_unittest.cc | 370 |
1 files changed, 0 insertions, 370 deletions
diff --git a/google_apis/gcm/engine/user_list_unittest.cc b/google_apis/gcm/engine/user_list_unittest.cc deleted file mode 100644 index b8c4c62..0000000 --- a/google_apis/gcm/engine/user_list_unittest.cc +++ /dev/null @@ -1,370 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "google_apis/gcm/engine/user_list.h" - -#include <string> -#include <vector> - -#include "base/bind.h" -#include "base/callback_forward.h" -#include "base/files/file_path.h" -#include "base/files/scoped_temp_dir.h" -#include "base/memory/scoped_ptr.h" -#include "base/message_loop/message_loop.h" -#include "base/run_loop.h" -#include "google_apis/gcm/engine/gcm_store_impl.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace gcm { - -namespace { - -class GCMClientDelegate : public GCMClient::Delegate { - public: - explicit GCMClientDelegate(const std::string& username); - virtual ~GCMClientDelegate(); - - const std::string& GetUsername() const { return username_; } - - // Overrides of GCMClientDelegate: - virtual void OnCheckInFinished(const GCMClient::CheckinInfo& checkin_info, - GCMClient::Result result) OVERRIDE {} - virtual void OnRegisterFinished(const std::string& app_id, - const std::string& registration_id, - GCMClient::Result result) OVERRIDE {} - virtual void OnSendFinished(const std::string& app_id, - const std::string& message_id, - GCMClient::Result result) OVERRIDE {} - virtual void OnMessageReceived(const std::string& app_id, - const GCMClient::IncomingMessage& message) - OVERRIDE {} - virtual void OnMessagesDeleted(const std::string& app_id) OVERRIDE {} - virtual void OnMessageSendError(const std::string& app_id, - const std::string& message_id, - GCMClient::Result result) OVERRIDE {} - virtual GCMClient::CheckinInfo GetCheckinInfo() const OVERRIDE { - return GCMClient::CheckinInfo(); - } - virtual void OnGCMReady() OVERRIDE {} - - private: - std::string username_; -}; - -} // namespace - -class UserListTest : public testing::Test { - public: - UserListTest(); - virtual ~UserListTest(); - - virtual void SetUp() OVERRIDE; - - static size_t GetListSize(const UserList* user_list); - void SetDelegateCallback(const std::string& username, - int64 user_serial_number); - - scoped_ptr<UserList> BuildUserList(); - - void PumpLoop(); - - void UpdateCallback(bool success); - - void Initialize(UserList* user_list, scoped_ptr<GCMStore::LoadResult> result); - - void ResetLoop(); - - protected: - int64 last_assigned_serial_number_; - std::string last_assigned_username_; - scoped_ptr<GCMStore> gcm_store_; - - private: - base::ScopedTempDir temp_directory_; - base::MessageLoop message_loop_; - scoped_ptr<base::RunLoop> run_loop_; -}; - -UserListTest::UserListTest() - : last_assigned_serial_number_(gcm::kInvalidSerialNumber) {} - -UserListTest::~UserListTest() {} - -void UserListTest::SetUp() { - ASSERT_TRUE(temp_directory_.CreateUniqueTempDir()); -} - -// static -size_t UserListTest::GetListSize(const UserList* user_list) { - return user_list->delegates_.size(); -} - -void UserListTest::SetDelegateCallback(const std::string& username, - int64 user_serial_number) { - last_assigned_username_ = username; - last_assigned_serial_number_ = user_serial_number; - ResetLoop(); -} - -scoped_ptr<UserList> UserListTest::BuildUserList() { - gcm_store_.reset(new GCMStoreImpl(true, - temp_directory_.path(), - message_loop_.message_loop_proxy())); - return scoped_ptr<UserList>(new UserList(gcm_store_.get())); -} - -void UserListTest::Initialize(UserList* user_list, - scoped_ptr<GCMStore::LoadResult> result) { - ASSERT_TRUE(result->success); - user_list->Initialize(result->serial_number_mappings); - ResetLoop(); -} - -void UserListTest::ResetLoop() { - if (run_loop_ && run_loop_->running()) - run_loop_->Quit(); -} - -void UserListTest::PumpLoop() { - run_loop_.reset(new base::RunLoop); - run_loop_->Run(); -} - -void UserListTest::UpdateCallback(bool success) { ASSERT_TRUE(success); } - -GCMClientDelegate::GCMClientDelegate(const std::string& username) - : username_(username) {} - -GCMClientDelegate::~GCMClientDelegate() {} - -// Make sure it is possible to add a delegate, and that it is assigned a serial -// number. -TEST_F(UserListTest, SetDelegateAndCheckSerialNumberAssignment) { - scoped_ptr<UserList> user_list(BuildUserList()); - gcm_store_->Load(base::Bind( - &UserListTest::Initialize, base::Unretained(this), user_list.get())); - PumpLoop(); - - // First adding a delegate. - scoped_ptr<GCMClientDelegate> delegate(new GCMClientDelegate("test_user_1")); - user_list->SetDelegate( - delegate->GetUsername(), - delegate.get(), - base::Bind(&UserListTest::SetDelegateCallback, base::Unretained(this))); - PumpLoop(); - - // Verify the record was created. - EXPECT_EQ(1u, GetListSize(user_list.get())); - // Verify username and serial number were assigned. - EXPECT_EQ(delegate->GetUsername(), last_assigned_username_); - EXPECT_NE(gcm::kInvalidSerialNumber, last_assigned_serial_number_); - // Check that a serial number was assigned to delegate. - EXPECT_EQ(last_assigned_serial_number_, - user_list->GetSerialNumberForUsername(delegate->GetUsername())); -} - -// Get the delegate that was added to the list by both serial number and -// username. -TEST_F(UserListTest, GetDelegate) { - scoped_ptr<UserList> user_list(BuildUserList()); - gcm_store_->Load(base::Bind( - &UserListTest::Initialize, base::Unretained(this), user_list.get())); - PumpLoop(); - - // Start by adding a delegate and a serial number. - scoped_ptr<GCMClientDelegate> delegate(new GCMClientDelegate("test_user_1")); - user_list->SetDelegate( - delegate->GetUsername(), - delegate.get(), - base::Bind(&UserListTest::SetDelegateCallback, base::Unretained(this))); - PumpLoop(); - - EXPECT_EQ(delegate.get(), - user_list->GetDelegateBySerialNumber(last_assigned_serial_number_)); - EXPECT_EQ(delegate.get(), - user_list->GetDelegateByUsername(last_assigned_username_)); -} - -// Make sure that correct mapping between username of the delegate and a serial -// number is preserved when loading the user list. Also verify that setting a -// delegate after load works correctly. (Finds the existing mapping entry.) -TEST_F(UserListTest, LoadUserEntrySetDelegate) { - scoped_ptr<UserList> user_list(BuildUserList()); - gcm_store_->Load(base::Bind( - &UserListTest::Initialize, base::Unretained(this), user_list.get())); - PumpLoop(); - - // Start by adding a delegate and a serial number. - scoped_ptr<GCMClientDelegate> delegate(new GCMClientDelegate("test_user_1")); - user_list->SetDelegate( - delegate->GetUsername(), - delegate.get(), - base::Bind(&UserListTest::SetDelegateCallback, base::Unretained(this))); - PumpLoop(); - - // Reload the GCM User List. - user_list = BuildUserList().Pass(); - gcm_store_->Load(base::Bind( - &UserListTest::Initialize, base::Unretained(this), user_list.get())); - PumpLoop(); - - // Verify a single record was loaded, with matching username, but no delegate. - EXPECT_EQ(1u, GetListSize(user_list.get())); - int64 serial_number = - user_list->GetSerialNumberForUsername(delegate->GetUsername()); - EXPECT_EQ(last_assigned_serial_number_, serial_number); - EXPECT_EQ(NULL, user_list->GetDelegateBySerialNumber(serial_number)); - EXPECT_EQ(NULL, user_list->GetDelegateByUsername(delegate->GetUsername())); - - // After loading is complete, Delegates will start adding itself looking for - // their serial numbers. Check that correct matches are found and new records - // not created. - user_list->SetDelegate( - delegate->GetUsername(), - delegate.get(), - base::Bind(&UserListTest::SetDelegateCallback, base::Unretained(this))); - PumpLoop(); - - EXPECT_EQ(1u, GetListSize(user_list.get())); - serial_number = - user_list->GetSerialNumberForUsername(delegate->GetUsername()); - EXPECT_EQ(last_assigned_serial_number_, serial_number); - EXPECT_EQ(delegate.get(), - user_list->GetDelegateBySerialNumber(serial_number)); - EXPECT_EQ(delegate.get(), - user_list->GetDelegateByUsername(delegate->GetUsername())); -} - -// Check that it is possible to add multiple delegates to the user list. -TEST_F(UserListTest, AddMultipleDelegates) { - scoped_ptr<UserList> user_list(BuildUserList()); - gcm_store_->Load(base::Bind( - &UserListTest::Initialize, base::Unretained(this), user_list.get())); - PumpLoop(); - - // Start by adding a delegate and a serial number. - scoped_ptr<GCMClientDelegate> delegate1(new GCMClientDelegate("test_user_1")); - user_list->SetDelegate( - delegate1->GetUsername(), - delegate1.get(), - base::Bind(&UserListTest::SetDelegateCallback, base::Unretained(this))); - PumpLoop(); - - int64 serial_number1 = last_assigned_serial_number_; - - scoped_ptr<GCMClientDelegate> delegate2(new GCMClientDelegate("test_user_2")); - user_list->SetDelegate( - delegate2->GetUsername(), - delegate2.get(), - base::Bind(&UserListTest::SetDelegateCallback, base::Unretained(this))); - PumpLoop(); - - int64 serial_number2 = last_assigned_serial_number_; - - // Ensuring that serial numbers are different. - EXPECT_EQ(2u, GetListSize(user_list.get())); - - // Reading the user entries. - user_list = BuildUserList().Pass(); - gcm_store_->Load(base::Bind( - &UserListTest::Initialize, base::Unretained(this), user_list.get())); - PumpLoop(); - - // Serial numbers stay the same, but there are no delegates assigned. - EXPECT_EQ(2u, GetListSize(user_list.get())); - EXPECT_EQ(NULL, user_list->GetDelegateByUsername(delegate1->GetUsername())); - EXPECT_EQ(NULL, user_list->GetDelegateBySerialNumber(serial_number1)); - EXPECT_EQ(NULL, user_list->GetDelegateByUsername(delegate2->GetUsername())); - EXPECT_EQ(NULL, user_list->GetDelegateBySerialNumber(serial_number2)); - - // Setting and checking a delegate on the second user. - user_list->SetDelegate( - delegate2->GetUsername(), - delegate2.get(), - base::Bind(&UserListTest::SetDelegateCallback, base::Unretained(this))); - PumpLoop(); - - // First user still does not have a delegate. - EXPECT_EQ(NULL, user_list->GetDelegateByUsername(delegate1->GetUsername())); - EXPECT_EQ(NULL, user_list->GetDelegateBySerialNumber(serial_number1)); - // Second user has a delegate set. - EXPECT_EQ(delegate2.get(), - user_list->GetDelegateByUsername(delegate2->GetUsername())); - EXPECT_EQ(delegate2.get(), - user_list->GetDelegateBySerialNumber(serial_number2)); -} - -// Adding a delegate before the user list is initialized. Verifies that serial -// number assignment is postponed until after initialization. -TEST_F(UserListTest, AddDelegateThenInitializeWithoutSerialNumber) { - scoped_ptr<UserList> user_list(BuildUserList()); - - // Add a delegate first. - scoped_ptr<GCMClientDelegate> delegate(new GCMClientDelegate("test_user_1")); - user_list->SetDelegate( - delegate->GetUsername(), - delegate.get(), - base::Bind(&UserListTest::SetDelegateCallback, base::Unretained(this))); - - EXPECT_EQ(gcm::kInvalidSerialNumber, last_assigned_serial_number_); - EXPECT_EQ("", last_assigned_username_); - - // Now run the initialization. - gcm_store_->Load(base::Bind( - &UserListTest::Initialize, base::Unretained(this), user_list.get())); - // Need to pump twice, due to initialization triggering additional set of - // callbacks to be run. - PumpLoop(); - PumpLoop(); - - EXPECT_EQ(last_assigned_serial_number_, - user_list->GetSerialNumberForUsername(delegate->GetUsername())); - EXPECT_EQ(delegate->GetUsername(), last_assigned_username_); -} - -// Adding a delegate that already has a serial number on a subsequent restart of -// the user list and prior to initialization. Expects to assing correct serial -// number based on existing mappings. -TEST_F(UserListTest, AddDelegateThenInitializeWithSerialNumber) { - scoped_ptr<UserList> user_list(BuildUserList()); - gcm_store_->Load(base::Bind( - &UserListTest::Initialize, base::Unretained(this), user_list.get())); - PumpLoop(); - - // First add a delegate to the list so that serial number is persisted. - scoped_ptr<GCMClientDelegate> delegate(new GCMClientDelegate("test_user_1")); - user_list->SetDelegate( - delegate->GetUsername(), - delegate.get(), - base::Bind(&UserListTest::SetDelegateCallback, base::Unretained(this))); - PumpLoop(); - - last_assigned_serial_number_ = gcm::kInvalidSerialNumber; - last_assigned_username_ = ""; - - // Resetting the user list to make sure it is not initialized. - user_list = BuildUserList().Pass(); - - // Add a delegate again, this time no callback is expected until the list is - // initialized. - user_list->SetDelegate( - delegate->GetUsername(), - delegate.get(), - base::Bind(&UserListTest::SetDelegateCallback, base::Unretained(this))); - - // Now run the initialization. - gcm_store_->Load(base::Bind( - &UserListTest::Initialize, base::Unretained(this), user_list.get())); - // Need to pump twice, due to initialization triggering additional set of - // callbacks to be run. - PumpLoop(); - PumpLoop(); - - EXPECT_EQ(last_assigned_serial_number_, - user_list->GetSerialNumberForUsername(delegate->GetUsername())); - EXPECT_EQ(delegate->GetUsername(), last_assigned_username_); -} - -} // namespace gcm |