1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "components/password_manager/core/browser/log_router.h" 6 7#include "components/password_manager/core/browser/log_receiver.h" 8#include "components/password_manager/core/browser/stub_password_manager_client.h" 9#include "testing/gmock/include/gmock/gmock.h" 10#include "testing/gtest/include/gtest/gtest.h" 11 12using testing::_; 13 14namespace password_manager { 15 16namespace { 17 18const char kTestText[] = "abcd1234"; 19 20class MockLogReceiver : public LogReceiver { 21 public: 22 MockLogReceiver() {} 23 24 MOCK_METHOD1(LogSavePasswordProgress, void(const std::string&)); 25}; 26 27class MockClient : public StubPasswordManagerClient { 28 public: 29 MOCK_METHOD1(OnLogRouterAvailabilityChanged, void(bool)); 30}; 31 32} // namespace 33 34class LogRouterTest : public testing::Test { 35 protected: 36 testing::StrictMock<MockLogReceiver> receiver_; 37 testing::StrictMock<MockLogReceiver> receiver2_; 38 testing::StrictMock<MockClient> client_; 39}; 40 41TEST_F(LogRouterTest, ProcessLog_NoReceiver) { 42 LogRouter router; 43 EXPECT_EQ(std::string(), router.RegisterReceiver(&receiver_)); 44 EXPECT_CALL(receiver_, LogSavePasswordProgress(kTestText)).Times(1); 45 router.ProcessLog(kTestText); 46 router.UnregisterReceiver(&receiver_); 47 // Without receivers, accumulated logs should not have been kept. That means 48 // that on the registration of the first receiver, none are returned. 49 EXPECT_EQ(std::string(), router.RegisterReceiver(&receiver_)); 50 router.UnregisterReceiver(&receiver_); 51} 52 53TEST_F(LogRouterTest, ProcessLog_OneReceiver) { 54 LogRouter router; 55 EXPECT_EQ(std::string(), router.RegisterReceiver(&receiver_)); 56 // Check that logs generated after activation are passed. 57 EXPECT_CALL(receiver_, LogSavePasswordProgress(kTestText)).Times(1); 58 router.ProcessLog(kTestText); 59 router.UnregisterReceiver(&receiver_); 60} 61 62TEST_F(LogRouterTest, ProcessLog_TwoReceiversAccumulatedLogsPassed) { 63 LogRouter router; 64 EXPECT_EQ(std::string(), router.RegisterReceiver(&receiver_)); 65 66 // Log something with only the first receiver, to accumulate some logs. 67 EXPECT_CALL(receiver_, LogSavePasswordProgress(kTestText)).Times(1); 68 EXPECT_CALL(receiver2_, LogSavePasswordProgress(kTestText)).Times(0); 69 router.ProcessLog(kTestText); 70 // Accumulated logs get passed on registration. 71 EXPECT_EQ(kTestText, router.RegisterReceiver(&receiver2_)); 72 router.UnregisterReceiver(&receiver_); 73 router.UnregisterReceiver(&receiver2_); 74} 75 76TEST_F(LogRouterTest, ProcessLog_TwoReceiversBothUpdated) { 77 LogRouter router; 78 EXPECT_EQ(std::string(), router.RegisterReceiver(&receiver_)); 79 EXPECT_EQ(std::string(), router.RegisterReceiver(&receiver2_)); 80 81 // Check that both receivers get log updates. 82 EXPECT_CALL(receiver_, LogSavePasswordProgress(kTestText)).Times(1); 83 EXPECT_CALL(receiver2_, LogSavePasswordProgress(kTestText)).Times(1); 84 router.ProcessLog(kTestText); 85 router.UnregisterReceiver(&receiver2_); 86 router.UnregisterReceiver(&receiver_); 87} 88 89TEST_F(LogRouterTest, ProcessLog_TwoReceiversNoUpdateAfterUnregistering) { 90 LogRouter router; 91 EXPECT_EQ(std::string(), router.RegisterReceiver(&receiver_)); 92 EXPECT_EQ(std::string(), router.RegisterReceiver(&receiver2_)); 93 94 // Check that no logs are passed to an unregistered receiver. 95 router.UnregisterReceiver(&receiver_); 96 EXPECT_CALL(receiver_, LogSavePasswordProgress(_)).Times(0); 97 EXPECT_CALL(receiver2_, LogSavePasswordProgress(kTestText)).Times(1); 98 router.ProcessLog(kTestText); 99 router.UnregisterReceiver(&receiver2_); 100} 101 102TEST_F(LogRouterTest, RegisterClient_NoReceivers) { 103 LogRouter router; 104 EXPECT_FALSE(router.RegisterClient(&client_)); 105 router.UnregisterClient(&client_); 106} 107 108TEST_F(LogRouterTest, RegisterClient_OneReceiverBeforeClient) { 109 LogRouter router; 110 // First register a receiver. 111 EXPECT_EQ(std::string(), router.RegisterReceiver(&receiver_)); 112 // The client should be told the LogRouter has some receivers. 113 EXPECT_TRUE(router.RegisterClient(&client_)); 114 // Now unregister the reciever. The client should be told the LogRouter has no 115 // receivers. 116 EXPECT_CALL(client_, OnLogRouterAvailabilityChanged(false)).Times(1); 117 router.UnregisterReceiver(&receiver_); 118 router.UnregisterClient(&client_); 119} 120 121TEST_F(LogRouterTest, RegisterClient_OneClientBeforeReceiver) { 122 LogRouter router; 123 // First register a client; the client should be told the LogRouter has no 124 // receivers. 125 EXPECT_FALSE(router.RegisterClient(&client_)); 126 // Now register the receiver. The client should be notified. 127 EXPECT_CALL(client_, OnLogRouterAvailabilityChanged(true)).Times(1); 128 EXPECT_EQ(std::string(), router.RegisterReceiver(&receiver_)); 129 // Now unregister the client. 130 router.UnregisterClient(&client_); 131 // Now unregister the reciever. The client should not hear about it. 132 EXPECT_CALL(client_, OnLogRouterAvailabilityChanged(_)).Times(0); 133 router.UnregisterReceiver(&receiver_); 134} 135 136TEST_F(LogRouterTest, RegisterClient_OneClientTwoReceivers) { 137 LogRouter router; 138 // First register a client; the client should be told the LogRouter has no 139 // receivers. 140 EXPECT_FALSE(router.RegisterClient(&client_)); 141 // Now register the 1st receiver. The client should be notified. 142 EXPECT_CALL(client_, OnLogRouterAvailabilityChanged(true)).Times(1); 143 EXPECT_EQ(std::string(), router.RegisterReceiver(&receiver_)); 144 // Now register the 2nd receiver. The client should not be notified. 145 EXPECT_CALL(client_, OnLogRouterAvailabilityChanged(true)).Times(0); 146 EXPECT_EQ(std::string(), router.RegisterReceiver(&receiver2_)); 147 // Now unregister the 1st reciever. The client should not hear about it. 148 EXPECT_CALL(client_, OnLogRouterAvailabilityChanged(false)).Times(0); 149 router.UnregisterReceiver(&receiver_); 150 // Now unregister the 2nd reciever. The client should hear about it. 151 EXPECT_CALL(client_, OnLogRouterAvailabilityChanged(false)).Times(1); 152 router.UnregisterReceiver(&receiver2_); 153 // Now unregister the client. 154 router.UnregisterClient(&client_); 155} 156 157} // namespace password_manager 158