| Index: chrome/browser/sync/notifier/listener/talk_mediator_unittest.cc
|
| ===================================================================
|
| --- chrome/browser/sync/notifier/listener/talk_mediator_unittest.cc (revision 0)
|
| +++ chrome/browser/sync/notifier/listener/talk_mediator_unittest.cc (revision 0)
|
| @@ -0,0 +1,176 @@
|
| +// Copyright (c) 2009 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 <string>
|
| +
|
| +#include "base/logging.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +#include "chrome/browser/sync/notifier/listener/mediator_thread_mock.h"
|
| +#include "chrome/browser/sync/notifier/listener/talk_mediator_impl.h"
|
| +#include "chrome/browser/sync/util/event_sys-inl.h"
|
| +#include "talk/xmpp/xmppengine.h"
|
| +
|
| +namespace browser_sync {
|
| +
|
| +class TalkMediatorImplTest : public testing::Test {
|
| + public:
|
| + void HandleTalkMediatorEvent(
|
| + const browser_sync::TalkMediatorEvent& event) {
|
| + last_message_ = event.what_happened;
|
| + }
|
| +
|
| + protected:
|
| + TalkMediatorImplTest() {}
|
| + ~TalkMediatorImplTest() {}
|
| +
|
| + virtual void SetUp() {
|
| + last_message_ = -1;
|
| + }
|
| +
|
| + virtual void TearDown() {
|
| + }
|
| +
|
| + int last_message_;
|
| +};
|
| +
|
| +TEST_F(TalkMediatorImplTest, ConstructionOfTheClass) {
|
| + // Constructing a single talk mediator enables SSL through the singleton.
|
| + scoped_ptr<TalkMediatorImpl> talk1(new TalkMediatorImpl());
|
| + talk1.reset(NULL);
|
| +}
|
| +
|
| +TEST_F(TalkMediatorImplTest, SetAuthTokenWithBadInput) {
|
| + scoped_ptr<TalkMediatorImpl> talk1(new TalkMediatorImpl(
|
| + new MockMediatorThread()));
|
| + ASSERT_FALSE(talk1->SetAuthToken("@missinguser.com", ""));
|
| + ASSERT_EQ(talk1->state_.initialized, 0);
|
| +
|
| + scoped_ptr<TalkMediatorImpl> talk2(new TalkMediatorImpl(
|
| + new MockMediatorThread()));
|
| + ASSERT_FALSE(talk2->SetAuthToken("", "1234567890"));
|
| + ASSERT_EQ(talk2->state_.initialized, 0);
|
| +
|
| + scoped_ptr<TalkMediatorImpl> talk3(new TalkMediatorImpl(
|
| + new MockMediatorThread()));
|
| + ASSERT_FALSE(talk3->SetAuthToken("missingdomain", "abcde"));
|
| + ASSERT_EQ(talk3->state_.initialized, 0);
|
| +}
|
| +
|
| +TEST_F(TalkMediatorImplTest, SetAuthTokenWithGoodInput) {
|
| + scoped_ptr<TalkMediatorImpl> talk1(new TalkMediatorImpl(
|
| + new MockMediatorThread()));
|
| + ASSERT_TRUE(talk1->SetAuthToken("chromium@gmail.com", "token"));
|
| + ASSERT_EQ(talk1->state_.initialized, 1);
|
| +
|
| + scoped_ptr<TalkMediatorImpl> talk2(new TalkMediatorImpl(
|
| + new MockMediatorThread()));
|
| + ASSERT_TRUE(talk2->SetAuthToken("chromium@mail.google.com", "token"));
|
| + ASSERT_EQ(talk2->state_.initialized, 1);
|
| +
|
| + scoped_ptr<TalkMediatorImpl> talk3(new TalkMediatorImpl(
|
| + new MockMediatorThread()));
|
| + ASSERT_TRUE(talk3->SetAuthToken("chromium@chromium.org", "token"));
|
| + ASSERT_EQ(talk3->state_.initialized, 1);
|
| +}
|
| +
|
| +TEST_F(TalkMediatorImplTest, LoginWiring) {
|
| + // The TalkMediatorImpl owns the mock.
|
| + MockMediatorThread* mock = new MockMediatorThread();
|
| + scoped_ptr<TalkMediatorImpl> talk1(new TalkMediatorImpl(mock));
|
| +
|
| + // Login checks states for initialization.
|
| + ASSERT_EQ(talk1->Login(), false);
|
| + ASSERT_EQ(mock->login_calls, 0);
|
| +
|
| + ASSERT_EQ(talk1->SetAuthToken("chromium@gmail.com", "token"), true);
|
| + ASSERT_EQ(talk1->Login(), true);
|
| + ASSERT_EQ(mock->login_calls, 1);
|
| +
|
| + // Successive calls to login will fail. One needs to create a new talk
|
| + // mediator object.
|
| + ASSERT_EQ(talk1->Login(), false);
|
| + ASSERT_EQ(mock->login_calls, 1);
|
| +
|
| + ASSERT_EQ(talk1->Logout(), true);
|
| + ASSERT_EQ(mock->logout_calls, 1);
|
| +
|
| + // Successive logout calls do nothing.
|
| + ASSERT_EQ(talk1->Logout(), false);
|
| + ASSERT_EQ(mock->logout_calls, 1);
|
| +}
|
| +
|
| +TEST_F(TalkMediatorImplTest, SendNotification) {
|
| + // The TalkMediatorImpl owns the mock.
|
| + MockMediatorThread* mock = new MockMediatorThread();
|
| + scoped_ptr<TalkMediatorImpl> talk1(new TalkMediatorImpl(mock));
|
| +
|
| + // Failure due to not being logged in.
|
| + ASSERT_EQ(talk1->SendNotification(), false);
|
| + ASSERT_EQ(mock->send_calls, 0);
|
| +
|
| + ASSERT_EQ(talk1->SetAuthToken("chromium@gmail.com", "token"), true);
|
| + ASSERT_EQ(talk1->Login(), true);
|
| + ASSERT_EQ(mock->login_calls, 1);
|
| +
|
| + // Failure due to not being subscribed.
|
| + ASSERT_EQ(talk1->SendNotification(), false);
|
| + ASSERT_EQ(mock->send_calls, 0);
|
| +
|
| + // Fake subscription
|
| + talk1->OnSubscriptionSuccess();
|
| + ASSERT_EQ(talk1->state_.subscribed, 1);
|
| + ASSERT_EQ(talk1->SendNotification(), true);
|
| + ASSERT_EQ(mock->send_calls, 1);
|
| + ASSERT_EQ(talk1->SendNotification(), true);
|
| + ASSERT_EQ(mock->send_calls, 2);
|
| +
|
| + ASSERT_EQ(talk1->Logout(), true);
|
| + ASSERT_EQ(mock->logout_calls, 1);
|
| +
|
| + // Failure due to being logged out.
|
| + ASSERT_EQ(talk1->SendNotification(), false);
|
| + ASSERT_EQ(mock->send_calls, 2);
|
| +}
|
| +
|
| +TEST_F(TalkMediatorImplTest, MediatorThreadCallbacks) {
|
| + // The TalkMediatorImpl owns the mock.
|
| + MockMediatorThread* mock = new MockMediatorThread();
|
| + scoped_ptr<TalkMediatorImpl> talk1(new TalkMediatorImpl(mock));
|
| +
|
| + scoped_ptr<EventListenerHookup> callback(NewEventListenerHookup(
|
| + talk1->channel(), this, &TalkMediatorImplTest::HandleTalkMediatorEvent));
|
| +
|
| + ASSERT_EQ(talk1->SetAuthToken("chromium@gmail.com", "token"), true);
|
| + ASSERT_EQ(talk1->Login(), true);
|
| + ASSERT_EQ(mock->login_calls, 1);
|
| +
|
| + mock->ChangeState(MediatorThread::MSG_LOGGED_IN);
|
| + ASSERT_EQ(last_message_, TalkMediatorEvent::LOGIN_SUCCEEDED);
|
| +
|
| + // The message triggers calls to listen and subscribe.
|
| + ASSERT_EQ(mock->listen_calls, 1);
|
| + ASSERT_EQ(mock->subscribe_calls, 1);
|
| + ASSERT_EQ(talk1->state_.subscribed, 0);
|
| +
|
| + mock->ChangeState(MediatorThread::MSG_SUBSCRIPTION_SUCCESS);
|
| + ASSERT_EQ(last_message_, TalkMediatorEvent::SUBSCRIPTIONS_ON);
|
| + ASSERT_EQ(talk1->state_.subscribed, 1);
|
| +
|
| + // After subscription success is receieved, the talk mediator will allow
|
| + // sending of notifications.
|
| + ASSERT_EQ(talk1->SendNotification(), true);
|
| + ASSERT_EQ(mock->send_calls, 1);
|
| +
|
| + // |MSG_NOTIFICATION_RECEIVED| from the MediatorThread triggers a callback
|
| + // of type |NOTIFICATION_RECEIVED|.
|
| + mock->ChangeState(MediatorThread::MSG_NOTIFICATION_RECEIVED);
|
| + ASSERT_EQ(last_message_, TalkMediatorEvent::NOTIFICATION_RECEIVED);
|
| +
|
| + // A |TALKMEDIATOR_DESTROYED| message is received during tear down.
|
| + talk1.reset();
|
| + ASSERT_EQ(last_message_, TalkMediatorEvent::TALKMEDIATOR_DESTROYED);
|
| +}
|
| +
|
| +} // namespace browser_sync
|
|
|
| Property changes on: chrome\browser\sync\notifier\listener\talk_mediator_unittest.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|