Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(229)

Side by Side Diff: remoting/protocol/pairing_registry_unittest.cc

Issue 21128006: Refactored PairingRegistry::Delegate such that it can retrieve/modify for a single client. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: - Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "remoting/protocol/pairing_registry.h" 5 #include "remoting/protocol/pairing_registry.h"
6 6
7 #include <stdlib.h> 7 #include <stdlib.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/compiler_specific.h" 12 #include "base/compiler_specific.h"
13 #include "base/memory/scoped_ptr.h" 13 #include "base/memory/scoped_ptr.h"
14 #include "base/message_loop/message_loop.h"
15 #include "base/run_loop.h"
16 #include "base/thread_task_runner_handle.h"
14 #include "base/values.h" 17 #include "base/values.h"
15 #include "remoting/protocol/protocol_mock_objects.h" 18 #include "remoting/protocol/protocol_mock_objects.h"
16 #include "testing/gmock/include/gmock/gmock.h" 19 #include "testing/gmock/include/gmock/gmock.h"
17 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
18 21
22 using testing::Sequence;
23
19 namespace { 24 namespace {
20 25
21 using remoting::protocol::PairingRegistry; 26 using remoting::protocol::PairingRegistry;
22 27
28 class MockPairingRegistryCallbacks {
29 public:
30 MockPairingRegistryCallbacks() {}
31 virtual ~MockPairingRegistryCallbacks() {}
32
33 MOCK_METHOD1(DoneCallback, void(bool));
34 MOCK_METHOD1(GetAllPairingsCallbackPtr, void(base::ListValue*));
35 MOCK_METHOD1(GetPairingCallback, void(PairingRegistry::Pairing));
36
37 void GetAllPairingsCallback(scoped_ptr<base::ListValue> pairings) {
38 GetAllPairingsCallbackPtr(pairings.get());
39 }
40
41 private:
42 DISALLOW_COPY_AND_ASSIGN(MockPairingRegistryCallbacks);
43 };
44
23 // Verify that a pairing Dictionary has correct entries, but doesn't include 45 // Verify that a pairing Dictionary has correct entries, but doesn't include
24 // any shared secret. 46 // any shared secret.
25 void VerifyPairing(PairingRegistry::Pairing expected, 47 void VerifyPairing(PairingRegistry::Pairing expected,
26 const base::DictionaryValue& actual) { 48 const base::DictionaryValue& actual) {
27 std::string value; 49 std::string value;
28 EXPECT_TRUE(actual.GetString(PairingRegistry::kClientNameKey, &value)); 50 EXPECT_TRUE(actual.GetString(PairingRegistry::kClientNameKey, &value));
29 EXPECT_EQ(expected.client_name(), value); 51 EXPECT_EQ(expected.client_name(), value);
30 EXPECT_TRUE(actual.GetString(PairingRegistry::kClientIdKey, &value)); 52 EXPECT_TRUE(actual.GetString(PairingRegistry::kClientIdKey, &value));
31 EXPECT_EQ(expected.client_id(), value); 53 EXPECT_EQ(expected.client_id(), value);
32 54
(...skipping 19 matching lines...) Expand all
52 PairingRegistry::Pairing actual) { 74 PairingRegistry::Pairing actual) {
53 EXPECT_EQ(expected, actual.shared_secret()); 75 EXPECT_EQ(expected, actual.shared_secret());
54 ++callback_count_; 76 ++callback_count_;
55 } 77 }
56 78
57 void ExpectSaveSuccess(bool success) { 79 void ExpectSaveSuccess(bool success) {
58 EXPECT_TRUE(success); 80 EXPECT_TRUE(success);
59 ++callback_count_; 81 ++callback_count_;
60 } 82 }
61 83
62 void ExpectClientName(const std::string& expected,
63 PairingRegistry::Pairing actual) {
64 EXPECT_EQ(expected, actual.client_name());
65 ++callback_count_;
66 }
67
68 void ExpectNoPairings(scoped_ptr<base::ListValue> pairings) {
69 EXPECT_TRUE(pairings->empty());
70 ++callback_count_;
71 }
72
73 protected: 84 protected:
85 base::MessageLoop message_loop_;
86 base::RunLoop run_loop_;
87
74 int callback_count_; 88 int callback_count_;
75 scoped_ptr<base::ListValue> pairings_; 89 scoped_ptr<base::ListValue> pairings_;
76 }; 90 };
77 91
78 TEST_F(PairingRegistryTest, CreateAndGetPairings) { 92 TEST_F(PairingRegistryTest, CreateAndGetPairings) {
79 MockPairingRegistryDelegate* mock_delegate = 93 scoped_refptr<PairingRegistry> registry = new SynchronousPairingRegistry(
80 new MockPairingRegistryDelegate(); 94 scoped_ptr<PairingRegistry::Delegate>(new MockPairingRegistryDelegate()));
81 scoped_ptr<PairingRegistry::Delegate> delegate(mock_delegate);
82
83 scoped_refptr<PairingRegistry> registry(new PairingRegistry(delegate.Pass()));
84 PairingRegistry::Pairing pairing_1 = registry->CreatePairing("my_client"); 95 PairingRegistry::Pairing pairing_1 = registry->CreatePairing("my_client");
85 mock_delegate->RunCallback();
86 PairingRegistry::Pairing pairing_2 = registry->CreatePairing("my_client"); 96 PairingRegistry::Pairing pairing_2 = registry->CreatePairing("my_client");
87 mock_delegate->RunCallback();
88 97
89 EXPECT_NE(pairing_1.shared_secret(), pairing_2.shared_secret()); 98 EXPECT_NE(pairing_1.shared_secret(), pairing_2.shared_secret());
90 99
91 registry->GetPairing(pairing_1.client_id(), 100 registry->GetPairing(pairing_1.client_id(),
92 base::Bind(&PairingRegistryTest::ExpectSecret, 101 base::Bind(&PairingRegistryTest::ExpectSecret,
93 base::Unretained(this), 102 base::Unretained(this),
94 pairing_1.shared_secret())); 103 pairing_1.shared_secret()));
95 mock_delegate->RunCallback();
96 EXPECT_EQ(1, callback_count_); 104 EXPECT_EQ(1, callback_count_);
97 105
98 // Check that the second client is paired with a different shared secret. 106 // Check that the second client is paired with a different shared secret.
99 registry->GetPairing(pairing_2.client_id(), 107 registry->GetPairing(pairing_2.client_id(),
100 base::Bind(&PairingRegistryTest::ExpectSecret, 108 base::Bind(&PairingRegistryTest::ExpectSecret,
101 base::Unretained(this), 109 base::Unretained(this),
102 pairing_2.shared_secret())); 110 pairing_2.shared_secret()));
103 mock_delegate->RunCallback();
104 EXPECT_EQ(2, callback_count_); 111 EXPECT_EQ(2, callback_count_);
105 } 112 }
106 113
107 TEST_F(PairingRegistryTest, GetAllPairings) { 114 TEST_F(PairingRegistryTest, GetAllPairings) {
108 MockPairingRegistryDelegate* mock_delegate = 115 scoped_refptr<PairingRegistry> registry = new SynchronousPairingRegistry(
109 new MockPairingRegistryDelegate(); 116 scoped_ptr<PairingRegistry::Delegate>(new MockPairingRegistryDelegate()));
110 scoped_ptr<PairingRegistry::Delegate> delegate(mock_delegate);
111
112 scoped_refptr<PairingRegistry> registry(new PairingRegistry(delegate.Pass()));
113 PairingRegistry::Pairing pairing_1 = registry->CreatePairing("client1"); 117 PairingRegistry::Pairing pairing_1 = registry->CreatePairing("client1");
114 mock_delegate->RunCallback();
115 PairingRegistry::Pairing pairing_2 = registry->CreatePairing("client2"); 118 PairingRegistry::Pairing pairing_2 = registry->CreatePairing("client2");
116 mock_delegate->RunCallback();
117 119
118 registry->GetAllPairings( 120 registry->GetAllPairings(
119 base::Bind(&PairingRegistryTest::set_pairings, 121 base::Bind(&PairingRegistryTest::set_pairings,
120 base::Unretained(this))); 122 base::Unretained(this)));
121 mock_delegate->RunCallback();
122 123
123 ASSERT_EQ(2u, pairings_->GetSize()); 124 ASSERT_EQ(2u, pairings_->GetSize());
124 const base::DictionaryValue* actual_pairing_1; 125 const base::DictionaryValue* actual_pairing_1;
125 const base::DictionaryValue* actual_pairing_2; 126 const base::DictionaryValue* actual_pairing_2;
126 ASSERT_TRUE(pairings_->GetDictionary(0, &actual_pairing_1)); 127 ASSERT_TRUE(pairings_->GetDictionary(0, &actual_pairing_1));
127 ASSERT_TRUE(pairings_->GetDictionary(1, &actual_pairing_2)); 128 ASSERT_TRUE(pairings_->GetDictionary(1, &actual_pairing_2));
128 129
129 // Ordering is not guaranteed, so swap if necessary. 130 // Ordering is not guaranteed, so swap if necessary.
130 std::string actual_client_id; 131 std::string actual_client_id;
131 ASSERT_TRUE(actual_pairing_1->GetString(PairingRegistry::kClientIdKey, 132 ASSERT_TRUE(actual_pairing_1->GetString(PairingRegistry::kClientIdKey,
132 &actual_client_id)); 133 &actual_client_id));
133 if (actual_client_id != pairing_1.client_id()) { 134 if (actual_client_id != pairing_1.client_id()) {
134 std::swap(actual_pairing_1, actual_pairing_2); 135 std::swap(actual_pairing_1, actual_pairing_2);
135 } 136 }
136 137
137 VerifyPairing(pairing_1, *actual_pairing_1); 138 VerifyPairing(pairing_1, *actual_pairing_1);
138 VerifyPairing(pairing_2, *actual_pairing_2); 139 VerifyPairing(pairing_2, *actual_pairing_2);
139 } 140 }
140 141
141 TEST_F(PairingRegistryTest, DeletePairing) { 142 TEST_F(PairingRegistryTest, DeletePairing) {
142 MockPairingRegistryDelegate* mock_delegate = 143 scoped_refptr<PairingRegistry> registry = new SynchronousPairingRegistry(
143 new MockPairingRegistryDelegate(); 144 scoped_ptr<PairingRegistry::Delegate>(new MockPairingRegistryDelegate()));
144 scoped_ptr<PairingRegistry::Delegate> delegate(mock_delegate);
145
146 scoped_refptr<PairingRegistry> registry(new PairingRegistry(delegate.Pass()));
147 PairingRegistry::Pairing pairing_1 = registry->CreatePairing("client1"); 145 PairingRegistry::Pairing pairing_1 = registry->CreatePairing("client1");
148 mock_delegate->RunCallback();
149 PairingRegistry::Pairing pairing_2 = registry->CreatePairing("client2"); 146 PairingRegistry::Pairing pairing_2 = registry->CreatePairing("client2");
150 mock_delegate->RunCallback();
151 147
152 registry->DeletePairing( 148 registry->DeletePairing(
153 pairing_1.client_id(), 149 pairing_1.client_id(),
154 base::Bind(&PairingRegistryTest::ExpectSaveSuccess, 150 base::Bind(&PairingRegistryTest::ExpectSaveSuccess,
155 base::Unretained(this))); 151 base::Unretained(this)));
156 mock_delegate->RunCallback();
157 152
158 // Re-read the list, and verify it only has the pairing_2 client. 153 // Re-read the list, and verify it only has the pairing_2 client.
159 registry->GetAllPairings( 154 registry->GetAllPairings(
160 base::Bind(&PairingRegistryTest::set_pairings, 155 base::Bind(&PairingRegistryTest::set_pairings,
161 base::Unretained(this))); 156 base::Unretained(this)));
162 mock_delegate->RunCallback();
163 157
164 ASSERT_EQ(1u, pairings_->GetSize()); 158 ASSERT_EQ(1u, pairings_->GetSize());
165 const base::DictionaryValue* actual_pairing_2; 159 const base::DictionaryValue* actual_pairing_2;
166 ASSERT_TRUE(pairings_->GetDictionary(0, &actual_pairing_2)); 160 ASSERT_TRUE(pairings_->GetDictionary(0, &actual_pairing_2));
167 std::string actual_client_id; 161 std::string actual_client_id;
168 ASSERT_TRUE(actual_pairing_2->GetString(PairingRegistry::kClientIdKey, 162 ASSERT_TRUE(actual_pairing_2->GetString(PairingRegistry::kClientIdKey,
169 &actual_client_id)); 163 &actual_client_id));
170 EXPECT_EQ(pairing_2.client_id(), actual_client_id); 164 EXPECT_EQ(pairing_2.client_id(), actual_client_id);
171 } 165 }
172 166
173 TEST_F(PairingRegistryTest, ClearAllPairings) { 167 TEST_F(PairingRegistryTest, ClearAllPairings) {
174 MockPairingRegistryDelegate* mock_delegate = 168 scoped_refptr<PairingRegistry> registry = new SynchronousPairingRegistry(
175 new MockPairingRegistryDelegate(); 169 scoped_ptr<PairingRegistry::Delegate>(new MockPairingRegistryDelegate()));
176 scoped_ptr<PairingRegistry::Delegate> delegate(mock_delegate);
177
178 scoped_refptr<PairingRegistry> registry(new PairingRegistry(delegate.Pass()));
179 PairingRegistry::Pairing pairing_1 = registry->CreatePairing("client1"); 170 PairingRegistry::Pairing pairing_1 = registry->CreatePairing("client1");
180 mock_delegate->RunCallback();
181 PairingRegistry::Pairing pairing_2 = registry->CreatePairing("client2"); 171 PairingRegistry::Pairing pairing_2 = registry->CreatePairing("client2");
182 mock_delegate->RunCallback();
183 172
184 registry->ClearAllPairings( 173 registry->ClearAllPairings(
185 base::Bind(&PairingRegistryTest::ExpectSaveSuccess, 174 base::Bind(&PairingRegistryTest::ExpectSaveSuccess,
186 base::Unretained(this))); 175 base::Unretained(this)));
187 176
188 // Re-read the list, and verify it is empty. 177 // Re-read the list, and verify it is empty.
189 registry->GetAllPairings( 178 registry->GetAllPairings(
190 base::Bind(&PairingRegistryTest::set_pairings, 179 base::Bind(&PairingRegistryTest::set_pairings,
191 base::Unretained(this))); 180 base::Unretained(this)));
192 mock_delegate->RunCallback();
193 181
194 EXPECT_TRUE(pairings_->empty()); 182 EXPECT_TRUE(pairings_->empty());
195 } 183 }
196 184
185 ACTION_P(QuitMessageLoop, callback) {
186 callback.Run();
187 }
188
189 MATCHER_P(EqualsClientName, client_name, "") {
190 return arg.client_name() == client_name;
191 }
192
193 MATCHER(NoPairings, "") {
194 return arg->empty();
195 }
196
197 TEST_F(PairingRegistryTest, SerializedRequests) { 197 TEST_F(PairingRegistryTest, SerializedRequests) {
198 MockPairingRegistryDelegate* mock_delegate = 198 MockPairingRegistryCallbacks callbacks;
199 new MockPairingRegistryDelegate(); 199 Sequence s;
200 scoped_ptr<PairingRegistry::Delegate> delegate(mock_delegate); 200 EXPECT_CALL(callbacks, GetPairingCallback(EqualsClientName("client1")))
201 mock_delegate->set_run_save_callback_automatically(false); 201 .InSequence(s);
202 EXPECT_CALL(callbacks, GetPairingCallback(EqualsClientName("client2")))
203 .InSequence(s);
204 EXPECT_CALL(callbacks, DoneCallback(true))
205 .InSequence(s);
206 EXPECT_CALL(callbacks, GetPairingCallback(EqualsClientName("client1")))
207 .InSequence(s);
208 EXPECT_CALL(callbacks, GetPairingCallback(EqualsClientName("")))
209 .InSequence(s);
210 EXPECT_CALL(callbacks, DoneCallback(true))
211 .InSequence(s);
212 EXPECT_CALL(callbacks, GetAllPairingsCallbackPtr(NoPairings()))
213 .InSequence(s);
214 EXPECT_CALL(callbacks, GetPairingCallback(EqualsClientName("client3")))
215 .InSequence(s)
216 .WillOnce(QuitMessageLoop(run_loop_.QuitClosure()));
202 217
203 scoped_refptr<PairingRegistry> registry(new PairingRegistry(delegate.Pass())); 218 scoped_refptr<PairingRegistry> registry = new PairingRegistry(
219 base::ThreadTaskRunnerHandle::Get(),
220 scoped_ptr<PairingRegistry::Delegate>(new MockPairingRegistryDelegate()));
204 PairingRegistry::Pairing pairing_1 = registry->CreatePairing("client1"); 221 PairingRegistry::Pairing pairing_1 = registry->CreatePairing("client1");
205 PairingRegistry::Pairing pairing_2 = registry->CreatePairing("client2"); 222 PairingRegistry::Pairing pairing_2 = registry->CreatePairing("client2");
206 registry->GetPairing( 223 registry->GetPairing(
207 pairing_1.client_id(), 224 pairing_1.client_id(),
208 base::Bind(&PairingRegistryTest::ExpectClientName, 225 base::Bind(&MockPairingRegistryCallbacks::GetPairingCallback,
209 base::Unretained(this), "client1")); 226 base::Unretained(&callbacks)));
210 registry->GetPairing( 227 registry->GetPairing(
211 pairing_2.client_id(), 228 pairing_2.client_id(),
212 base::Bind(&PairingRegistryTest::ExpectClientName, 229 base::Bind(&MockPairingRegistryCallbacks::GetPairingCallback,
213 base::Unretained(this), "client2")); 230 base::Unretained(&callbacks)));
214 registry->DeletePairing( 231 registry->DeletePairing(
215 pairing_2.client_id(), 232 pairing_2.client_id(),
216 base::Bind(&PairingRegistryTest::ExpectSaveSuccess, 233 base::Bind(&MockPairingRegistryCallbacks::DoneCallback,
217 base::Unretained(this))); 234 base::Unretained(&callbacks)));
218 registry->GetPairing( 235 registry->GetPairing(
219 pairing_1.client_id(), 236 pairing_1.client_id(),
220 base::Bind(&PairingRegistryTest::ExpectClientName, 237 base::Bind(&MockPairingRegistryCallbacks::GetPairingCallback,
221 base::Unretained(this), "client1")); 238 base::Unretained(&callbacks)));
222 registry->GetPairing( 239 registry->GetPairing(
223 pairing_2.client_id(), 240 pairing_2.client_id(),
224 base::Bind(&PairingRegistryTest::ExpectClientName, 241 base::Bind(&MockPairingRegistryCallbacks::GetPairingCallback,
225 base::Unretained(this), "")); 242 base::Unretained(&callbacks)));
226 registry->ClearAllPairings( 243 registry->ClearAllPairings(
227 base::Bind(&PairingRegistryTest::ExpectSaveSuccess, 244 base::Bind(&MockPairingRegistryCallbacks::DoneCallback,
228 base::Unretained(this))); 245 base::Unretained(&callbacks)));
229 registry->GetAllPairings( 246 registry->GetAllPairings(
230 base::Bind(&PairingRegistryTest::ExpectNoPairings, 247 base::Bind(&MockPairingRegistryCallbacks::GetAllPairingsCallback,
231 base::Unretained(this))); 248 base::Unretained(&callbacks)));
232 PairingRegistry::Pairing pairing_3 = registry->CreatePairing("client3"); 249 PairingRegistry::Pairing pairing_3 = registry->CreatePairing("client3");
233 registry->GetPairing( 250 registry->GetPairing(
234 pairing_3.client_id(), 251 pairing_3.client_id(),
235 base::Bind(&PairingRegistryTest::ExpectClientName, 252 base::Bind(&MockPairingRegistryCallbacks::GetPairingCallback,
236 base::Unretained(this), "client3")); 253 base::Unretained(&callbacks)));
237 254
238 while (mock_delegate->HasCallback()) { 255 run_loop_.Run();
239 mock_delegate->RunCallback();
240 }
241
242 EXPECT_EQ(8, callback_count_);
243 } 256 }
244 257
245 } // namespace protocol 258 } // namespace protocol
246 } // namespace remoting 259 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698