Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(396)

Unified Diff: chrome/browser/services/gcm/gcm_driver_unittest.cc

Issue 290013011: Move all remaining files to gcm_driver component (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix per feedback Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/services/gcm/gcm_driver.cc ('k') | chrome/browser/services/gcm/gcm_profile_service.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/services/gcm/gcm_driver_unittest.cc
diff --git a/chrome/browser/services/gcm/gcm_driver_unittest.cc b/chrome/browser/services/gcm/gcm_driver_unittest.cc
deleted file mode 100644
index 420e8dd68244d5da4cd3ee16dc521e822e3f1a47..0000000000000000000000000000000000000000
--- a/chrome/browser/services/gcm/gcm_driver_unittest.cc
+++ /dev/null
@@ -1,901 +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 "chrome/browser/services/gcm/gcm_driver.h"
-
-#include "base/bind.h"
-#include "base/bind_helpers.h"
-#include "base/files/scoped_temp_dir.h"
-#include "base/location.h"
-#include "base/message_loop/message_loop.h"
-#include "base/message_loop/message_loop_proxy.h"
-#include "base/run_loop.h"
-#include "base/strings/string_util.h"
-#include "base/test/test_simple_task_runner.h"
-#include "base/threading/thread.h"
-#include "chrome/browser/services/gcm/fake_gcm_app_handler.h"
-#include "chrome/browser/services/gcm/fake_gcm_client.h"
-#include "chrome/browser/services/gcm/fake_gcm_client_factory.h"
-#include "chrome/browser/services/gcm/gcm_app_handler.h"
-#include "components/gcm_driver/gcm_client_factory.h"
-#include "content/public/browser/browser_thread.h"
-#include "google_apis/gaia/fake_identity_provider.h"
-#include "google_apis/gaia/fake_oauth2_token_service.h"
-#include "net/url_request/url_request_context_getter.h"
-#include "net/url_request/url_request_test_util.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace gcm {
-
-namespace {
-
-const char kTestAccountID1[] = "user1@example.com";
-const char kTestAccountID2[] = "user2@example.com";
-const char kTestAppID1[] = "TestApp1";
-const char kTestAppID2[] = "TestApp2";
-const char kUserID1[] = "user1";
-
-void PumpCurrentLoop() {
- base::MessageLoop::ScopedNestableTaskAllower
- nestable_task_allower(base::MessageLoop::current());
- base::RunLoop().RunUntilIdle();
-}
-
-void PumpUILoop() {
- PumpCurrentLoop();
-}
-
-std::vector<std::string> ToSenderList(const std::string& sender_ids) {
- std::vector<std::string> senders;
- Tokenize(sender_ids, ",", &senders);
- return senders;
-}
-
-} // namespace
-
-class GCMDriverTest : public testing::Test {
- public:
- enum WaitToFinish {
- DO_NOT_WAIT,
- WAIT
- };
-
- GCMDriverTest();
- virtual ~GCMDriverTest();
-
- // testing::Test:
- virtual void SetUp() OVERRIDE;
- virtual void TearDown() OVERRIDE;
-
- GCMDriver* driver() { return driver_.get(); }
- FakeGCMAppHandler* gcm_app_handler() { return gcm_app_handler_.get(); }
- const std::string& registration_id() const { return registration_id_; }
- GCMClient::Result registration_result() const { return registration_result_; }
- const std::string& send_message_id() const { return send_message_id_; }
- GCMClient::Result send_result() const { return send_result_; }
- GCMClient::Result unregistration_result() const {
- return unregistration_result_;
- }
-
- void PumpIOLoop();
-
- void ClearResults();
-
- bool HasAppHandlers() const;
- FakeGCMClient* GetGCMClient();
-
- void CreateDriver(FakeGCMClient::StartMode gcm_client_start_mode);
- void AddAppHandlers();
- void RemoveAppHandlers();
-
- void SignIn(const std::string& account_id);
- void SignOut();
-
- void Register(const std::string& app_id,
- const std::vector<std::string>& sender_ids,
- WaitToFinish wait_to_finish);
- void Send(const std::string& app_id,
- const std::string& receiver_id,
- const GCMClient::OutgoingMessage& message,
- WaitToFinish wait_to_finish);
- void Unregister(const std::string& app_id, WaitToFinish wait_to_finish);
-
- void WaitForAsyncOperation();
-
- private:
- void RegisterCompleted(const std::string& registration_id,
- GCMClient::Result result);
- void SendCompleted(const std::string& message_id, GCMClient::Result result);
- void UnregisterCompleted(GCMClient::Result result);
-
- base::ScopedTempDir temp_dir_;
- FakeOAuth2TokenService token_service_;
- scoped_ptr<FakeIdentityProvider> identity_provider_owner_;
- FakeIdentityProvider* identity_provider_;
- scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
- base::MessageLoopForUI message_loop_;
- base::Thread io_thread_;
- scoped_ptr<GCMDriver> driver_;
- scoped_ptr<FakeGCMAppHandler> gcm_app_handler_;
-
- base::Closure async_operation_completed_callback_;
-
- std::string registration_id_;
- GCMClient::Result registration_result_;
- std::string send_message_id_;
- GCMClient::Result send_result_;
- GCMClient::Result unregistration_result_;
-
- DISALLOW_COPY_AND_ASSIGN(GCMDriverTest);
-};
-
-GCMDriverTest::GCMDriverTest()
- : identity_provider_(NULL),
- task_runner_(new base::TestSimpleTaskRunner()),
- io_thread_("IOThread"),
- registration_result_(GCMClient::UNKNOWN_ERROR),
- send_result_(GCMClient::UNKNOWN_ERROR),
- unregistration_result_(GCMClient::UNKNOWN_ERROR) {
- identity_provider_owner_.reset(new FakeIdentityProvider(&token_service_));
- identity_provider_ = identity_provider_owner_.get();
-}
-
-GCMDriverTest::~GCMDriverTest() {
-}
-
-void GCMDriverTest::SetUp() {
- io_thread_.Start();
- ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
-}
-
-void GCMDriverTest::TearDown() {
- if (!driver_)
- return;
-
- driver_->Shutdown();
- driver_.reset();
- PumpIOLoop();
-
- io_thread_.Stop();
-}
-
-void GCMDriverTest::PumpIOLoop() {
- base::RunLoop run_loop;
- io_thread_.message_loop_proxy()->PostTaskAndReply(
- FROM_HERE,
- base::Bind(&PumpCurrentLoop),
- run_loop.QuitClosure());
- run_loop.Run();
-}
-
-void GCMDriverTest::ClearResults() {
- registration_id_.clear();
- registration_result_ = GCMClient::UNKNOWN_ERROR;
-
- send_message_id_.clear();
- send_result_ = GCMClient::UNKNOWN_ERROR;
-
- unregistration_result_ = GCMClient::UNKNOWN_ERROR;
-}
-
-bool GCMDriverTest::HasAppHandlers() const {
- return !driver_->app_handlers().empty();
-}
-
-FakeGCMClient* GCMDriverTest::GetGCMClient() {
- return static_cast<FakeGCMClient*>(driver_->GetGCMClientForTesting());
-}
-
-void GCMDriverTest::CreateDriver(
- FakeGCMClient::StartMode gcm_client_start_mode) {
- scoped_refptr<net::URLRequestContextGetter> request_context =
- new net::TestURLRequestContextGetter(io_thread_.message_loop_proxy());
- driver_.reset(new GCMDriver(
- scoped_ptr<GCMClientFactory>(new FakeGCMClientFactory(
- gcm_client_start_mode,
- base::MessageLoopProxy::current(),
- io_thread_.message_loop_proxy())).Pass(),
- identity_provider_owner_.PassAs<IdentityProvider>(),
- GCMClient::ChromeBuildInfo(),
- temp_dir_.path(),
- request_context,
- base::MessageLoopProxy::current(),
- io_thread_.message_loop_proxy(),
- task_runner_));
-
- gcm_app_handler_.reset(new FakeGCMAppHandler);
-}
-
-void GCMDriverTest::AddAppHandlers() {
- driver_->AddAppHandler(kTestAppID1, gcm_app_handler_.get());
- driver_->AddAppHandler(kTestAppID2, gcm_app_handler_.get());
-}
-
-void GCMDriverTest::RemoveAppHandlers() {
- driver_->RemoveAppHandler(kTestAppID1);
- driver_->RemoveAppHandler(kTestAppID2);
-}
-
-void GCMDriverTest::SignIn(const std::string& account_id) {
- token_service_.AddAccount(account_id);
- identity_provider_->LogIn(account_id);
- PumpIOLoop();
- PumpUILoop();
-}
-
-void GCMDriverTest::SignOut() {
- identity_provider_->LogOut();
- PumpIOLoop();
- PumpUILoop();
-}
-
-void GCMDriverTest::Register(const std::string& app_id,
- const std::vector<std::string>& sender_ids,
- WaitToFinish wait_to_finish) {
- base::RunLoop run_loop;
- async_operation_completed_callback_ = run_loop.QuitClosure();
- driver_->Register(app_id,
- sender_ids,
- base::Bind(&GCMDriverTest::RegisterCompleted,
- base::Unretained(this)));
- if (wait_to_finish == WAIT)
- run_loop.Run();
-}
-
-void GCMDriverTest::Send(const std::string& app_id,
- const std::string& receiver_id,
- const GCMClient::OutgoingMessage& message,
- WaitToFinish wait_to_finish) {
- base::RunLoop run_loop;
- async_operation_completed_callback_ = run_loop.QuitClosure();
- driver_->Send(app_id,
- receiver_id,
- message,
- base::Bind(&GCMDriverTest::SendCompleted,
- base::Unretained(this)));
- if (wait_to_finish == WAIT)
- run_loop.Run();
-}
-
-void GCMDriverTest::Unregister(const std::string& app_id,
- WaitToFinish wait_to_finish) {
- base::RunLoop run_loop;
- async_operation_completed_callback_ = run_loop.QuitClosure();
- driver_->Unregister(app_id,
- base::Bind(&GCMDriverTest::UnregisterCompleted,
- base::Unretained(this)));
- if (wait_to_finish == WAIT)
- run_loop.Run();
-}
-
-void GCMDriverTest::WaitForAsyncOperation() {
- base::RunLoop run_loop;
- async_operation_completed_callback_ = run_loop.QuitClosure();
- run_loop.Run();
-}
-
-void GCMDriverTest::RegisterCompleted(const std::string& registration_id,
- GCMClient::Result result) {
- registration_id_ = registration_id;
- registration_result_ = result;
- if (!async_operation_completed_callback_.is_null())
- async_operation_completed_callback_.Run();
-}
-
-void GCMDriverTest::SendCompleted(const std::string& message_id,
- GCMClient::Result result) {
- send_message_id_ = message_id;
- send_result_ = result;
- if (!async_operation_completed_callback_.is_null())
- async_operation_completed_callback_.Run();
-}
-
-void GCMDriverTest::UnregisterCompleted(GCMClient::Result result) {
- unregistration_result_ = result;
- if (!async_operation_completed_callback_.is_null())
- async_operation_completed_callback_.Run();
-}
-
-TEST_F(GCMDriverTest, CreateGCMDriverBeforeSignIn) {
- // Create GCMDriver first. GCM is not started.
- CreateDriver(FakeGCMClient::NO_DELAY_START);
- EXPECT_FALSE(driver()->IsStarted());
-
- // Sign in. GCM is still not started.
- SignIn(kTestAccountID1);
- EXPECT_FALSE(driver()->IsStarted());
-
- // GCM will be started only after both sign-in and app handler being
- AddAppHandlers();
- EXPECT_TRUE(driver()->IsStarted());
-}
-
-TEST_F(GCMDriverTest, CreateGCMDriverAfterSignIn) {
- // Sign in. Nothings happens since GCMDriver is not created.
- SignIn(kTestAccountID1);
-
- // Create GCMDriver after sign-in. GCM is not started.
- CreateDriver(FakeGCMClient::NO_DELAY_START);
- EXPECT_FALSE(driver()->IsStarted());
-
- // GCM will be started only after both sign-in and app handler being
- AddAppHandlers();
- EXPECT_TRUE(driver()->IsStarted());
-}
-
-TEST_F(GCMDriverTest, Shutdown) {
- CreateDriver(FakeGCMClient::NO_DELAY_START);
- EXPECT_FALSE(HasAppHandlers());
-
- AddAppHandlers();
- EXPECT_TRUE(HasAppHandlers());
-
- driver()->Shutdown();
- EXPECT_FALSE(HasAppHandlers());
-}
-
-TEST_F(GCMDriverTest, SignInAndSignOutOnGCMEnabled) {
- // By default, GCM is enabled.
- CreateDriver(FakeGCMClient::NO_DELAY_START);
- AddAppHandlers();
-
- // GCMClient should be started after sign-in.
- SignIn(kTestAccountID1);
- EXPECT_TRUE(driver()->IsGCMClientReady());
- EXPECT_EQ(FakeGCMClient::STARTED, GetGCMClient()->status());
-
- // GCMClient should be checked out after sign-out.
- SignOut();
- EXPECT_FALSE(driver()->IsGCMClientReady());
- EXPECT_EQ(FakeGCMClient::CHECKED_OUT, GetGCMClient()->status());
-}
-
-TEST_F(GCMDriverTest, SignInAndSignOutOnGCMDisabled) {
- // By default, GCM is enabled.
- CreateDriver(FakeGCMClient::NO_DELAY_START);
- AddAppHandlers();
-
- // Disable GCM.
- driver()->Disable();
-
- // GCMClient should not be started after sign-in.
- SignIn(kTestAccountID1);
- EXPECT_FALSE(driver()->IsGCMClientReady());
- EXPECT_EQ(FakeGCMClient::UNINITIALIZED, GetGCMClient()->status());
-
- // Check-out should still be performed after sign-out.
- SignOut();
- EXPECT_FALSE(driver()->IsGCMClientReady());
- EXPECT_EQ(FakeGCMClient::CHECKED_OUT, GetGCMClient()->status());
-}
-
-TEST_F(GCMDriverTest, SignOutAndThenSignIn) {
- CreateDriver(FakeGCMClient::NO_DELAY_START);
- AddAppHandlers();
-
- // GCMClient should be started after sign-in.
- SignIn(kTestAccountID1);
- EXPECT_TRUE(driver()->IsGCMClientReady());
- EXPECT_EQ(FakeGCMClient::STARTED, GetGCMClient()->status());
-
- // GCMClient should be checked out after sign-out.
- SignOut();
- EXPECT_FALSE(driver()->IsGCMClientReady());
- EXPECT_EQ(FakeGCMClient::CHECKED_OUT, GetGCMClient()->status());
-
- // Sign-in with a different account.
- SignIn(kTestAccountID2);
-
- // GCMClient should be started again.
- EXPECT_TRUE(driver()->IsGCMClientReady());
- EXPECT_EQ(FakeGCMClient::STARTED, GetGCMClient()->status());
-}
-
-TEST_F(GCMDriverTest, DisableAndReenableGCM) {
- CreateDriver(FakeGCMClient::NO_DELAY_START);
- AddAppHandlers();
- SignIn(kTestAccountID1);
-
- // GCMClient should be started.
- EXPECT_TRUE(driver()->IsGCMClientReady());
- EXPECT_EQ(FakeGCMClient::STARTED, GetGCMClient()->status());
-
- // Disables the GCM.
- driver()->Disable();
- PumpIOLoop();
- PumpUILoop();
-
- // GCMClient should be stopped.
- EXPECT_FALSE(driver()->IsGCMClientReady());
- EXPECT_EQ(FakeGCMClient::STOPPED, GetGCMClient()->status());
-
- // Enables the GCM.
- driver()->Enable();
- PumpIOLoop();
- PumpUILoop();
-
- // GCMClient should be started.
- EXPECT_TRUE(driver()->IsGCMClientReady());
- EXPECT_EQ(FakeGCMClient::STARTED, GetGCMClient()->status());
-
- // Disables the GCM.
- driver()->Disable();
- PumpIOLoop();
- PumpUILoop();
-
- // GCMClient should be stopped.
- EXPECT_FALSE(driver()->IsGCMClientReady());
- EXPECT_EQ(FakeGCMClient::STOPPED, GetGCMClient()->status());
-
- // Sign out.
- SignOut();
-
- // GCMClient should be checked out.
- EXPECT_FALSE(driver()->IsGCMClientReady());
- EXPECT_EQ(FakeGCMClient::CHECKED_OUT, GetGCMClient()->status());
-}
-
-TEST_F(GCMDriverTest, StartOrStopGCMOnDemand) {
- CreateDriver(FakeGCMClient::NO_DELAY_START);
- SignIn(kTestAccountID1);
-
- // GCMClient is not started.
- EXPECT_FALSE(driver()->IsGCMClientReady());
- EXPECT_EQ(FakeGCMClient::UNINITIALIZED, GetGCMClient()->status());
-
- // GCMClient is started after an app handler has been added.
- driver()->AddAppHandler(kTestAppID1, gcm_app_handler());
- PumpIOLoop();
- PumpUILoop();
- EXPECT_TRUE(driver()->IsGCMClientReady());
- EXPECT_EQ(FakeGCMClient::STARTED, GetGCMClient()->status());
-
- // Add another app handler.
- driver()->AddAppHandler(kTestAppID2, gcm_app_handler());
- PumpIOLoop();
- PumpUILoop();
- EXPECT_TRUE(driver()->IsGCMClientReady());
- EXPECT_EQ(FakeGCMClient::STARTED, GetGCMClient()->status());
-
- // GCMClient remains active after one app handler is gone.
- driver()->RemoveAppHandler(kTestAppID1);
- PumpIOLoop();
- PumpUILoop();
- EXPECT_TRUE(driver()->IsGCMClientReady());
- EXPECT_EQ(FakeGCMClient::STARTED, GetGCMClient()->status());
-
- // GCMClient should be stopped after the last app handler is gone.
- driver()->RemoveAppHandler(kTestAppID2);
- PumpIOLoop();
- PumpUILoop();
- EXPECT_FALSE(driver()->IsGCMClientReady());
- EXPECT_EQ(FakeGCMClient::STOPPED, GetGCMClient()->status());
-
- // GCMClient is restarted after an app handler has been added.
- driver()->AddAppHandler(kTestAppID2, gcm_app_handler());
- PumpIOLoop();
- PumpUILoop();
- EXPECT_TRUE(driver()->IsGCMClientReady());
- EXPECT_EQ(FakeGCMClient::STARTED, GetGCMClient()->status());
-}
-
-TEST_F(GCMDriverTest, RegisterFailed) {
- std::vector<std::string> sender_ids;
- sender_ids.push_back("sender1");
-
- CreateDriver(FakeGCMClient::NO_DELAY_START);
-
- // Registration fails when GCM is disabled.
- driver()->Disable();
- Register(kTestAppID1, sender_ids, GCMDriverTest::WAIT);
- EXPECT_TRUE(registration_id().empty());
- EXPECT_EQ(GCMClient::GCM_DISABLED, registration_result());
-
- ClearResults();
-
- // Registration fails when the sign-in does not occur.
- driver()->Enable();
- AddAppHandlers();
- Register(kTestAppID1, sender_ids, GCMDriverTest::WAIT);
- EXPECT_TRUE(registration_id().empty());
- EXPECT_EQ(GCMClient::NOT_SIGNED_IN, registration_result());
-
- ClearResults();
-
- // Registration fails when the no app handler is added.
- RemoveAppHandlers();
- SignIn(kTestAccountID1);
- Register(kTestAppID1, sender_ids, GCMDriverTest::WAIT);
- EXPECT_TRUE(registration_id().empty());
- EXPECT_EQ(GCMClient::UNKNOWN_ERROR, registration_result());
-}
-
-TEST_F(GCMDriverTest, UnregisterFailed) {
- CreateDriver(FakeGCMClient::NO_DELAY_START);
-
- // Unregistration fails when GCM is disabled.
- driver()->Disable();
- Unregister(kTestAppID1, GCMDriverTest::WAIT);
- EXPECT_EQ(GCMClient::GCM_DISABLED, unregistration_result());
-
- ClearResults();
-
- // Unregistration fails when the sign-in does not occur.
- driver()->Enable();
- AddAppHandlers();
- Unregister(kTestAppID1, GCMDriverTest::WAIT);
- EXPECT_EQ(GCMClient::NOT_SIGNED_IN, unregistration_result());
-
- ClearResults();
-
- // Unregistration fails when the no app handler is added.
- RemoveAppHandlers();
- SignIn(kTestAccountID1);
- Unregister(kTestAppID1, GCMDriverTest::WAIT);
- EXPECT_EQ(GCMClient::UNKNOWN_ERROR, unregistration_result());
-}
-
-TEST_F(GCMDriverTest, SendFailed) {
- GCMClient::OutgoingMessage message;
- message.id = "1";
- message.data["key1"] = "value1";
-
- CreateDriver(FakeGCMClient::NO_DELAY_START);
-
- // Sending fails when GCM is disabled.
- driver()->Disable();
- Send(kTestAppID1, kUserID1, message, GCMDriverTest::WAIT);
- EXPECT_TRUE(send_message_id().empty());
- EXPECT_EQ(GCMClient::GCM_DISABLED, send_result());
-
- ClearResults();
-
- // Sending fails when the sign-in does not occur.
- driver()->Enable();
- AddAppHandlers();
- Send(kTestAppID1, kUserID1, message, GCMDriverTest::WAIT);
- EXPECT_TRUE(send_message_id().empty());
- EXPECT_EQ(GCMClient::NOT_SIGNED_IN, send_result());
-
- ClearResults();
-
- // Sending fails when the no app handler is added.
- RemoveAppHandlers();
- SignIn(kTestAccountID1);
- Send(kTestAppID1, kUserID1, message, GCMDriverTest::WAIT);
- EXPECT_TRUE(send_message_id().empty());
- EXPECT_EQ(GCMClient::UNKNOWN_ERROR, send_result());
-}
-
-TEST_F(GCMDriverTest, GCMClientNotReadyBeforeRegistration) {
- // Make GCMClient not ready initially.
- CreateDriver(FakeGCMClient::DELAY_START);
- SignIn(kTestAccountID1);
- AddAppHandlers();
-
- // The registration is on hold until GCMClient is ready.
- std::vector<std::string> sender_ids;
- sender_ids.push_back("sender1");
- Register(kTestAppID1,
- sender_ids,
- GCMDriverTest::DO_NOT_WAIT);
- PumpIOLoop();
- PumpUILoop();
- EXPECT_TRUE(registration_id().empty());
- EXPECT_EQ(GCMClient::UNKNOWN_ERROR, registration_result());
-
- // Register operation will be invoked after GCMClient becomes ready.
- GetGCMClient()->PerformDelayedLoading();
- WaitForAsyncOperation();
- EXPECT_FALSE(registration_id().empty());
- EXPECT_EQ(GCMClient::SUCCESS, registration_result());
-}
-
-TEST_F(GCMDriverTest, GCMClientNotReadyBeforeSending) {
- // Make GCMClient not ready initially.
- CreateDriver(FakeGCMClient::DELAY_START);
- SignIn(kTestAccountID1);
- AddAppHandlers();
-
- // The sending is on hold until GCMClient is ready.
- GCMClient::OutgoingMessage message;
- message.id = "1";
- message.data["key1"] = "value1";
- message.data["key2"] = "value2";
- Send(kTestAppID1, kUserID1, message, GCMDriverTest::DO_NOT_WAIT);
- PumpIOLoop();
- PumpUILoop();
-
- EXPECT_TRUE(send_message_id().empty());
- EXPECT_EQ(GCMClient::UNKNOWN_ERROR, send_result());
-
- // Send operation will be invoked after GCMClient becomes ready.
- GetGCMClient()->PerformDelayedLoading();
- WaitForAsyncOperation();
- EXPECT_EQ(message.id, send_message_id());
- EXPECT_EQ(GCMClient::SUCCESS, send_result());
-}
-
-// Tests a single instance of GCMDriver.
-class GCMDriverFunctionalTest : public GCMDriverTest {
- public:
- GCMDriverFunctionalTest();
- virtual ~GCMDriverFunctionalTest();
-
- // GCMDriverTest:
- virtual void SetUp() OVERRIDE;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(GCMDriverFunctionalTest);
-};
-
-GCMDriverFunctionalTest::GCMDriverFunctionalTest() {
-}
-
-GCMDriverFunctionalTest::~GCMDriverFunctionalTest() {
-}
-
-void GCMDriverFunctionalTest::SetUp() {
- GCMDriverTest::SetUp();
-
- CreateDriver(FakeGCMClient::NO_DELAY_START);
- AddAppHandlers();
- SignIn(kTestAccountID1);
-}
-
-TEST_F(GCMDriverFunctionalTest, Register) {
- std::vector<std::string> sender_ids;
- sender_ids.push_back("sender1");
- Register(kTestAppID1, sender_ids, GCMDriverTest::WAIT);
- const std::string expected_registration_id =
- FakeGCMClient::GetRegistrationIdFromSenderIds(sender_ids);
-
- EXPECT_EQ(expected_registration_id, registration_id());
- EXPECT_EQ(GCMClient::SUCCESS, registration_result());
-}
-
-TEST_F(GCMDriverFunctionalTest, RegisterError) {
- std::vector<std::string> sender_ids;
- sender_ids.push_back("sender1@error");
- Register(kTestAppID1, sender_ids, GCMDriverTest::WAIT);
-
- EXPECT_TRUE(registration_id().empty());
- EXPECT_NE(GCMClient::SUCCESS, registration_result());
-}
-
-TEST_F(GCMDriverFunctionalTest, RegisterAgainWithSameSenderIDs) {
- std::vector<std::string> sender_ids;
- sender_ids.push_back("sender1");
- sender_ids.push_back("sender2");
- Register(kTestAppID1, sender_ids, GCMDriverTest::WAIT);
- const std::string expected_registration_id =
- FakeGCMClient::GetRegistrationIdFromSenderIds(sender_ids);
-
- EXPECT_EQ(expected_registration_id, registration_id());
- EXPECT_EQ(GCMClient::SUCCESS, registration_result());
-
- // Clears the results the would be set by the Register callback in preparation
- // to call register 2nd time.
- ClearResults();
-
- // Calling register 2nd time with the same set of sender IDs but different
- // ordering will get back the same registration ID.
- std::vector<std::string> another_sender_ids;
- another_sender_ids.push_back("sender2");
- another_sender_ids.push_back("sender1");
- Register(kTestAppID1, another_sender_ids, GCMDriverTest::WAIT);
-
- EXPECT_EQ(expected_registration_id, registration_id());
- EXPECT_EQ(GCMClient::SUCCESS, registration_result());
-}
-
-TEST_F(GCMDriverFunctionalTest, RegisterAgainWithDifferentSenderIDs) {
- std::vector<std::string> sender_ids;
- sender_ids.push_back("sender1");
- Register(kTestAppID1, sender_ids, GCMDriverTest::WAIT);
- const std::string expected_registration_id =
- FakeGCMClient::GetRegistrationIdFromSenderIds(sender_ids);
-
- EXPECT_EQ(expected_registration_id, registration_id());
- EXPECT_EQ(GCMClient::SUCCESS, registration_result());
-
- // Make sender IDs different.
- sender_ids.push_back("sender2");
- const std::string expected_registration_id2 =
- FakeGCMClient::GetRegistrationIdFromSenderIds(sender_ids);
-
- // Calling register 2nd time with the different sender IDs will get back a new
- // registration ID.
- Register(kTestAppID1, sender_ids, GCMDriverTest::WAIT);
- EXPECT_EQ(expected_registration_id2, registration_id());
- EXPECT_EQ(GCMClient::SUCCESS, registration_result());
-}
-
-TEST_F(GCMDriverFunctionalTest, RegisterAfterSignOut) {
- // This will trigger check-out.
- SignOut();
-
- std::vector<std::string> sender_ids;
- sender_ids.push_back("sender1");
- Register(kTestAppID1, sender_ids, GCMDriverTest::WAIT);
-
- EXPECT_TRUE(registration_id().empty());
- EXPECT_EQ(GCMClient::NOT_SIGNED_IN, registration_result());
-}
-
-TEST_F(GCMDriverFunctionalTest, UnregisterExplicitly) {
- std::vector<std::string> sender_ids;
- sender_ids.push_back("sender1");
- Register(kTestAppID1, sender_ids, GCMDriverTest::WAIT);
-
- EXPECT_FALSE(registration_id().empty());
- EXPECT_EQ(GCMClient::SUCCESS, registration_result());
-
- Unregister(kTestAppID1, GCMDriverTest::WAIT);
-
- EXPECT_EQ(GCMClient::SUCCESS, unregistration_result());
-}
-
-TEST_F(GCMDriverFunctionalTest, UnregisterWhenAsyncOperationPending) {
- std::vector<std::string> sender_ids;
- sender_ids.push_back("sender1");
- // First start registration without waiting for it to complete.
- Register(kTestAppID1,
- sender_ids,
- GCMDriverTest::DO_NOT_WAIT);
-
- // Test that unregistration fails with async operation pending when there is a
- // registration already in progress.
- Unregister(kTestAppID1, GCMDriverTest::WAIT);
- EXPECT_EQ(GCMClient::ASYNC_OPERATION_PENDING,
- unregistration_result());
-
- // Complete the unregistration.
- WaitForAsyncOperation();
- EXPECT_EQ(GCMClient::SUCCESS, registration_result());
-
- // Start unregistration without waiting for it to complete. This time no async
- // operation is pending.
- Unregister(kTestAppID1, GCMDriverTest::DO_NOT_WAIT);
-
- // Test that unregistration fails with async operation pending when there is
- // an unregistration already in progress.
- Unregister(kTestAppID1, GCMDriverTest::WAIT);
- EXPECT_EQ(GCMClient::ASYNC_OPERATION_PENDING,
- unregistration_result());
- ClearResults();
-
- // Complete unregistration.
- WaitForAsyncOperation();
- EXPECT_EQ(GCMClient::SUCCESS, unregistration_result());
-}
-
-TEST_F(GCMDriverFunctionalTest, RegisterWhenAsyncOperationPending) {
- std::vector<std::string> sender_ids;
- sender_ids.push_back("sender1");
- // First start registration without waiting for it to complete.
- Register(kTestAppID1,
- sender_ids,
- GCMDriverTest::DO_NOT_WAIT);
-
- // Test that registration fails with async operation pending when there is a
- // registration already in progress.
- Register(kTestAppID1, sender_ids, GCMDriverTest::WAIT);
- EXPECT_EQ(GCMClient::ASYNC_OPERATION_PENDING,
- registration_result());
- ClearResults();
-
- // Complete the registration.
- WaitForAsyncOperation();
- EXPECT_EQ(GCMClient::SUCCESS, registration_result());
-
- // Start unregistration without waiting for it to complete. This time no async
- // operation is pending.
- Unregister(kTestAppID1, GCMDriverTest::DO_NOT_WAIT);
-
- // Test that registration fails with async operation pending when there is an
- // unregistration already in progress.
- Register(kTestAppID1, sender_ids, GCMDriverTest::WAIT);
- EXPECT_EQ(GCMClient::ASYNC_OPERATION_PENDING,
- registration_result());
-
- // Complete the first unregistration expecting success.
- WaitForAsyncOperation();
- EXPECT_EQ(GCMClient::SUCCESS, unregistration_result());
-
- // Test that it is ok to register again after unregistration.
- Register(kTestAppID1, sender_ids, GCMDriverTest::WAIT);
- EXPECT_EQ(GCMClient::SUCCESS, registration_result());
-}
-
-TEST_F(GCMDriverFunctionalTest, Send) {
- GCMClient::OutgoingMessage message;
- message.id = "1";
- message.data["key1"] = "value1";
- message.data["key2"] = "value2";
- Send(kTestAppID1, kUserID1, message, GCMDriverTest::WAIT);
-
- EXPECT_EQ(message.id, send_message_id());
- EXPECT_EQ(GCMClient::SUCCESS, send_result());
-}
-
-TEST_F(GCMDriverFunctionalTest, SendAfterSignOut) {
- // This will trigger check-out.
- SignOut();
-
- GCMClient::OutgoingMessage message;
- message.id = "1";
- message.data["key1"] = "value1";
- message.data["key2"] = "value2";
- Send(kTestAppID1, kUserID1, message, GCMDriverTest::WAIT);
-
- EXPECT_TRUE(send_message_id().empty());
- EXPECT_EQ(GCMClient::NOT_SIGNED_IN, send_result());
-}
-
-TEST_F(GCMDriverFunctionalTest, SendError) {
- GCMClient::OutgoingMessage message;
- // Embedding error in id will tell the mock to simulate the send error.
- message.id = "1@error";
- message.data["key1"] = "value1";
- message.data["key2"] = "value2";
- Send(kTestAppID1, kUserID1, message, GCMDriverTest::WAIT);
-
- EXPECT_EQ(message.id, send_message_id());
- EXPECT_EQ(GCMClient::SUCCESS, send_result());
-
- // Wait for the send error.
- gcm_app_handler()->WaitForNotification();
- EXPECT_EQ(FakeGCMAppHandler::SEND_ERROR_EVENT,
- gcm_app_handler()->received_event());
- EXPECT_EQ(kTestAppID1, gcm_app_handler()->app_id());
- EXPECT_EQ(message.id,
- gcm_app_handler()->send_error_details().message_id);
- EXPECT_NE(GCMClient::SUCCESS,
- gcm_app_handler()->send_error_details().result);
- EXPECT_EQ(message.data,
- gcm_app_handler()->send_error_details().additional_data);
-}
-
-TEST_F(GCMDriverFunctionalTest, MessageReceived) {
- Register(kTestAppID1, ToSenderList("sender"), GCMDriverTest::WAIT);
- GCMClient::IncomingMessage message;
- message.data["key1"] = "value1";
- message.data["key2"] = "value2";
- message.sender_id = "sender";
- GetGCMClient()->ReceiveMessage(kTestAppID1, message);
- gcm_app_handler()->WaitForNotification();
- EXPECT_EQ(FakeGCMAppHandler::MESSAGE_EVENT,
- gcm_app_handler()->received_event());
- EXPECT_EQ(kTestAppID1, gcm_app_handler()->app_id());
- EXPECT_EQ(message.data, gcm_app_handler()->message().data);
- EXPECT_TRUE(gcm_app_handler()->message().collapse_key.empty());
- EXPECT_EQ(message.sender_id, gcm_app_handler()->message().sender_id);
-}
-
-TEST_F(GCMDriverFunctionalTest, MessageWithCollapseKeyReceived) {
- Register(kTestAppID1, ToSenderList("sender"), GCMDriverTest::WAIT);
- GCMClient::IncomingMessage message;
- message.data["key1"] = "value1";
- message.collapse_key = "collapse_key_value";
- message.sender_id = "sender";
- GetGCMClient()->ReceiveMessage(kTestAppID1, message);
- gcm_app_handler()->WaitForNotification();
- EXPECT_EQ(FakeGCMAppHandler::MESSAGE_EVENT,
- gcm_app_handler()->received_event());
- EXPECT_EQ(kTestAppID1, gcm_app_handler()->app_id());
- EXPECT_EQ(message.data, gcm_app_handler()->message().data);
- EXPECT_EQ(message.collapse_key,
- gcm_app_handler()->message().collapse_key);
-}
-
-TEST_F(GCMDriverFunctionalTest, MessagesDeleted) {
- GetGCMClient()->DeleteMessages(kTestAppID1);
- gcm_app_handler()->WaitForNotification();
- EXPECT_EQ(FakeGCMAppHandler::MESSAGES_DELETED_EVENT,
- gcm_app_handler()->received_event());
- EXPECT_EQ(kTestAppID1, gcm_app_handler()->app_id());
-}
-
-} // namespace gcm
« no previous file with comments | « chrome/browser/services/gcm/gcm_driver.cc ('k') | chrome/browser/services/gcm/gcm_profile_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698