blob: a1cac91c881f387a8ee129bd0ec5e0d04179c43c [file] [log] [blame]
// Copyright 2018 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 "components/invalidation/impl/per_user_topic_invalidation_client.h"
#include "components/invalidation/impl/invalidation_listener.h"
#include "components/invalidation/impl/logger.h"
#include "components/invalidation/impl/network_channel.h"
#include "google/cacheinvalidation/include/types.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace syncer {
class MockInvalidationListener : public InvalidationListener {
public:
MOCK_METHOD1(Ready, void(InvalidationClient*));
MOCK_METHOD2(Invalidate,
void(InvalidationClient*, const invalidation::Invalidation&));
MOCK_METHOD2(InvalidateUnknownVersion,
void(InvalidationClient*, const invalidation::ObjectId&));
MOCK_METHOD1(InvalidateAll, void(InvalidationClient*));
MOCK_METHOD3(InformRegistrationStatus,
void(InvalidationClient*,
const invalidation::ObjectId&,
InvalidationListener::RegistrationState));
MOCK_METHOD4(InformRegistrationFailure,
void(InvalidationClient*,
const invalidation::ObjectId&,
bool,
const std::string&));
MOCK_METHOD3(ReissueRegistrations,
void(InvalidationClient*, const std::string&, int));
MOCK_METHOD2(InformError,
void(InvalidationClient*, const invalidation::ErrorInfo&));
MOCK_METHOD2(InformTokenRecieved,
void(InvalidationClient*, const std::string&));
};
// A mock of the Network interface.
class MockNetwork : public NetworkChannel {
public:
MOCK_METHOD1(SetMessageReceiver, void(MessageCallback));
MOCK_METHOD1(SetTokenReceiver, void(TokenCallback));
};
// Tests the basic functionality of the invalidation client.
class InvalidationClientImplTest : public testing::Test {
public:
~InvalidationClientImplTest() override {}
// Performs setup for protocol handler unit tests, e.g. creating resource
// components and setting up common expectations for certain mock objects.
void SetUp() override {
client_ = std::make_unique<PerUserTopicInvalidationClient>(
&network_, &logger_, &listener_);
}
// The client being tested. Created fresh for each test function.
std::unique_ptr<InvalidationClient> client_;
MockNetwork network_;
Logger logger_;
// A mock invalidation listener.
MockInvalidationListener listener_;
};
// Starts the ticl and checks that appropriate calls are made on the listener
// and that a proper message is sent on the network. Test is disabled on ASAN
// because using callback mechanism from cacheinvalidations library introduces a
// leak.
#if defined(ADDRESS_SANITIZER)
#define MAYBE_Start DISABLED_Start
#else
#define MAYBE_Start Start
#endif
TEST_F(InvalidationClientImplTest, MAYBE_Start) {
// Expect the listener to indicate that it is ready.
EXPECT_CALL(listener_, Ready(testing::Eq(client_.get())));
client_->Start();
}
} // namespace invalidation