// 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 "remoting/signaling/log_to_server.h" #include "base/message_loop/message_loop.h" #include "base/run_loop.h" #include "remoting/signaling/mock_signal_strategy.h" #include "remoting/signaling/server_log_entry_unittest.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" using buzz::XmlElement; using buzz::QName; using testing::_; using testing::DeleteArg; using testing::InSequence; using testing::Return; namespace remoting { namespace { const char kTestBotJid[] = "remotingunittest@bot.talk.google.com"; const char kClientJid[] = "host@domain.com/1234"; MATCHER_P2(IsLogEntry, key, value, "") { XmlElement* entry = GetSingleLogEntryFromStanza(arg); if (!entry) { return false; } return entry->Attr(QName(std::string(), key)) == value; } } // namespace class LogToServerTest : public testing::Test { public: LogToServerTest() {} virtual void SetUp() OVERRIDE { EXPECT_CALL(signal_strategy_, AddListener(_)); EXPECT_CALL(signal_strategy_, RemoveListener(_)); log_to_server_.reset( new LogToServer(ServerLogEntry::ME2ME, &signal_strategy_, kTestBotJid)); } protected: base::MessageLoop message_loop_; base::RunLoop run_loop_; MockSignalStrategy signal_strategy_; scoped_ptr log_to_server_; }; TEST_F(LogToServerTest, LogWhenConnected) { { InSequence s; EXPECT_CALL(signal_strategy_, GetLocalJid()) .WillRepeatedly(Return(kClientJid)); EXPECT_CALL(signal_strategy_, AddListener(_)); EXPECT_CALL(signal_strategy_, GetNextId()); EXPECT_CALL(signal_strategy_, SendStanzaPtr(IsLogEntry("a", "1"))) .WillOnce(DoAll(DeleteArg<0>(), Return(true))); EXPECT_CALL(signal_strategy_, GetNextId()); EXPECT_CALL(signal_strategy_, SendStanzaPtr(IsLogEntry("b", "2"))) .WillOnce(DoAll(DeleteArg<0>(), Return(true))); EXPECT_CALL(signal_strategy_, RemoveListener(_)) .RetiresOnSaturation(); } ServerLogEntry entry1; ServerLogEntry entry2; entry1.Set("a", "1"); entry2.Set("b", "2"); log_to_server_->Log(entry1); log_to_server_->OnSignalStrategyStateChange(SignalStrategy::CONNECTED); log_to_server_->Log(entry2); run_loop_.RunUntilIdle(); } TEST_F(LogToServerTest, DontLogWhenDisconnected) { EXPECT_CALL(signal_strategy_, GetLocalJid()) .WillRepeatedly(Return(kClientJid)); EXPECT_CALL(signal_strategy_, SendStanzaPtr(_)).Times(0); ServerLogEntry entry; entry.Set("foo", "bar"); log_to_server_->Log(entry); run_loop_.RunUntilIdle(); } } // namespace remoting