• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
12 using testing::_;
13 
14 namespace password_manager {
15 
16 namespace {
17 
18 const char kTestText[] = "abcd1234";
19 
20 class MockLogReceiver : public LogReceiver {
21  public:
MockLogReceiver()22   MockLogReceiver() {}
23 
24   MOCK_METHOD1(LogSavePasswordProgress, void(const std::string&));
25 };
26 
27 class MockClient : public StubPasswordManagerClient {
28  public:
29   MOCK_METHOD1(OnLogRouterAvailabilityChanged, void(bool));
30 };
31 
32 }  // namespace
33 
34 class LogRouterTest : public testing::Test {
35  protected:
36   testing::StrictMock<MockLogReceiver> receiver_;
37   testing::StrictMock<MockLogReceiver> receiver2_;
38   testing::StrictMock<MockClient> client_;
39 };
40 
TEST_F(LogRouterTest,ProcessLog_NoReceiver)41 TEST_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 
TEST_F(LogRouterTest,ProcessLog_OneReceiver)53 TEST_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 
TEST_F(LogRouterTest,ProcessLog_TwoReceiversAccumulatedLogsPassed)62 TEST_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 
TEST_F(LogRouterTest,ProcessLog_TwoReceiversBothUpdated)76 TEST_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 
TEST_F(LogRouterTest,ProcessLog_TwoReceiversNoUpdateAfterUnregistering)89 TEST_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 
TEST_F(LogRouterTest,RegisterClient_NoReceivers)102 TEST_F(LogRouterTest, RegisterClient_NoReceivers) {
103   LogRouter router;
104   EXPECT_FALSE(router.RegisterClient(&client_));
105   router.UnregisterClient(&client_);
106 }
107 
TEST_F(LogRouterTest,RegisterClient_OneReceiverBeforeClient)108 TEST_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 
TEST_F(LogRouterTest,RegisterClient_OneClientBeforeReceiver)121 TEST_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 
TEST_F(LogRouterTest,RegisterClient_OneClientTwoReceivers)136 TEST_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