OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 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 "chrome/browser/copresence/chrome_whispernet_client.h" | 5 #include "chrome/browser/copresence/chrome_whispernet_client.h" |
6 | 6 |
7 #include <cmath> | 7 #include <cmath> |
8 #include <cstdlib> | 8 #include <cstdlib> |
9 #include <string> | 9 #include <string> |
10 | 10 |
(...skipping 15 matching lines...) Expand all Loading... |
26 #include "media/base/audio_bus.h" | 26 #include "media/base/audio_bus.h" |
27 #include "media/base/audio_converter.h" | 27 #include "media/base/audio_converter.h" |
28 | 28 |
29 using audio_modem::WhispernetClient; | 29 using audio_modem::WhispernetClient; |
30 using audio_modem::AUDIBLE; | 30 using audio_modem::AUDIBLE; |
31 using audio_modem::INAUDIBLE; | 31 using audio_modem::INAUDIBLE; |
32 using audio_modem::TokenParameters; | 32 using audio_modem::TokenParameters; |
33 | 33 |
34 namespace { | 34 namespace { |
35 | 35 |
36 // TODO(rkc): Add more varied test input. | 36 // TODO(ckehoe): Use randomly generated tokens instead. |
37 const char kSixZeros[] = "MDAwMDAw"; | 37 const char kSixZeros[] = "MDAwMDAw"; |
38 const char kEightZeros[] = "MDAwMDAwMDA"; | 38 const char kEightZeros[] = "MDAwMDAwMDA"; |
39 const char kNineZeros[] = "MDAwMDAwMDAw"; | 39 const char kNineZeros[] = "MDAwMDAwMDAw"; |
40 | 40 |
41 const size_t kTokenLengths[2] = {6, 6}; | 41 const size_t kTokenLengths[2] = {6, 6}; |
42 | 42 |
43 // Copied from src/components/copresence/mediums/audio/audio_recorder.cc | 43 // Copied from src/components/copresence/mediums/audio/audio_recorder.cc |
44 std::string AudioBusToString(scoped_refptr<media::AudioBusRefCounted> source) { | 44 std::string AudioBusToString(scoped_refptr<media::AudioBusRefCounted> source) { |
45 std::string buffer; | 45 std::string buffer; |
46 buffer.resize(source->frames() * source->channels() * sizeof(float)); | 46 buffer.resize(source->frames() * source->channels() * sizeof(float)); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
107 media::AudioParameters::NO_EFFECTS); | 107 media::AudioParameters::NO_EFFECTS); |
108 | 108 |
109 converter_.reset(new media::AudioConverter( | 109 converter_.reset(new media::AudioConverter( |
110 coder_params_, default_params_, | 110 coder_params_, default_params_, |
111 default_params_.sample_rate() == coder_params_.sample_rate())); | 111 default_params_.sample_rate() == coder_params_.sample_rate())); |
112 converter_->AddInput(this); | 112 converter_->AddInput(this); |
113 } | 113 } |
114 | 114 |
115 void EncodeTokenAndSaveSamples(WhispernetClient* client, | 115 void EncodeTokenAndSaveSamples(WhispernetClient* client, |
116 bool audible, | 116 bool audible, |
117 const std::string& token) { | 117 const std::string& token, |
| 118 const TokenParameters token_params[2]) { |
118 run_loop_.reset(new base::RunLoop()); | 119 run_loop_.reset(new base::RunLoop()); |
119 client->RegisterSamplesCallback( | 120 client->RegisterSamplesCallback( |
120 base::Bind(&ChromeWhispernetClientTest::SamplesCallback, | 121 base::Bind(&ChromeWhispernetClientTest::SamplesCallback, |
121 base::Unretained(this))); | 122 base::Unretained(this))); |
122 expected_token_ = token; | 123 expected_token_ = token; |
123 expected_audible_ = audible; | 124 expected_audible_ = audible; |
124 | 125 |
125 TokenParameters token_params[2]; | |
126 client->EncodeToken(token, audible ? AUDIBLE : INAUDIBLE, token_params); | 126 client->EncodeToken(token, audible ? AUDIBLE : INAUDIBLE, token_params); |
127 run_loop_->Run(); | 127 run_loop_->Run(); |
128 | 128 |
129 EXPECT_GT(saved_samples_->frames(), 0); | 129 EXPECT_GT(saved_samples_->frames(), 0); |
130 } | 130 } |
131 | 131 |
132 void DecodeSamplesAndVerifyToken(WhispernetClient* client, | 132 void DecodeSamplesAndVerifyToken(WhispernetClient* client, |
133 bool expect_audible, | 133 bool expect_audible, |
134 const std::string& expected_token, | 134 const std::string& expected_token, |
135 const TokenParameters token_params[2]) { | 135 const TokenParameters token_params[2]) { |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
229 media::AudioParameters coder_params_; | 229 media::AudioParameters coder_params_; |
230 | 230 |
231 DISALLOW_COPY_AND_ASSIGN(ChromeWhispernetClientTest); | 231 DISALLOW_COPY_AND_ASSIGN(ChromeWhispernetClientTest); |
232 }; | 232 }; |
233 | 233 |
234 // These tests are irrelevant if NACL is disabled. See crbug.com/449198 | 234 // These tests are irrelevant if NACL is disabled. See crbug.com/449198 |
235 #if defined(DISABLE_NACL) | 235 #if defined(DISABLE_NACL) |
236 #define MAYBE_Initialize DISABLED_Initialize | 236 #define MAYBE_Initialize DISABLED_Initialize |
237 #define MAYBE_EncodeAndDecode DISABLED_EncodeAndDecode | 237 #define MAYBE_EncodeAndDecode DISABLED_EncodeAndDecode |
238 #define MAYBE_TokenLengths DISABLED_TokenLengths | 238 #define MAYBE_TokenLengths DISABLED_TokenLengths |
| 239 #define MAYBE_Crc DISABLED_Crc |
239 #define MAYBE_MultipleClients DISABLED_MultipleClients | 240 #define MAYBE_MultipleClients DISABLED_MultipleClients |
240 #else | 241 #else |
241 #define MAYBE_Initialize Initialize | 242 #define MAYBE_Initialize Initialize |
242 #define MAYBE_EncodeAndDecode EncodeAndDecode | 243 #define MAYBE_EncodeAndDecode EncodeAndDecode |
243 #define MAYBE_TokenLengths TokenLengths | 244 #define MAYBE_TokenLengths TokenLengths |
| 245 #define MAYBE_Crc Crc |
244 #define MAYBE_MultipleClients MultipleClients | 246 #define MAYBE_MultipleClients MultipleClients |
245 #endif | 247 #endif |
246 | 248 |
247 IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, MAYBE_Initialize) { | 249 IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, MAYBE_Initialize) { |
248 InitializeWhispernet(); | 250 InitializeWhispernet(); |
249 } | 251 } |
250 | 252 |
251 IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, MAYBE_EncodeAndDecode) { | 253 IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, MAYBE_EncodeAndDecode) { |
252 scoped_ptr<WhispernetClient> client( | 254 scoped_ptr<WhispernetClient> client( |
253 new ChromeWhispernetClient(browser()->profile())); | 255 new ChromeWhispernetClient(browser()->profile())); |
254 client->Initialize(base::Bind(&IgnoreResult)); | 256 client->Initialize(base::Bind(&IgnoreResult)); |
255 SetupDecode(); | 257 SetupDecode(); |
256 | 258 |
257 TokenParameters token_params[2]; | 259 TokenParameters token_params[2]; |
258 GetTokenParamsForLengths(kTokenLengths, token_params); | 260 GetTokenParamsForLengths(kTokenLengths, token_params); |
259 | 261 |
260 EncodeTokenAndSaveSamples(client.get(), true, kSixZeros); | 262 EncodeTokenAndSaveSamples(client.get(), true, kSixZeros, token_params); |
261 DecodeSamplesAndVerifyToken(client.get(), true, kSixZeros, token_params); | 263 DecodeSamplesAndVerifyToken(client.get(), true, kSixZeros, token_params); |
262 | 264 |
263 EncodeTokenAndSaveSamples(client.get(), false, kSixZeros); | 265 EncodeTokenAndSaveSamples(client.get(), false, kSixZeros, token_params); |
264 DecodeSamplesAndVerifyToken(client.get(), false, kSixZeros, token_params); | 266 DecodeSamplesAndVerifyToken(client.get(), false, kSixZeros, token_params); |
265 } | 267 } |
266 | 268 |
267 IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, MAYBE_TokenLengths) { | 269 IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, MAYBE_TokenLengths) { |
268 scoped_ptr<WhispernetClient> client( | 270 scoped_ptr<WhispernetClient> client( |
269 new ChromeWhispernetClient(browser()->profile())); | 271 new ChromeWhispernetClient(browser()->profile())); |
270 client->Initialize(base::Bind(&IgnoreResult)); | 272 client->Initialize(base::Bind(&IgnoreResult)); |
271 SetupDecode(); | 273 SetupDecode(); |
272 | 274 |
273 const size_t kLongTokenLengths[2] = {8, 9}; | 275 const size_t kLongTokenLengths[2] = {8, 9}; |
274 TokenParameters token_params[2]; | 276 TokenParameters token_params[2]; |
275 GetTokenParamsForLengths(kLongTokenLengths, token_params); | 277 GetTokenParamsForLengths(kLongTokenLengths, token_params); |
276 | 278 |
277 EncodeTokenAndSaveSamples(client.get(), true, kEightZeros); | 279 EncodeTokenAndSaveSamples(client.get(), true, kEightZeros, token_params); |
278 DecodeSamplesAndVerifyToken(client.get(), true, kEightZeros, token_params); | 280 DecodeSamplesAndVerifyToken(client.get(), true, kEightZeros, token_params); |
279 | 281 |
280 EncodeTokenAndSaveSamples(client.get(), false, kNineZeros); | 282 EncodeTokenAndSaveSamples(client.get(), false, kNineZeros, token_params); |
281 DecodeSamplesAndVerifyToken(client.get(), false, kNineZeros, token_params); | 283 DecodeSamplesAndVerifyToken(client.get(), false, kNineZeros, token_params); |
282 } | 284 } |
283 | 285 |
| 286 IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, MAYBE_Crc) { |
| 287 scoped_ptr<WhispernetClient> client( |
| 288 new ChromeWhispernetClient(browser()->profile())); |
| 289 client->Initialize(base::Bind(&IgnoreResult)); |
| 290 SetupDecode(); |
| 291 |
| 292 TokenParameters token_params[2]; |
| 293 GetTokenParamsForLengths(kTokenLengths, token_params); |
| 294 token_params[0].crc = true; |
| 295 token_params[1].crc = true; |
| 296 |
| 297 EncodeTokenAndSaveSamples(client.get(), true, kSixZeros, token_params); |
| 298 DecodeSamplesAndVerifyToken(client.get(), true, kSixZeros, token_params); |
| 299 |
| 300 EncodeTokenAndSaveSamples(client.get(), false, kSixZeros, token_params); |
| 301 DecodeSamplesAndVerifyToken(client.get(), false, kSixZeros, token_params); |
| 302 } |
| 303 |
284 IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, MAYBE_MultipleClients) { | 304 IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, MAYBE_MultipleClients) { |
285 scoped_ptr<WhispernetClient> client_1( | 305 scoped_ptr<WhispernetClient> client_1( |
286 new ChromeWhispernetClient(browser()->profile())); | 306 new ChromeWhispernetClient(browser()->profile())); |
287 scoped_ptr<WhispernetClient> client_2( | 307 scoped_ptr<WhispernetClient> client_2( |
288 new ChromeWhispernetClient(browser()->profile())); | 308 new ChromeWhispernetClient(browser()->profile())); |
289 scoped_ptr<WhispernetClient> client_3( | 309 scoped_ptr<WhispernetClient> client_3( |
290 new ChromeWhispernetClient(browser()->profile())); | 310 new ChromeWhispernetClient(browser()->profile())); |
291 SetupDecode(); | 311 SetupDecode(); |
292 | 312 |
293 TokenParameters token_params[2]; | 313 TokenParameters token_params[2]; |
294 GetTokenParamsForLengths(kTokenLengths, token_params); | 314 GetTokenParamsForLengths(kTokenLengths, token_params); |
295 | 315 |
296 // Test concurrent initialization. | 316 // Test concurrent initialization. |
297 client_1->Initialize(base::Bind(&IgnoreResult)); | 317 client_1->Initialize(base::Bind(&IgnoreResult)); |
298 client_2->Initialize(base::Bind(&IgnoreResult)); | 318 client_2->Initialize(base::Bind(&IgnoreResult)); |
299 | 319 |
300 EncodeTokenAndSaveSamples(client_1.get(), true, kSixZeros); | 320 EncodeTokenAndSaveSamples(client_1.get(), true, kSixZeros, token_params); |
301 DecodeSamplesAndVerifyToken(client_1.get(), true, kSixZeros, token_params); | 321 DecodeSamplesAndVerifyToken(client_1.get(), true, kSixZeros, token_params); |
302 | 322 |
303 EncodeTokenAndSaveSamples(client_2.get(), false, kSixZeros); | 323 EncodeTokenAndSaveSamples(client_2.get(), false, kSixZeros, token_params); |
304 DecodeSamplesAndVerifyToken(client_2.get(), false, kSixZeros, token_params); | 324 DecodeSamplesAndVerifyToken(client_2.get(), false, kSixZeros, token_params); |
305 | 325 |
306 // Test sequential initialization. | 326 // Test sequential initialization. |
307 client_3->Initialize(base::Bind(&IgnoreResult)); | 327 client_3->Initialize(base::Bind(&IgnoreResult)); |
308 | 328 |
309 EncodeTokenAndSaveSamples(client_3.get(), true, kSixZeros); | 329 EncodeTokenAndSaveSamples(client_3.get(), true, kSixZeros, token_params); |
310 DecodeSamplesAndVerifyToken(client_3.get(), true, kSixZeros, token_params); | 330 DecodeSamplesAndVerifyToken(client_3.get(), true, kSixZeros, token_params); |
311 | 331 |
312 const size_t kLongTokenLengths[2] = {8, 9}; | 332 const size_t kLongTokenLengths[2] = {8, 9}; |
313 GetTokenParamsForLengths(kLongTokenLengths, token_params); | 333 GetTokenParamsForLengths(kLongTokenLengths, token_params); |
314 | 334 |
315 EncodeTokenAndSaveSamples(client_2.get(), true, kEightZeros); | 335 EncodeTokenAndSaveSamples(client_2.get(), true, kEightZeros, token_params); |
316 DecodeSamplesAndVerifyToken(client_2.get(), true, kEightZeros, token_params); | 336 DecodeSamplesAndVerifyToken(client_2.get(), true, kEightZeros, token_params); |
317 } | 337 } |
318 | |
319 // TODO(ckehoe): Test crc and parity | |
320 // TODO(ckehoe): More multi-client testing | |
OLD | NEW |