Commit 8a50f99c authored by akalin@chromium.org's avatar akalin@chromium.org

[Sync] Rework unit tests for ChromeInvalidationClient

In particular, add unit tests that would have caught bug 139424.

Dep-inject InvalidationClient into ChromeInvalidationClient.

Use the function name 'UpdateRegisteredIds' consistently.

Replace some mocks with fakes.

BUG=139424


Review URL: https://chromiumcodereview.appspot.com/10827133

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@150665 0039d316-1c4b-4281-b951-d872f2087c98
parent 31bad294
...@@ -7,10 +7,10 @@ ...@@ -7,10 +7,10 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include "base/callback.h"
#include "base/compiler_specific.h" #include "base/compiler_specific.h"
#include "base/logging.h" #include "base/logging.h"
#include "base/tracked_objects.h" #include "base/tracked_objects.h"
#include "google/cacheinvalidation/include/invalidation-client-factory.h"
#include "google/cacheinvalidation/include/invalidation-client.h" #include "google/cacheinvalidation/include/invalidation-client.h"
#include "google/cacheinvalidation/include/types.h" #include "google/cacheinvalidation/include/types.h"
#include "google/cacheinvalidation/types.pb.h" #include "google/cacheinvalidation/types.pb.h"
...@@ -48,6 +48,8 @@ ChromeInvalidationClient::~ChromeInvalidationClient() { ...@@ -48,6 +48,8 @@ ChromeInvalidationClient::~ChromeInvalidationClient() {
} }
void ChromeInvalidationClient::Start( void ChromeInvalidationClient::Start(
const CreateInvalidationClientCallback&
create_invalidation_client_callback,
const std::string& client_id, const std::string& client_info, const std::string& client_id, const std::string& client_info,
const std::string& state, const std::string& state,
const InvalidationVersionMap& initial_max_invalidation_versions, const InvalidationVersionMap& initial_max_invalidation_versions,
...@@ -85,7 +87,7 @@ void ChromeInvalidationClient::Start( ...@@ -85,7 +87,7 @@ void ChromeInvalidationClient::Start(
int client_type = ipc::invalidation::ClientType::CHROME_SYNC; int client_type = ipc::invalidation::ClientType::CHROME_SYNC;
invalidation_client_.reset( invalidation_client_.reset(
invalidation::CreateInvalidationClient( create_invalidation_client_callback.Run(
&chrome_system_resources_, client_type, client_id, &chrome_system_resources_, client_type, client_id,
kApplicationName, this)); kApplicationName, this));
invalidation_client_->Start(); invalidation_client_->Start();
...@@ -100,23 +102,25 @@ void ChromeInvalidationClient::UpdateCredentials( ...@@ -100,23 +102,25 @@ void ChromeInvalidationClient::UpdateCredentials(
chrome_system_resources_.network()->UpdateCredentials(email, token); chrome_system_resources_.network()->UpdateCredentials(email, token);
} }
void ChromeInvalidationClient::RegisterIds(const ObjectIdSet& ids) { void ChromeInvalidationClient::UpdateRegisteredIds(const ObjectIdSet& ids) {
DCHECK(CalledOnValidThread()); DCHECK(CalledOnValidThread());
registered_ids_ = ids; registered_ids_ = ids;
// |ticl_state_| can go to NO_NOTIFICATION_ERROR even without a // |ticl_state_| can go to NO_NOTIFICATION_ERROR even without a
// working XMPP connection (as observed by us), so check it instead // working XMPP connection (as observed by us), so check it instead
// of GetState() (see http://crbug.com/139424). // of GetState() (see http://crbug.com/139424).
if (ticl_state_ == NO_NOTIFICATION_ERROR && registration_manager_.get()) { if (ticl_state_ == NO_NOTIFICATION_ERROR && registration_manager_.get()) {
registration_manager_->SetRegisteredIds(registered_ids_); registration_manager_->UpdateRegisteredIds(registered_ids_);
} }
// TODO(akalin): Clear invalidation versions for unregistered types. // TODO(akalin): Clear invalidation versions for unregistered types.
} }
void ChromeInvalidationClient::Ready( void ChromeInvalidationClient::Ready(
invalidation::InvalidationClient* client) { invalidation::InvalidationClient* client) {
DCHECK(CalledOnValidThread());
DCHECK_EQ(client, invalidation_client_.get());
ticl_state_ = NO_NOTIFICATION_ERROR; ticl_state_ = NO_NOTIFICATION_ERROR;
EmitStateChange(); EmitStateChange();
registration_manager_->SetRegisteredIds(registered_ids_); registration_manager_->UpdateRegisteredIds(registered_ids_);
} }
void ChromeInvalidationClient::Invalidate( void ChromeInvalidationClient::Invalidate(
...@@ -124,6 +128,7 @@ void ChromeInvalidationClient::Invalidate( ...@@ -124,6 +128,7 @@ void ChromeInvalidationClient::Invalidate(
const invalidation::Invalidation& invalidation, const invalidation::Invalidation& invalidation,
const invalidation::AckHandle& ack_handle) { const invalidation::AckHandle& ack_handle) {
DCHECK(CalledOnValidThread()); DCHECK(CalledOnValidThread());
DCHECK_EQ(client, invalidation_client_.get());
DVLOG(1) << "Invalidate: " << InvalidationToString(invalidation); DVLOG(1) << "Invalidate: " << InvalidationToString(invalidation);
const invalidation::ObjectId& id = invalidation.object_id(); const invalidation::ObjectId& id = invalidation.object_id();
...@@ -170,6 +175,7 @@ void ChromeInvalidationClient::InvalidateUnknownVersion( ...@@ -170,6 +175,7 @@ void ChromeInvalidationClient::InvalidateUnknownVersion(
const invalidation::ObjectId& object_id, const invalidation::ObjectId& object_id,
const invalidation::AckHandle& ack_handle) { const invalidation::AckHandle& ack_handle) {
DCHECK(CalledOnValidThread()); DCHECK(CalledOnValidThread());
DCHECK_EQ(client, invalidation_client_.get());
DVLOG(1) << "InvalidateUnknownVersion"; DVLOG(1) << "InvalidateUnknownVersion";
ObjectIdPayloadMap id_payloads; ObjectIdPayloadMap id_payloads;
...@@ -186,6 +192,7 @@ void ChromeInvalidationClient::InvalidateAll( ...@@ -186,6 +192,7 @@ void ChromeInvalidationClient::InvalidateAll(
invalidation::InvalidationClient* client, invalidation::InvalidationClient* client,
const invalidation::AckHandle& ack_handle) { const invalidation::AckHandle& ack_handle) {
DCHECK(CalledOnValidThread()); DCHECK(CalledOnValidThread());
DCHECK_EQ(client, invalidation_client_.get());
DVLOG(1) << "InvalidateAll"; DVLOG(1) << "InvalidateAll";
ObjectIdPayloadMap id_payloads; ObjectIdPayloadMap id_payloads;
...@@ -210,6 +217,7 @@ void ChromeInvalidationClient::InformRegistrationStatus( ...@@ -210,6 +217,7 @@ void ChromeInvalidationClient::InformRegistrationStatus(
const invalidation::ObjectId& object_id, const invalidation::ObjectId& object_id,
InvalidationListener::RegistrationState new_state) { InvalidationListener::RegistrationState new_state) {
DCHECK(CalledOnValidThread()); DCHECK(CalledOnValidThread());
DCHECK_EQ(client, invalidation_client_.get());
DVLOG(1) << "InformRegistrationStatus: " DVLOG(1) << "InformRegistrationStatus: "
<< ObjectIdToString(object_id) << " " << new_state; << ObjectIdToString(object_id) << " " << new_state;
...@@ -225,6 +233,7 @@ void ChromeInvalidationClient::InformRegistrationFailure( ...@@ -225,6 +233,7 @@ void ChromeInvalidationClient::InformRegistrationFailure(
bool is_transient, bool is_transient,
const std::string& error_message) { const std::string& error_message) {
DCHECK(CalledOnValidThread()); DCHECK(CalledOnValidThread());
DCHECK_EQ(client, invalidation_client_.get());
DVLOG(1) << "InformRegistrationFailure: " DVLOG(1) << "InformRegistrationFailure: "
<< ObjectIdToString(object_id) << ObjectIdToString(object_id)
<< "is_transient=" << is_transient << "is_transient=" << is_transient
...@@ -248,6 +257,7 @@ void ChromeInvalidationClient::ReissueRegistrations( ...@@ -248,6 +257,7 @@ void ChromeInvalidationClient::ReissueRegistrations(
const std::string& prefix, const std::string& prefix,
int prefix_length) { int prefix_length) {
DCHECK(CalledOnValidThread()); DCHECK(CalledOnValidThread());
DCHECK_EQ(client, invalidation_client_.get());
DVLOG(1) << "AllRegistrationsLost"; DVLOG(1) << "AllRegistrationsLost";
registration_manager_->MarkAllRegistrationsLost(); registration_manager_->MarkAllRegistrationsLost();
} }
...@@ -255,6 +265,8 @@ void ChromeInvalidationClient::ReissueRegistrations( ...@@ -255,6 +265,8 @@ void ChromeInvalidationClient::ReissueRegistrations(
void ChromeInvalidationClient::InformError( void ChromeInvalidationClient::InformError(
invalidation::InvalidationClient* client, invalidation::InvalidationClient* client,
const invalidation::ErrorInfo& error_info) { const invalidation::ErrorInfo& error_info) {
DCHECK(CalledOnValidThread());
DCHECK_EQ(client, invalidation_client_.get());
LOG(ERROR) << "Ticl error " << error_info.error_reason() << ": " LOG(ERROR) << "Ticl error " << error_info.error_reason() << ": "
<< error_info.error_message() << error_info.error_message()
<< " (transient = " << error_info.is_transient() << ")"; << " (transient = " << error_info.is_transient() << ")";
...@@ -273,6 +285,11 @@ void ChromeInvalidationClient::WriteState(const std::string& state) { ...@@ -273,6 +285,11 @@ void ChromeInvalidationClient::WriteState(const std::string& state) {
FROM_HERE, &InvalidationStateTracker::SetInvalidationState, state); FROM_HERE, &InvalidationStateTracker::SetInvalidationState, state);
} }
void ChromeInvalidationClient::StopForTest() {
DCHECK(CalledOnValidThread());
Stop();
}
void ChromeInvalidationClient::Stop() { void ChromeInvalidationClient::Stop() {
DCHECK(CalledOnValidThread()); DCHECK(CalledOnValidThread());
if (!invalidation_client_.get()) { if (!invalidation_client_.get()) {
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include <string> #include <string>
#include "base/basictypes.h" #include "base/basictypes.h"
#include "base/callback_forward.h"
#include "base/compiler_specific.h" #include "base/compiler_specific.h"
#include "base/memory/scoped_ptr.h" #include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
...@@ -44,6 +45,13 @@ class ChromeInvalidationClient ...@@ -44,6 +45,13 @@ class ChromeInvalidationClient
public notifier::PushClientObserver, public notifier::PushClientObserver,
public base::NonThreadSafe { public base::NonThreadSafe {
public: public:
typedef base::Callback<invalidation::InvalidationClient*(
invalidation::SystemResources*,
int,
const invalidation::string&,
const invalidation::string&,
invalidation::InvalidationListener*)> CreateInvalidationClientCallback;
class Listener { class Listener {
public: public:
virtual ~Listener(); virtual ~Listener();
...@@ -65,6 +73,8 @@ class ChromeInvalidationClient ...@@ -65,6 +73,8 @@ class ChromeInvalidationClient
// Does not take ownership of |listener| or |state_writer|. // Does not take ownership of |listener| or |state_writer|.
// |invalidation_state_tracker| must be initialized. // |invalidation_state_tracker| must be initialized.
void Start( void Start(
const CreateInvalidationClientCallback&
create_invalidation_client_callback,
const std::string& client_id, const std::string& client_info, const std::string& client_id, const std::string& client_info,
const std::string& state, const std::string& state,
const InvalidationVersionMap& initial_max_invalidation_versions, const InvalidationVersionMap& initial_max_invalidation_versions,
...@@ -73,9 +83,9 @@ class ChromeInvalidationClient ...@@ -73,9 +83,9 @@ class ChromeInvalidationClient
void UpdateCredentials(const std::string& email, const std::string& token); void UpdateCredentials(const std::string& email, const std::string& token);
// Register the object IDs that we're interested in getting // Update the set of object IDs that we're interested in getting
// notifications for. May be called at any time. // notifications for. May be called at any time.
void RegisterIds(const ObjectIdSet& ids); void UpdateRegisteredIds(const ObjectIdSet& ids);
// invalidation::InvalidationListener implementation. // invalidation::InvalidationListener implementation.
virtual void Ready( virtual void Ready(
...@@ -118,9 +128,9 @@ class ChromeInvalidationClient ...@@ -118,9 +128,9 @@ class ChromeInvalidationClient
virtual void OnIncomingNotification( virtual void OnIncomingNotification(
const notifier::Notification& notification) OVERRIDE; const notifier::Notification& notification) OVERRIDE;
private: void StopForTest();
friend class ChromeInvalidationClientTest;
private:
void Stop(); void Stop();
NotificationsDisabledReason GetState() const; NotificationsDisabledReason GetState() const;
......
// Copyright (c) 2012 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 "sync/notifier/fake_invalidation_state_tracker.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace syncer {
const int64 FakeInvalidationStateTracker::kMinVersion = kint64min;
FakeInvalidationStateTracker::FakeInvalidationStateTracker() {}
FakeInvalidationStateTracker::~FakeInvalidationStateTracker() {}
InvalidationVersionMap
FakeInvalidationStateTracker::GetAllMaxVersions() const {
return versions_;
}
void FakeInvalidationStateTracker::SetMaxVersion(
const invalidation::ObjectId& id, int64 max_version) {
InvalidationVersionMap::const_iterator it = versions_.find(id);
if ((it != versions_.end()) && (max_version <= it->second)) {
ADD_FAILURE();
return;
}
versions_[id] = max_version;
}
int64 FakeInvalidationStateTracker::GetMaxVersion(
const invalidation::ObjectId& id) const {
InvalidationVersionMap::const_iterator it = versions_.find(id);
return (it == versions_.end()) ? kMinVersion : it->second;
}
void FakeInvalidationStateTracker::SetInvalidationState(
const std::string& state) {
state_ = state;
}
std::string FakeInvalidationStateTracker::GetInvalidationState() const {
return state_;
}
} // namespace syncer
// Copyright (c) 2012 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.
#ifndef SYNC_NOTIFIER_FAKE_INVALIDATION_STATE_TRACKER_H_
#define SYNC_NOTIFIER_FAKE_INVALIDATION_STATE_TRACKER_H_
#include "base/memory/weak_ptr.h"
#include "sync/notifier/invalidation_state_tracker.h"
namespace syncer {
// InvalidationStateTracker implementation that simply keeps track of
// the max versions and invalidation state in memory.
class FakeInvalidationStateTracker
: public InvalidationStateTracker,
public base::SupportsWeakPtr<FakeInvalidationStateTracker> {
public:
FakeInvalidationStateTracker();
virtual ~FakeInvalidationStateTracker();
// InvalidationStateTracker implementation.
virtual InvalidationVersionMap GetAllMaxVersions() const OVERRIDE;
virtual void SetMaxVersion(const invalidation::ObjectId& id,
int64 max_version) OVERRIDE;
int64 GetMaxVersion(const invalidation::ObjectId& id) const;
virtual void SetInvalidationState(const std::string& state) OVERRIDE;
virtual std::string GetInvalidationState() const OVERRIDE;
static const int64 kMinVersion;
private:
InvalidationVersionMap versions_;
std::string state_;
};
} // namespace syncer
#endif // SYNC_NOTIFIER_FAKE_INVALIDATION_STATE_TRACKER_H_
...@@ -4,9 +4,11 @@ ...@@ -4,9 +4,11 @@
#include "sync/notifier/invalidation_notifier.h" #include "sync/notifier/invalidation_notifier.h"
#include "base/bind.h"
#include "base/logging.h" #include "base/logging.h"
#include "base/message_loop_proxy.h" #include "base/message_loop_proxy.h"
#include "base/metrics/histogram.h" #include "base/metrics/histogram.h"
#include "google/cacheinvalidation/include/invalidation-client-factory.h"
#include "jingle/notifier/listener/push_client.h" #include "jingle/notifier/listener/push_client.h"
#include "net/url_request/url_request_context.h" #include "net/url_request/url_request_context.h"
#include "sync/internal_api/public/base/model_type_payload_map.h" #include "sync/internal_api/public/base/model_type_payload_map.h"
...@@ -37,7 +39,9 @@ InvalidationNotifier::~InvalidationNotifier() { ...@@ -37,7 +39,9 @@ InvalidationNotifier::~InvalidationNotifier() {
void InvalidationNotifier::UpdateRegisteredIds(SyncNotifierObserver* handler, void InvalidationNotifier::UpdateRegisteredIds(SyncNotifierObserver* handler,
const ObjectIdSet& ids) { const ObjectIdSet& ids) {
DCHECK(CalledOnValidThread()); DCHECK(CalledOnValidThread());
invalidation_client_.RegisterIds(helper_.UpdateRegisteredIds(handler, ids)); const ObjectIdSet& all_registered_ids =
helper_.UpdateRegisteredIds(handler, ids);
invalidation_client_.UpdateRegisteredIds(all_registered_ids);
} }
void InvalidationNotifier::SetUniqueId(const std::string& unique_id) { void InvalidationNotifier::SetUniqueId(const std::string& unique_id) {
...@@ -71,6 +75,7 @@ void InvalidationNotifier::UpdateCredentials( ...@@ -71,6 +75,7 @@ void InvalidationNotifier::UpdateCredentials(
const std::string& email, const std::string& token) { const std::string& email, const std::string& token) {
if (state_ == STOPPED) { if (state_ == STOPPED) {
invalidation_client_.Start( invalidation_client_.Start(
base::Bind(&invalidation::CreateInvalidationClient),
invalidation_client_id_, client_info_, invalidation_state_, invalidation_client_id_, client_info_, invalidation_state_,
initial_max_invalidation_versions_, initial_max_invalidation_versions_,
invalidation_state_tracker_, invalidation_state_tracker_,
......
...@@ -13,8 +13,8 @@ ...@@ -13,8 +13,8 @@
#include "sync/internal_api/public/base/model_type.h" #include "sync/internal_api/public/base/model_type.h"
#include "sync/internal_api/public/base/model_type_payload_map.h" #include "sync/internal_api/public/base/model_type_payload_map.h"
#include "sync/internal_api/public/util/weak_handle.h" #include "sync/internal_api/public/util/weak_handle.h"
#include "sync/notifier/fake_invalidation_state_tracker.h"
#include "sync/notifier/invalidation_state_tracker.h" #include "sync/notifier/invalidation_state_tracker.h"
#include "sync/notifier/mock_invalidation_state_tracker.h"
#include "sync/notifier/mock_sync_notifier_observer.h" #include "sync/notifier/mock_sync_notifier_observer.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
...@@ -48,7 +48,7 @@ class InvalidationNotifierTest : public testing::Test { ...@@ -48,7 +48,7 @@ class InvalidationNotifierTest : public testing::Test {
scoped_ptr<notifier::PushClient>(new notifier::FakePushClient()), scoped_ptr<notifier::PushClient>(new notifier::FakePushClient()),
InvalidationVersionMap(), InvalidationVersionMap(),
initial_invalidation_state, initial_invalidation_state,
MakeWeakHandle(mock_tracker_.AsWeakPtr()), MakeWeakHandle(fake_tracker_.AsWeakPtr()),
"fake_client_info")); "fake_client_info"));
} }
...@@ -63,11 +63,19 @@ class InvalidationNotifierTest : public testing::Test { ...@@ -63,11 +63,19 @@ class InvalidationNotifierTest : public testing::Test {
invalidation_notifier_.reset(); invalidation_notifier_.reset();
} }
void SetStateDeprecated(const std::string& new_state) {
invalidation_notifier_->SetStateDeprecated(new_state);
message_loop_.RunAllPending();
}
private:
MessageLoopForIO message_loop_; MessageLoopForIO message_loop_;
notifier::FakeBaseTask fake_base_task_;
protected:
scoped_ptr<InvalidationNotifier> invalidation_notifier_; scoped_ptr<InvalidationNotifier> invalidation_notifier_;
StrictMock<MockInvalidationStateTracker> mock_tracker_; FakeInvalidationStateTracker fake_tracker_;
StrictMock<MockSyncNotifierObserver> mock_observer_; StrictMock<MockSyncNotifierObserver> mock_observer_;
notifier::FakeBaseTask fake_base_task_;
}; };
TEST_F(InvalidationNotifierTest, Basic) { TEST_F(InvalidationNotifierTest, Basic) {
...@@ -88,12 +96,13 @@ TEST_F(InvalidationNotifierTest, Basic) { ...@@ -88,12 +96,13 @@ TEST_F(InvalidationNotifierTest, Basic) {
OnNotificationsDisabled(TRANSIENT_NOTIFICATION_ERROR)); OnNotificationsDisabled(TRANSIENT_NOTIFICATION_ERROR));
EXPECT_CALL(mock_observer_, EXPECT_CALL(mock_observer_,
OnNotificationsDisabled(NOTIFICATION_CREDENTIALS_REJECTED)); OnNotificationsDisabled(NOTIFICATION_CREDENTIALS_REJECTED));
// Note no expectation on mock_tracker_, as we initialized with
// non-empty initial_invalidation_state above.
// TODO(tim): This call should be a no-op, Remove once bug 124140 and // TODO(tim): This call should be a no-op, Remove once bug 124140 and
// associated issues are fixed. // associated issues are fixed.
invalidation_notifier_->SetStateDeprecated("fake_state"); invalidation_notifier_->SetStateDeprecated("fake_state");
// We don't expect |fake_tracker_|'s state to change, as we
// initialized with non-empty initial_invalidation_state above.
EXPECT_TRUE(fake_tracker_.GetInvalidationState().empty());
invalidation_notifier_->SetUniqueId("fake_id"); invalidation_notifier_->SetUniqueId("fake_id");
invalidation_notifier_->UpdateCredentials("foo@bar.com", "fake_token"); invalidation_notifier_->UpdateCredentials("foo@bar.com", "fake_token");
...@@ -110,20 +119,21 @@ TEST_F(InvalidationNotifierTest, Basic) { ...@@ -110,20 +119,21 @@ TEST_F(InvalidationNotifierTest, Basic) {
TEST_F(InvalidationNotifierTest, MigrateState) { TEST_F(InvalidationNotifierTest, MigrateState) {
CreateAndObserveNotifier(std::string()); CreateAndObserveNotifier(std::string());
InSequence dummy;
EXPECT_CALL(mock_tracker_, SetInvalidationState("fake_state")); SetStateDeprecated("fake_state");
invalidation_notifier_->SetStateDeprecated("fake_state"); EXPECT_EQ("fake_state", fake_tracker_.GetInvalidationState());
// Should do nothing. // Should do nothing.
invalidation_notifier_->SetStateDeprecated("spurious_fake_state"); SetStateDeprecated("spurious_fake_state");
EXPECT_EQ("fake_state", fake_tracker_.GetInvalidationState());
// Pretend Chrome shut down. // Pretend Chrome shut down.
ResetNotifier(); ResetNotifier();
CreateAndObserveNotifier("fake_state"); CreateAndObserveNotifier("fake_state");
// Should do nothing. // Should do nothing.
invalidation_notifier_->SetStateDeprecated("more_spurious_fake_state"); SetStateDeprecated("more_spurious_fake_state");
EXPECT_EQ("fake_state", fake_tracker_.GetInvalidationState());
} }
} // namespace } // namespace
......
// Copyright (c) 2012 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 "sync/notifier/mock_invalidation_state_tracker.h"
namespace syncer {
MockInvalidationStateTracker::MockInvalidationStateTracker() {}
MockInvalidationStateTracker::~MockInvalidationStateTracker() {}
} // namespace syncer
// Copyright (c) 2012 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.
#ifndef SYNC_NOTIFIER_MOCK_INVALIDATION_STATE_TRACKER_H_
#define SYNC_NOTIFIER_MOCK_INVALIDATION_STATE_TRACKER_H_
#include "base/memory/weak_ptr.h"
#include "sync/notifier/invalidation_state_tracker.h"
#include "testing/gmock/include/gmock/gmock.h"
namespace syncer {
class MockInvalidationStateTracker
: public InvalidationStateTracker,
public base::SupportsWeakPtr<MockInvalidationStateTracker> {
public:
MockInvalidationStateTracker();
virtual ~MockInvalidationStateTracker();
MOCK_CONST_METHOD0(GetAllMaxVersions, InvalidationVersionMap());
MOCK_METHOD2(SetMaxVersion, void(const invalidation::ObjectId&, int64));
MOCK_CONST_METHOD0(GetInvalidationState, std::string());
MOCK_METHOD1(SetInvalidationState, void(const std::string&));
};
} // namespace syncer
#endif // SYNC_NOTIFIER_MOCK_INVALIDATION_STATE_TRACKER_H_
...@@ -66,7 +66,7 @@ RegistrationManager::~RegistrationManager() { ...@@ -66,7 +66,7 @@ RegistrationManager::~RegistrationManager() {
STLDeleteValues(&registration_statuses_); STLDeleteValues(&registration_statuses_);
} }
void RegistrationManager::SetRegisteredIds(const ObjectIdSet& ids) { void RegistrationManager::UpdateRegisteredIds(const ObjectIdSet& ids) {
DCHECK(CalledOnValidThread()); DCHECK(CalledOnValidThread());
const ObjectIdSet& old_ids = GetRegisteredIds(); const ObjectIdSet& old_ids = GetRegisteredIds();
......
...@@ -69,7 +69,7 @@ class RegistrationManager : public base::NonThreadSafe { ...@@ -69,7 +69,7 @@ class RegistrationManager : public base::NonThreadSafe {
// Registers all object IDs included in the given set (that are not // Registers all object IDs included in the given set (that are not
// already disabled) and unregisters all other object IDs. // already disabled) and unregisters all other object IDs.
void SetRegisteredIds(const ObjectIdSet& ids); void UpdateRegisteredIds(const ObjectIdSet& ids);
// Marks the registration for the |id| lost and re-registers // Marks the registration for the |id| lost and re-registers
// it (unless it's disabled). // it (unless it's disabled).
......
...@@ -172,7 +172,7 @@ class RegistrationManagerTest : public testing::Test { ...@@ -172,7 +172,7 @@ class RegistrationManagerTest : public testing::Test {
void RunBackoffTest(double jitter) { void RunBackoffTest(double jitter) {
fake_registration_manager_.SetJitter(jitter); fake_registration_manager_.SetJitter(jitter);
ObjectIdSet ids = GetSequenceOfIds(kObjectIdsCount); ObjectIdSet ids = GetSequenceOfIds(kObjectIdsCount);
fake_registration_manager_.SetRegisteredIds(ids); fake_registration_manager_.UpdateRegisteredIds(ids);
// Lose some ids. // Lose some ids.
ObjectIdSet lost_ids = GetSequenceOfIds(2); ObjectIdSet lost_ids = GetSequenceOfIds(2);
...@@ -230,21 +230,21 @@ class RegistrationManagerTest : public testing::Test { ...@@ -230,21 +230,21 @@ class RegistrationManagerTest : public testing::Test {
DISALLOW_COPY_AND_ASSIGN(RegistrationManagerTest); DISALLOW_COPY_AND_ASSIGN(RegistrationManagerTest);
}; };
// Basic test of SetRegisteredIds to make sure we properly register new IDs and // Basic test of UpdateRegisteredIds to make sure we properly register
// unregister any IDs no longer in the set. // new IDs and unregister any IDs no longer in the set.
TEST_F(RegistrationManagerTest, SetRegisteredIds) { TEST_F(RegistrationManagerTest, UpdateRegisteredIds) {
ObjectIdSet ids = GetSequenceOfIds(kObjectIdsCount - 1); ObjectIdSet ids = GetSequenceOfIds(kObjectIdsCount - 1);
EXPECT_TRUE(fake_registration_manager_.GetRegisteredIdsForTest().empty()); EXPECT_TRUE(fake_registration_manager_.GetRegisteredIdsForTest().empty());
EXPECT_TRUE(fake_invalidation_client_.GetRegisteredIdsForTest().empty()); EXPECT_TRUE(fake_invalidation_client_.GetRegisteredIdsForTest().empty());
fake_registration_manager_.SetRegisteredIds(ids); fake_registration_manager_.UpdateRegisteredIds(ids);
EXPECT_EQ(ids, fake_registration_manager_.GetRegisteredIdsForTest()); EXPECT_EQ(ids, fake_registration_manager_.GetRegisteredIdsForTest());
EXPECT_EQ(ids, fake_invalidation_client_.GetRegisteredIdsForTest()); EXPECT_EQ(ids, fake_invalidation_client_.GetRegisteredIdsForTest());
ids.insert(GetIdForIndex(kObjectIdsCount - 1)); ids.insert(GetIdForIndex(kObjectIdsCount - 1));
ids.erase(GetIdForIndex(kObjectIdsCount - 2)); ids.erase(GetIdForIndex(kObjectIdsCount - 2));
fake_registration_manager_.SetRegisteredIds(ids); fake_registration_manager_.UpdateRegisteredIds(ids);
EXPECT_EQ(ids, fake_registration_manager_.GetRegisteredIdsForTest()); EXPECT_EQ(ids, fake_registration_manager_.GetRegisteredIdsForTest());
EXPECT_EQ(ids, fake_invalidation_client_.GetRegisteredIdsForTest()); EXPECT_EQ(ids, fake_invalidation_client_.GetRegisteredIdsForTest());
} }
...@@ -291,7 +291,7 @@ TEST_F(RegistrationManagerTest, CalculateBackoff) { ...@@ -291,7 +291,7 @@ TEST_F(RegistrationManagerTest, CalculateBackoff) {
TEST_F(RegistrationManagerTest, MarkRegistrationLost) { TEST_F(RegistrationManagerTest, MarkRegistrationLost) {
ObjectIdSet ids = GetSequenceOfIds(kObjectIdsCount); ObjectIdSet ids = GetSequenceOfIds(kObjectIdsCount);
fake_registration_manager_.SetRegisteredIds(ids); fake_registration_manager_.UpdateRegisteredIds(ids);
EXPECT_TRUE( EXPECT_TRUE(
fake_registration_manager_.GetPendingRegistrationsForTest().empty()); fake_registration_manager_.GetPendingRegistrationsForTest().empty());
...@@ -324,11 +324,11 @@ TEST_F(RegistrationManagerTest, MarkRegistrationLostBackoffHigh) { ...@@ -324,11 +324,11 @@ TEST_F(RegistrationManagerTest, MarkRegistrationLostBackoffHigh) {
} }
// Exponential backoff on lost registrations should be reset to zero if // Exponential backoff on lost registrations should be reset to zero if
// SetRegisteredIds is called. // UpdateRegisteredIds is called.
TEST_F(RegistrationManagerTest, MarkRegistrationLostBackoffReset) { TEST_F(RegistrationManagerTest, MarkRegistrationLostBackoffReset) {
ObjectIdSet ids = GetSequenceOfIds(kObjectIdsCount); ObjectIdSet ids = GetSequenceOfIds(kObjectIdsCount);
fake_registration_manager_.SetRegisteredIds(ids); fake_registration_manager_.UpdateRegisteredIds(ids);
// Lose some ids. // Lose some ids.
ObjectIdSet lost_ids = GetSequenceOfIds(2); ObjectIdSet lost_ids = GetSequenceOfIds(2);
...@@ -347,7 +347,7 @@ TEST_F(RegistrationManagerTest, MarkRegistrationLostBackoffReset) { ...@@ -347,7 +347,7 @@ TEST_F(RegistrationManagerTest, MarkRegistrationLostBackoffReset) {
fake_registration_manager_.GetPendingRegistrationsForTest()); fake_registration_manager_.GetPendingRegistrationsForTest());
// Set ids again. // Set ids again.
fake_registration_manager_.SetRegisteredIds(ids); fake_registration_manager_.UpdateRegisteredIds(ids);
ExpectPendingRegistrations( ExpectPendingRegistrations(
ObjectIdSet(), ObjectIdSet(),
0.0, 0.0,
...@@ -357,7 +357,7 @@ TEST_F(RegistrationManagerTest, MarkRegistrationLostBackoffReset) { ...@@ -357,7 +357,7 @@ TEST_F(RegistrationManagerTest, MarkRegistrationLostBackoffReset) {
TEST_F(RegistrationManagerTest, MarkAllRegistrationsLost) { TEST_F(RegistrationManagerTest, MarkAllRegistrationsLost) {
ObjectIdSet ids = GetSequenceOfIds(kObjectIdsCount); ObjectIdSet ids = GetSequenceOfIds(kObjectIdsCount);
fake_registration_manager_.SetRegisteredIds(ids); fake_registration_manager_.UpdateRegisteredIds(ids);
fake_invalidation_client_.LoseAllRegistrations(); fake_invalidation_client_.LoseAllRegistrations();
fake_registration_manager_.MarkAllRegistrationsLost(); fake_registration_manager_.MarkAllRegistrationsLost();
...@@ -385,12 +385,12 @@ TEST_F(RegistrationManagerTest, MarkAllRegistrationsLost) { ...@@ -385,12 +385,12 @@ TEST_F(RegistrationManagerTest, MarkAllRegistrationsLost) {
EXPECT_EQ(ids, fake_invalidation_client_.GetRegisteredIdsForTest()); EXPECT_EQ(ids, fake_invalidation_client_.GetRegisteredIdsForTest());
} }
// IDs that are disabled should not be re-registered by SetRegisteredIds or // IDs that are disabled should not be re-registered by UpdateRegisteredIds or
// automatic re-registration if that registration is lost. // automatic re-registration if that registration is lost.
TEST_F(RegistrationManagerTest, DisableId) { TEST_F(RegistrationManagerTest, DisableId) {
ObjectIdSet ids = GetSequenceOfIds(kObjectIdsCount); ObjectIdSet ids = GetSequenceOfIds(kObjectIdsCount);
fake_registration_manager_.SetRegisteredIds(ids); fake_registration_manager_.UpdateRegisteredIds(ids);
EXPECT_TRUE( EXPECT_TRUE(
fake_registration_manager_.GetPendingRegistrationsForTest().empty()); fake_registration_manager_.GetPendingRegistrationsForTest().empty());
...@@ -405,7 +405,7 @@ TEST_F(RegistrationManagerTest, DisableId) { ...@@ -405,7 +405,7 @@ TEST_F(RegistrationManagerTest, DisableId) {
EXPECT_EQ(enabled_ids, fake_registration_manager_.GetRegisteredIdsForTest()); EXPECT_EQ(enabled_ids, fake_registration_manager_.GetRegisteredIdsForTest());
EXPECT_EQ(enabled_ids, fake_invalidation_client_.GetRegisteredIdsForTest()); EXPECT_EQ(enabled_ids, fake_invalidation_client_.GetRegisteredIdsForTest());
fake_registration_manager_.SetRegisteredIds(ids); fake_registration_manager_.UpdateRegisteredIds(ids);
EXPECT_EQ(enabled_ids, fake_registration_manager_.GetRegisteredIdsForTest()); EXPECT_EQ(enabled_ids, fake_registration_manager_.GetRegisteredIdsForTest());
fake_registration_manager_.MarkRegistrationLost( fake_registration_manager_.MarkRegistrationLost(
......
...@@ -461,8 +461,8 @@ ...@@ -461,8 +461,8 @@
'sync_notifier', 'sync_notifier',
], ],
'sources': [ 'sources': [
'notifier/mock_invalidation_state_tracker.cc', 'notifier/fake_invalidation_state_tracker.cc',
'notifier/mock_invalidation_state_tracker.h', 'notifier/fake_invalidation_state_tracker.h',
'notifier/mock_sync_notifier_observer.cc', 'notifier/mock_sync_notifier_observer.cc',
'notifier/mock_sync_notifier_observer.h', 'notifier/mock_sync_notifier_observer.h',
], ],
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment