OLD | NEW |
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 |
(...skipping 15 matching lines...) Expand all Loading... |
26 const base::DictionaryValue& actual) { | 26 const base::DictionaryValue& actual) { |
27 std::string value; | 27 std::string value; |
28 EXPECT_TRUE(actual.GetString(PairingRegistry::kClientNameKey, &value)); | 28 EXPECT_TRUE(actual.GetString(PairingRegistry::kClientNameKey, &value)); |
29 EXPECT_EQ(expected.client_name(), value); | 29 EXPECT_EQ(expected.client_name(), value); |
30 EXPECT_TRUE(actual.GetString(PairingRegistry::kClientIdKey, &value)); | 30 EXPECT_TRUE(actual.GetString(PairingRegistry::kClientIdKey, &value)); |
31 EXPECT_EQ(expected.client_id(), value); | 31 EXPECT_EQ(expected.client_id(), value); |
32 | 32 |
33 EXPECT_FALSE(actual.HasKey(PairingRegistry::kSharedSecretKey)); | 33 EXPECT_FALSE(actual.HasKey(PairingRegistry::kSharedSecretKey)); |
34 } | 34 } |
35 | 35 |
36 // SaveCallback that expects to be called with success = true. | |
37 void ExpectSaveSuccess(bool success) { | |
38 EXPECT_TRUE(success); | |
39 } | |
40 | |
41 } // namespace | 36 } // namespace |
42 | 37 |
43 namespace remoting { | 38 namespace remoting { |
44 namespace protocol { | 39 namespace protocol { |
45 | 40 |
46 class PairingRegistryTest : public testing::Test { | 41 class PairingRegistryTest : public testing::Test { |
47 public: | 42 public: |
48 void CompareSecret(const std::string& expected, | 43 virtual void SetUp() OVERRIDE { |
49 PairingRegistry::Pairing actual) { | 44 callback_count_ = 0; |
50 EXPECT_EQ(expected, actual.shared_secret()); | |
51 secret_ = actual.shared_secret(); | |
52 got_secret_ = true; | |
53 } | 45 } |
54 | 46 |
55 void set_pairings(scoped_ptr<base::ListValue> pairings) { | 47 void set_pairings(scoped_ptr<base::ListValue> pairings) { |
56 pairings_ = pairings.Pass(); | 48 pairings_ = pairings.Pass(); |
57 } | 49 } |
58 | 50 |
| 51 void ExpectSecret(const std::string& expected, |
| 52 PairingRegistry::Pairing actual) { |
| 53 EXPECT_EQ(expected, actual.shared_secret()); |
| 54 ++callback_count_; |
| 55 } |
| 56 |
| 57 void ExpectSaveSuccess(bool success) { |
| 58 EXPECT_TRUE(success); |
| 59 ++callback_count_; |
| 60 } |
| 61 |
| 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 |
59 protected: | 73 protected: |
60 std::string secret_; | 74 int callback_count_; |
61 bool got_secret_; | |
62 scoped_ptr<base::ListValue> pairings_; | 75 scoped_ptr<base::ListValue> pairings_; |
63 }; | 76 }; |
64 | 77 |
65 TEST_F(PairingRegistryTest, CreateAndGetPairings) { | 78 TEST_F(PairingRegistryTest, CreateAndGetPairings) { |
66 MockPairingRegistryDelegate* mock_delegate = | 79 MockPairingRegistryDelegate* mock_delegate = |
67 new MockPairingRegistryDelegate(); | 80 new MockPairingRegistryDelegate(); |
68 scoped_ptr<PairingRegistry::Delegate> delegate(mock_delegate); | 81 scoped_ptr<PairingRegistry::Delegate> delegate(mock_delegate); |
69 | 82 |
70 scoped_refptr<PairingRegistry> registry(new PairingRegistry(delegate.Pass())); | 83 scoped_refptr<PairingRegistry> registry(new PairingRegistry(delegate.Pass())); |
71 PairingRegistry::Pairing pairing_1 = registry->CreatePairing("my_client"); | 84 PairingRegistry::Pairing pairing_1 = registry->CreatePairing("my_client"); |
72 mock_delegate->RunCallback(); | 85 mock_delegate->RunCallback(); |
73 PairingRegistry::Pairing pairing_2 = registry->CreatePairing("my_client"); | 86 PairingRegistry::Pairing pairing_2 = registry->CreatePairing("my_client"); |
74 mock_delegate->RunCallback(); | 87 mock_delegate->RunCallback(); |
75 | 88 |
| 89 EXPECT_NE(pairing_1.shared_secret(), pairing_2.shared_secret()); |
| 90 |
76 registry->GetPairing(pairing_1.client_id(), | 91 registry->GetPairing(pairing_1.client_id(), |
77 base::Bind(&PairingRegistryTest::CompareSecret, | 92 base::Bind(&PairingRegistryTest::ExpectSecret, |
78 base::Unretained(this), | 93 base::Unretained(this), |
79 pairing_1.shared_secret())); | 94 pairing_1.shared_secret())); |
80 got_secret_ = false; | |
81 mock_delegate->RunCallback(); | 95 mock_delegate->RunCallback(); |
82 EXPECT_TRUE(got_secret_); | 96 EXPECT_EQ(1, callback_count_); |
83 std::string secret_1 = secret_; | |
84 | 97 |
85 // Check that the second client is paired with a different shared secret. | 98 // Check that the second client is paired with a different shared secret. |
86 registry->GetPairing(pairing_2.client_id(), | 99 registry->GetPairing(pairing_2.client_id(), |
87 base::Bind(&PairingRegistryTest::CompareSecret, | 100 base::Bind(&PairingRegistryTest::ExpectSecret, |
88 base::Unretained(this), | 101 base::Unretained(this), |
89 pairing_2.shared_secret())); | 102 pairing_2.shared_secret())); |
90 got_secret_ = false; | |
91 mock_delegate->RunCallback(); | 103 mock_delegate->RunCallback(); |
92 EXPECT_TRUE(got_secret_); | 104 EXPECT_EQ(2, callback_count_); |
93 EXPECT_NE(secret_, secret_1); | |
94 } | 105 } |
95 | 106 |
96 TEST_F(PairingRegistryTest, GetAllPairings) { | 107 TEST_F(PairingRegistryTest, GetAllPairings) { |
97 MockPairingRegistryDelegate* mock_delegate = | 108 MockPairingRegistryDelegate* mock_delegate = |
98 new MockPairingRegistryDelegate(); | 109 new MockPairingRegistryDelegate(); |
99 scoped_ptr<PairingRegistry::Delegate> delegate(mock_delegate); | 110 scoped_ptr<PairingRegistry::Delegate> delegate(mock_delegate); |
100 | 111 |
101 scoped_refptr<PairingRegistry> registry(new PairingRegistry(delegate.Pass())); | 112 scoped_refptr<PairingRegistry> registry(new PairingRegistry(delegate.Pass())); |
102 PairingRegistry::Pairing pairing_1 = registry->CreatePairing("client1"); | 113 PairingRegistry::Pairing pairing_1 = registry->CreatePairing("client1"); |
103 mock_delegate->RunCallback(); | 114 mock_delegate->RunCallback(); |
(...skipping 27 matching lines...) Expand all Loading... |
131 MockPairingRegistryDelegate* mock_delegate = | 142 MockPairingRegistryDelegate* mock_delegate = |
132 new MockPairingRegistryDelegate(); | 143 new MockPairingRegistryDelegate(); |
133 scoped_ptr<PairingRegistry::Delegate> delegate(mock_delegate); | 144 scoped_ptr<PairingRegistry::Delegate> delegate(mock_delegate); |
134 | 145 |
135 scoped_refptr<PairingRegistry> registry(new PairingRegistry(delegate.Pass())); | 146 scoped_refptr<PairingRegistry> registry(new PairingRegistry(delegate.Pass())); |
136 PairingRegistry::Pairing pairing_1 = registry->CreatePairing("client1"); | 147 PairingRegistry::Pairing pairing_1 = registry->CreatePairing("client1"); |
137 mock_delegate->RunCallback(); | 148 mock_delegate->RunCallback(); |
138 PairingRegistry::Pairing pairing_2 = registry->CreatePairing("client2"); | 149 PairingRegistry::Pairing pairing_2 = registry->CreatePairing("client2"); |
139 mock_delegate->RunCallback(); | 150 mock_delegate->RunCallback(); |
140 | 151 |
141 registry->DeletePairing(pairing_1.client_id(), base::Bind(ExpectSaveSuccess)); | 152 registry->DeletePairing( |
| 153 pairing_1.client_id(), |
| 154 base::Bind(&PairingRegistryTest::ExpectSaveSuccess, |
| 155 base::Unretained(this))); |
142 mock_delegate->RunCallback(); | 156 mock_delegate->RunCallback(); |
143 | 157 |
144 // Re-read the list, and verify it only has the pairing_2 client. | 158 // Re-read the list, and verify it only has the pairing_2 client. |
145 registry->GetAllPairings( | 159 registry->GetAllPairings( |
146 base::Bind(&PairingRegistryTest::set_pairings, | 160 base::Bind(&PairingRegistryTest::set_pairings, |
147 base::Unretained(this))); | 161 base::Unretained(this))); |
148 mock_delegate->RunCallback(); | 162 mock_delegate->RunCallback(); |
149 | 163 |
150 ASSERT_EQ(1u, pairings_->GetSize()); | 164 ASSERT_EQ(1u, pairings_->GetSize()); |
151 const base::DictionaryValue* actual_pairing_2; | 165 const base::DictionaryValue* actual_pairing_2; |
152 ASSERT_TRUE(pairings_->GetDictionary(0, &actual_pairing_2)); | 166 ASSERT_TRUE(pairings_->GetDictionary(0, &actual_pairing_2)); |
153 std::string actual_client_id; | 167 std::string actual_client_id; |
154 ASSERT_TRUE(actual_pairing_2->GetString(PairingRegistry::kClientIdKey, | 168 ASSERT_TRUE(actual_pairing_2->GetString(PairingRegistry::kClientIdKey, |
155 &actual_client_id)); | 169 &actual_client_id)); |
156 EXPECT_EQ(pairing_2.client_id(), actual_client_id); | 170 EXPECT_EQ(pairing_2.client_id(), actual_client_id); |
157 } | 171 } |
158 | 172 |
159 TEST_F(PairingRegistryTest, ClearAllPairings) { | 173 TEST_F(PairingRegistryTest, ClearAllPairings) { |
160 MockPairingRegistryDelegate* mock_delegate = | 174 MockPairingRegistryDelegate* mock_delegate = |
161 new MockPairingRegistryDelegate(); | 175 new MockPairingRegistryDelegate(); |
162 scoped_ptr<PairingRegistry::Delegate> delegate(mock_delegate); | 176 scoped_ptr<PairingRegistry::Delegate> delegate(mock_delegate); |
163 | 177 |
164 scoped_refptr<PairingRegistry> registry(new PairingRegistry(delegate.Pass())); | 178 scoped_refptr<PairingRegistry> registry(new PairingRegistry(delegate.Pass())); |
165 PairingRegistry::Pairing pairing_1 = registry->CreatePairing("client1"); | 179 PairingRegistry::Pairing pairing_1 = registry->CreatePairing("client1"); |
166 mock_delegate->RunCallback(); | 180 mock_delegate->RunCallback(); |
167 PairingRegistry::Pairing pairing_2 = registry->CreatePairing("client2"); | 181 PairingRegistry::Pairing pairing_2 = registry->CreatePairing("client2"); |
168 mock_delegate->RunCallback(); | 182 mock_delegate->RunCallback(); |
169 | 183 |
170 registry->ClearAllPairings(base::Bind(ExpectSaveSuccess)); | 184 registry->ClearAllPairings( |
| 185 base::Bind(&PairingRegistryTest::ExpectSaveSuccess, |
| 186 base::Unretained(this))); |
171 | 187 |
172 // Re-read the list, and verify it is empty. | 188 // Re-read the list, and verify it is empty. |
173 registry->GetAllPairings( | 189 registry->GetAllPairings( |
174 base::Bind(&PairingRegistryTest::set_pairings, | 190 base::Bind(&PairingRegistryTest::set_pairings, |
175 base::Unretained(this))); | 191 base::Unretained(this))); |
176 mock_delegate->RunCallback(); | 192 mock_delegate->RunCallback(); |
177 | 193 |
178 EXPECT_TRUE(pairings_->empty()); | 194 EXPECT_TRUE(pairings_->empty()); |
179 } | 195 } |
180 | 196 |
| 197 TEST_F(PairingRegistryTest, SerializedRequests) { |
| 198 MockPairingRegistryDelegate* mock_delegate = |
| 199 new MockPairingRegistryDelegate(); |
| 200 scoped_ptr<PairingRegistry::Delegate> delegate(mock_delegate); |
| 201 mock_delegate->set_run_save_callback_automatically(false); |
| 202 |
| 203 scoped_refptr<PairingRegistry> registry(new PairingRegistry(delegate.Pass())); |
| 204 PairingRegistry::Pairing pairing_1 = registry->CreatePairing("client1"); |
| 205 PairingRegistry::Pairing pairing_2 = registry->CreatePairing("client2"); |
| 206 registry->GetPairing( |
| 207 pairing_1.client_id(), |
| 208 base::Bind(&PairingRegistryTest::ExpectClientName, |
| 209 base::Unretained(this), "client1")); |
| 210 registry->GetPairing( |
| 211 pairing_2.client_id(), |
| 212 base::Bind(&PairingRegistryTest::ExpectClientName, |
| 213 base::Unretained(this), "client2")); |
| 214 registry->DeletePairing( |
| 215 pairing_2.client_id(), |
| 216 base::Bind(&PairingRegistryTest::ExpectSaveSuccess, |
| 217 base::Unretained(this))); |
| 218 registry->GetPairing( |
| 219 pairing_1.client_id(), |
| 220 base::Bind(&PairingRegistryTest::ExpectClientName, |
| 221 base::Unretained(this), "client1")); |
| 222 registry->GetPairing( |
| 223 pairing_2.client_id(), |
| 224 base::Bind(&PairingRegistryTest::ExpectClientName, |
| 225 base::Unretained(this), "")); |
| 226 registry->ClearAllPairings( |
| 227 base::Bind(&PairingRegistryTest::ExpectSaveSuccess, |
| 228 base::Unretained(this))); |
| 229 registry->GetAllPairings( |
| 230 base::Bind(&PairingRegistryTest::ExpectNoPairings, |
| 231 base::Unretained(this))); |
| 232 PairingRegistry::Pairing pairing_3 = registry->CreatePairing("client3"); |
| 233 registry->GetPairing( |
| 234 pairing_3.client_id(), |
| 235 base::Bind(&PairingRegistryTest::ExpectClientName, |
| 236 base::Unretained(this), "client3")); |
| 237 |
| 238 while (mock_delegate->HasCallback()) { |
| 239 mock_delegate->RunCallback(); |
| 240 } |
| 241 |
| 242 EXPECT_EQ(8, callback_count_); |
| 243 } |
| 244 |
181 } // namespace protocol | 245 } // namespace protocol |
182 } // namespace remoting | 246 } // namespace remoting |
OLD | NEW |