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(ckehoe): Use randomly generated tokens instead. | 36 // TODO(rkc): Add more varied test input. |
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]) { | |
119 run_loop_.reset(new base::RunLoop()); | 118 run_loop_.reset(new base::RunLoop()); |
120 client->RegisterSamplesCallback( | 119 client->RegisterSamplesCallback( |
121 base::Bind(&ChromeWhispernetClientTest::SamplesCallback, | 120 base::Bind(&ChromeWhispernetClientTest::SamplesCallback, |
122 base::Unretained(this))); | 121 base::Unretained(this))); |
123 expected_token_ = token; | 122 expected_token_ = token; |
124 expected_audible_ = audible; | 123 expected_audible_ = audible; |
125 | 124 |
| 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 | |
240 #define MAYBE_MultipleClients DISABLED_MultipleClients | 239 #define MAYBE_MultipleClients DISABLED_MultipleClients |
241 #else | 240 #else |
242 #define MAYBE_Initialize Initialize | 241 #define MAYBE_Initialize Initialize |
243 #define MAYBE_EncodeAndDecode EncodeAndDecode | 242 #define MAYBE_EncodeAndDecode EncodeAndDecode |
244 #define MAYBE_TokenLengths TokenLengths | 243 #define MAYBE_TokenLengths TokenLengths |
245 #define MAYBE_Crc Crc | |
246 #define MAYBE_MultipleClients MultipleClients | 244 #define MAYBE_MultipleClients MultipleClients |
247 #endif | 245 #endif |
248 | 246 |
249 IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, MAYBE_Initialize) { | 247 IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, MAYBE_Initialize) { |
250 InitializeWhispernet(); | 248 InitializeWhispernet(); |
251 } | 249 } |
252 | 250 |
253 IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, MAYBE_EncodeAndDecode) { | 251 IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, MAYBE_EncodeAndDecode) { |
254 scoped_ptr<WhispernetClient> client( | 252 scoped_ptr<WhispernetClient> client( |
255 new ChromeWhispernetClient(browser()->profile())); | 253 new ChromeWhispernetClient(browser()->profile())); |
256 client->Initialize(base::Bind(&IgnoreResult)); | 254 client->Initialize(base::Bind(&IgnoreResult)); |
257 SetupDecode(); | 255 SetupDecode(); |
258 | 256 |
259 TokenParameters token_params[2]; | 257 TokenParameters token_params[2]; |
260 GetTokenParamsForLengths(kTokenLengths, token_params); | 258 GetTokenParamsForLengths(kTokenLengths, token_params); |
261 | 259 |
262 EncodeTokenAndSaveSamples(client.get(), true, kSixZeros, token_params); | 260 EncodeTokenAndSaveSamples(client.get(), true, kSixZeros); |
263 DecodeSamplesAndVerifyToken(client.get(), true, kSixZeros, token_params); | 261 DecodeSamplesAndVerifyToken(client.get(), true, kSixZeros, token_params); |
264 | 262 |
265 EncodeTokenAndSaveSamples(client.get(), false, kSixZeros, token_params); | 263 EncodeTokenAndSaveSamples(client.get(), false, kSixZeros); |
266 DecodeSamplesAndVerifyToken(client.get(), false, kSixZeros, token_params); | 264 DecodeSamplesAndVerifyToken(client.get(), false, kSixZeros, token_params); |
267 } | 265 } |
268 | 266 |
269 IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, MAYBE_TokenLengths) { | 267 IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, MAYBE_TokenLengths) { |
270 scoped_ptr<WhispernetClient> client( | 268 scoped_ptr<WhispernetClient> client( |
271 new ChromeWhispernetClient(browser()->profile())); | 269 new ChromeWhispernetClient(browser()->profile())); |
272 client->Initialize(base::Bind(&IgnoreResult)); | 270 client->Initialize(base::Bind(&IgnoreResult)); |
273 SetupDecode(); | 271 SetupDecode(); |
274 | 272 |
275 const size_t kLongTokenLengths[2] = {8, 9}; | 273 const size_t kLongTokenLengths[2] = {8, 9}; |
276 TokenParameters token_params[2]; | 274 TokenParameters token_params[2]; |
277 GetTokenParamsForLengths(kLongTokenLengths, token_params); | 275 GetTokenParamsForLengths(kLongTokenLengths, token_params); |
278 | 276 |
279 EncodeTokenAndSaveSamples(client.get(), true, kEightZeros, token_params); | 277 EncodeTokenAndSaveSamples(client.get(), true, kEightZeros); |
280 DecodeSamplesAndVerifyToken(client.get(), true, kEightZeros, token_params); | 278 DecodeSamplesAndVerifyToken(client.get(), true, kEightZeros, token_params); |
281 | 279 |
282 EncodeTokenAndSaveSamples(client.get(), false, kNineZeros, token_params); | 280 EncodeTokenAndSaveSamples(client.get(), false, kNineZeros); |
283 DecodeSamplesAndVerifyToken(client.get(), false, kNineZeros, token_params); | 281 DecodeSamplesAndVerifyToken(client.get(), false, kNineZeros, token_params); |
284 } | 282 } |
285 | 283 |
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 | |
304 IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, MAYBE_MultipleClients) { | 284 IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, MAYBE_MultipleClients) { |
305 scoped_ptr<WhispernetClient> client_1( | 285 scoped_ptr<WhispernetClient> client_1( |
306 new ChromeWhispernetClient(browser()->profile())); | 286 new ChromeWhispernetClient(browser()->profile())); |
307 scoped_ptr<WhispernetClient> client_2( | 287 scoped_ptr<WhispernetClient> client_2( |
308 new ChromeWhispernetClient(browser()->profile())); | 288 new ChromeWhispernetClient(browser()->profile())); |
309 scoped_ptr<WhispernetClient> client_3( | 289 scoped_ptr<WhispernetClient> client_3( |
310 new ChromeWhispernetClient(browser()->profile())); | 290 new ChromeWhispernetClient(browser()->profile())); |
311 SetupDecode(); | 291 SetupDecode(); |
312 | 292 |
313 TokenParameters token_params[2]; | 293 TokenParameters token_params[2]; |
314 GetTokenParamsForLengths(kTokenLengths, token_params); | 294 GetTokenParamsForLengths(kTokenLengths, token_params); |
315 | 295 |
316 // Test concurrent initialization. | 296 // Test concurrent initialization. |
317 client_1->Initialize(base::Bind(&IgnoreResult)); | 297 client_1->Initialize(base::Bind(&IgnoreResult)); |
318 client_2->Initialize(base::Bind(&IgnoreResult)); | 298 client_2->Initialize(base::Bind(&IgnoreResult)); |
319 | 299 |
320 EncodeTokenAndSaveSamples(client_1.get(), true, kSixZeros, token_params); | 300 EncodeTokenAndSaveSamples(client_1.get(), true, kSixZeros); |
321 DecodeSamplesAndVerifyToken(client_1.get(), true, kSixZeros, token_params); | 301 DecodeSamplesAndVerifyToken(client_1.get(), true, kSixZeros, token_params); |
322 | 302 |
323 EncodeTokenAndSaveSamples(client_2.get(), false, kSixZeros, token_params); | 303 EncodeTokenAndSaveSamples(client_2.get(), false, kSixZeros); |
324 DecodeSamplesAndVerifyToken(client_2.get(), false, kSixZeros, token_params); | 304 DecodeSamplesAndVerifyToken(client_2.get(), false, kSixZeros, token_params); |
325 | 305 |
326 // Test sequential initialization. | 306 // Test sequential initialization. |
327 client_3->Initialize(base::Bind(&IgnoreResult)); | 307 client_3->Initialize(base::Bind(&IgnoreResult)); |
328 | 308 |
329 EncodeTokenAndSaveSamples(client_3.get(), true, kSixZeros, token_params); | 309 EncodeTokenAndSaveSamples(client_3.get(), true, kSixZeros); |
330 DecodeSamplesAndVerifyToken(client_3.get(), true, kSixZeros, token_params); | 310 DecodeSamplesAndVerifyToken(client_3.get(), true, kSixZeros, token_params); |
331 | 311 |
332 const size_t kLongTokenLengths[2] = {8, 9}; | 312 const size_t kLongTokenLengths[2] = {8, 9}; |
333 GetTokenParamsForLengths(kLongTokenLengths, token_params); | 313 GetTokenParamsForLengths(kLongTokenLengths, token_params); |
334 | 314 |
335 EncodeTokenAndSaveSamples(client_2.get(), true, kEightZeros, token_params); | 315 EncodeTokenAndSaveSamples(client_2.get(), true, kEightZeros); |
336 DecodeSamplesAndVerifyToken(client_2.get(), true, kEightZeros, token_params); | 316 DecodeSamplesAndVerifyToken(client_2.get(), true, kEightZeros, token_params); |
337 } | 317 } |
| 318 |
| 319 // TODO(ckehoe): Test crc and parity |
| 320 // TODO(ckehoe): More multi-client testing |
OLD | NEW |