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 "base/metrics/field_trial.h" | 5 #include "base/metrics/field_trial.h" |
6 | 6 |
7 #include "base/message_loop/message_loop.h" | 7 #include "base/message_loop/message_loop.h" |
8 #include "base/rand_util.h" | 8 #include "base/rand_util.h" |
9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
378 | 378 |
379 FieldTrialList::StatesToString(&save_string); | 379 FieldTrialList::StatesToString(&save_string); |
380 EXPECT_EQ("Some name/Winner/xxx/yyyy/zzz/default/", save_string); | 380 EXPECT_EQ("Some name/Winner/xxx/yyyy/zzz/default/", save_string); |
381 } | 381 } |
382 | 382 |
383 TEST_F(FieldTrialTest, Restore) { | 383 TEST_F(FieldTrialTest, Restore) { |
384 ASSERT_FALSE(FieldTrialList::TrialExists("Some_name")); | 384 ASSERT_FALSE(FieldTrialList::TrialExists("Some_name")); |
385 ASSERT_FALSE(FieldTrialList::TrialExists("xxx")); | 385 ASSERT_FALSE(FieldTrialList::TrialExists("xxx")); |
386 | 386 |
387 FieldTrialList::CreateTrialsFromString("Some_name/Winner/xxx/yyyy/", | 387 FieldTrialList::CreateTrialsFromString("Some_name/Winner/xxx/yyyy/", |
388 FieldTrialList::DONT_ACTIVATE_TRIALS); | 388 FieldTrialList::DONT_ACTIVATE_TRIALS, |
| 389 std::set<std::string>()); |
389 | 390 |
390 FieldTrial* trial = FieldTrialList::Find("Some_name"); | 391 FieldTrial* trial = FieldTrialList::Find("Some_name"); |
391 ASSERT_NE(static_cast<FieldTrial*>(NULL), trial); | 392 ASSERT_NE(static_cast<FieldTrial*>(NULL), trial); |
392 EXPECT_EQ("Winner", trial->group_name()); | 393 EXPECT_EQ("Winner", trial->group_name()); |
393 EXPECT_EQ("Some_name", trial->trial_name()); | 394 EXPECT_EQ("Some_name", trial->trial_name()); |
394 | 395 |
395 trial = FieldTrialList::Find("xxx"); | 396 trial = FieldTrialList::Find("xxx"); |
396 ASSERT_NE(static_cast<FieldTrial*>(NULL), trial); | 397 ASSERT_NE(static_cast<FieldTrial*>(NULL), trial); |
397 EXPECT_EQ("yyyy", trial->group_name()); | 398 EXPECT_EQ("yyyy", trial->group_name()); |
398 EXPECT_EQ("xxx", trial->trial_name()); | 399 EXPECT_EQ("xxx", trial->trial_name()); |
399 } | 400 } |
400 | 401 |
401 TEST_F(FieldTrialTest, BogusRestore) { | 402 TEST_F(FieldTrialTest, BogusRestore) { |
402 EXPECT_FALSE(FieldTrialList::CreateTrialsFromString( | 403 EXPECT_FALSE(FieldTrialList::CreateTrialsFromString( |
403 "MissingSlash", FieldTrialList::DONT_ACTIVATE_TRIALS)); | 404 "MissingSlash", FieldTrialList::DONT_ACTIVATE_TRIALS, |
| 405 std::set<std::string>())); |
404 EXPECT_FALSE(FieldTrialList::CreateTrialsFromString( | 406 EXPECT_FALSE(FieldTrialList::CreateTrialsFromString( |
405 "MissingGroupName/", FieldTrialList::DONT_ACTIVATE_TRIALS)); | 407 "MissingGroupName/", FieldTrialList::DONT_ACTIVATE_TRIALS, |
| 408 std::set<std::string>())); |
406 EXPECT_FALSE(FieldTrialList::CreateTrialsFromString( | 409 EXPECT_FALSE(FieldTrialList::CreateTrialsFromString( |
407 "MissingFinalSlash/gname", FieldTrialList::DONT_ACTIVATE_TRIALS)); | 410 "MissingFinalSlash/gname", FieldTrialList::DONT_ACTIVATE_TRIALS, |
| 411 std::set<std::string>())); |
408 EXPECT_FALSE(FieldTrialList::CreateTrialsFromString( | 412 EXPECT_FALSE(FieldTrialList::CreateTrialsFromString( |
409 "noname, only group/", FieldTrialList::DONT_ACTIVATE_TRIALS)); | 413 "noname, only group/", FieldTrialList::DONT_ACTIVATE_TRIALS, |
| 414 std::set<std::string>())); |
410 } | 415 } |
411 | 416 |
412 TEST_F(FieldTrialTest, DuplicateRestore) { | 417 TEST_F(FieldTrialTest, DuplicateRestore) { |
413 FieldTrial* trial = CreateFieldTrial("Some name", 10, "Default", NULL); | 418 FieldTrial* trial = CreateFieldTrial("Some name", 10, "Default", NULL); |
414 trial->AppendGroup("Winner", 10); | 419 trial->AppendGroup("Winner", 10); |
415 // Finalize the group selection by accessing the selected group. | 420 // Finalize the group selection by accessing the selected group. |
416 trial->group(); | 421 trial->group(); |
417 std::string save_string; | 422 std::string save_string; |
418 FieldTrialList::StatesToString(&save_string); | 423 FieldTrialList::StatesToString(&save_string); |
419 EXPECT_EQ("Some name/Winner/", save_string); | 424 EXPECT_EQ("Some name/Winner/", save_string); |
420 | 425 |
421 // It is OK if we redundantly specify a winner. | 426 // It is OK if we redundantly specify a winner. |
422 EXPECT_TRUE(FieldTrialList::CreateTrialsFromString( | 427 EXPECT_TRUE(FieldTrialList::CreateTrialsFromString( |
423 save_string, FieldTrialList::DONT_ACTIVATE_TRIALS)); | 428 save_string, FieldTrialList::DONT_ACTIVATE_TRIALS, |
| 429 std::set<std::string>())); |
424 | 430 |
425 // But it is an error to try to change to a different winner. | 431 // But it is an error to try to change to a different winner. |
426 EXPECT_FALSE(FieldTrialList::CreateTrialsFromString( | 432 EXPECT_FALSE(FieldTrialList::CreateTrialsFromString( |
427 "Some name/Loser/", FieldTrialList::DONT_ACTIVATE_TRIALS)); | 433 "Some name/Loser/", FieldTrialList::DONT_ACTIVATE_TRIALS, |
| 434 std::set<std::string>())); |
428 } | 435 } |
429 | 436 |
430 TEST_F(FieldTrialTest, CreateTrialsFromStringActive) { | 437 TEST_F(FieldTrialTest, CreateTrialsFromStringActive) { |
431 ASSERT_FALSE(FieldTrialList::TrialExists("Abc")); | 438 ASSERT_FALSE(FieldTrialList::TrialExists("Abc")); |
432 ASSERT_FALSE(FieldTrialList::TrialExists("Xyz")); | 439 ASSERT_FALSE(FieldTrialList::TrialExists("Xyz")); |
433 ASSERT_TRUE(FieldTrialList::CreateTrialsFromString( | 440 ASSERT_TRUE(FieldTrialList::CreateTrialsFromString( |
434 "Abc/def/Xyz/zyx/", FieldTrialList::ACTIVATE_TRIALS)); | 441 "Abc/def/Xyz/zyx/", FieldTrialList::ACTIVATE_TRIALS, |
| 442 std::set<std::string>())); |
435 | 443 |
436 FieldTrial::ActiveGroups active_groups; | 444 FieldTrial::ActiveGroups active_groups; |
437 FieldTrialList::GetActiveFieldTrialGroups(&active_groups); | 445 FieldTrialList::GetActiveFieldTrialGroups(&active_groups); |
438 ASSERT_EQ(2U, active_groups.size()); | 446 ASSERT_EQ(2U, active_groups.size()); |
439 EXPECT_EQ("Abc", active_groups[0].trial_name); | 447 EXPECT_EQ("Abc", active_groups[0].trial_name); |
440 EXPECT_EQ("def", active_groups[0].group_name); | 448 EXPECT_EQ("def", active_groups[0].group_name); |
441 EXPECT_EQ("Xyz", active_groups[1].trial_name); | 449 EXPECT_EQ("Xyz", active_groups[1].trial_name); |
442 EXPECT_EQ("zyx", active_groups[1].group_name); | 450 EXPECT_EQ("zyx", active_groups[1].group_name); |
443 } | 451 } |
444 | 452 |
445 TEST_F(FieldTrialTest, CreateTrialsFromStringNotActive) { | 453 TEST_F(FieldTrialTest, CreateTrialsFromStringNotActive) { |
446 ASSERT_FALSE(FieldTrialList::TrialExists("Abc")); | 454 ASSERT_FALSE(FieldTrialList::TrialExists("Abc")); |
447 ASSERT_FALSE(FieldTrialList::TrialExists("Xyz")); | 455 ASSERT_FALSE(FieldTrialList::TrialExists("Xyz")); |
448 ASSERT_TRUE(FieldTrialList::CreateTrialsFromString( | 456 ASSERT_TRUE(FieldTrialList::CreateTrialsFromString( |
449 "Abc/def/Xyz/zyx/", FieldTrialList::DONT_ACTIVATE_TRIALS)); | 457 "Abc/def/Xyz/zyx/", FieldTrialList::DONT_ACTIVATE_TRIALS, |
| 458 std::set<std::string>())); |
450 | 459 |
451 FieldTrial::ActiveGroups active_groups; | 460 FieldTrial::ActiveGroups active_groups; |
452 FieldTrialList::GetActiveFieldTrialGroups(&active_groups); | 461 FieldTrialList::GetActiveFieldTrialGroups(&active_groups); |
453 ASSERT_TRUE(active_groups.empty()); | 462 ASSERT_TRUE(active_groups.empty()); |
454 | 463 |
455 // Check that the values still get returned and querying them activates them. | 464 // Check that the values still get returned and querying them activates them. |
456 EXPECT_EQ("def", FieldTrialList::FindFullName("Abc")); | 465 EXPECT_EQ("def", FieldTrialList::FindFullName("Abc")); |
457 EXPECT_EQ("zyx", FieldTrialList::FindFullName("Xyz")); | 466 EXPECT_EQ("zyx", FieldTrialList::FindFullName("Xyz")); |
458 | 467 |
459 FieldTrialList::GetActiveFieldTrialGroups(&active_groups); | 468 FieldTrialList::GetActiveFieldTrialGroups(&active_groups); |
460 ASSERT_EQ(2U, active_groups.size()); | 469 ASSERT_EQ(2U, active_groups.size()); |
461 EXPECT_EQ("Abc", active_groups[0].trial_name); | 470 EXPECT_EQ("Abc", active_groups[0].trial_name); |
462 EXPECT_EQ("def", active_groups[0].group_name); | 471 EXPECT_EQ("def", active_groups[0].group_name); |
463 EXPECT_EQ("Xyz", active_groups[1].trial_name); | 472 EXPECT_EQ("Xyz", active_groups[1].trial_name); |
464 EXPECT_EQ("zyx", active_groups[1].group_name); | 473 EXPECT_EQ("zyx", active_groups[1].group_name); |
465 } | 474 } |
466 | 475 |
467 TEST_F(FieldTrialTest, CreateTrialsFromStringActiveObserver) { | 476 TEST_F(FieldTrialTest, CreateTrialsFromStringActiveObserver) { |
468 ASSERT_FALSE(FieldTrialList::TrialExists("Abc")); | 477 ASSERT_FALSE(FieldTrialList::TrialExists("Abc")); |
469 | 478 |
470 TestFieldTrialObserver observer; | 479 TestFieldTrialObserver observer; |
471 ASSERT_TRUE(FieldTrialList::CreateTrialsFromString( | 480 ASSERT_TRUE(FieldTrialList::CreateTrialsFromString( |
472 "Abc/def/", FieldTrialList::ACTIVATE_TRIALS)); | 481 "Abc/def/", FieldTrialList::ACTIVATE_TRIALS, std::set<std::string>())); |
473 | 482 |
474 RunLoop().RunUntilIdle(); | 483 RunLoop().RunUntilIdle(); |
475 EXPECT_EQ("Abc", observer.trial_name()); | 484 EXPECT_EQ("Abc", observer.trial_name()); |
476 EXPECT_EQ("def", observer.group_name()); | 485 EXPECT_EQ("def", observer.group_name()); |
477 } | 486 } |
478 | 487 |
479 TEST_F(FieldTrialTest, CreateTrialsFromStringNotActiveObserver) { | 488 TEST_F(FieldTrialTest, CreateTrialsFromStringNotActiveObserver) { |
480 ASSERT_FALSE(FieldTrialList::TrialExists("Abc")); | 489 ASSERT_FALSE(FieldTrialList::TrialExists("Abc")); |
481 | 490 |
482 TestFieldTrialObserver observer; | 491 TestFieldTrialObserver observer; |
483 ASSERT_TRUE(FieldTrialList::CreateTrialsFromString( | 492 ASSERT_TRUE(FieldTrialList::CreateTrialsFromString( |
484 "Abc/def/", FieldTrialList::DONT_ACTIVATE_TRIALS)); | 493 "Abc/def/", FieldTrialList::DONT_ACTIVATE_TRIALS, |
| 494 std::set<std::string>())); |
485 RunLoop().RunUntilIdle(); | 495 RunLoop().RunUntilIdle(); |
486 // Observer shouldn't be notified. | 496 // Observer shouldn't be notified. |
487 EXPECT_TRUE(observer.trial_name().empty()); | 497 EXPECT_TRUE(observer.trial_name().empty()); |
488 | 498 |
489 // Check that the values still get returned and querying them activates them. | 499 // Check that the values still get returned and querying them activates them. |
490 EXPECT_EQ("def", FieldTrialList::FindFullName("Abc")); | 500 EXPECT_EQ("def", FieldTrialList::FindFullName("Abc")); |
491 | 501 |
492 RunLoop().RunUntilIdle(); | 502 RunLoop().RunUntilIdle(); |
493 EXPECT_EQ("Abc", observer.trial_name()); | 503 EXPECT_EQ("Abc", observer.trial_name()); |
494 EXPECT_EQ("def", observer.group_name()); | 504 EXPECT_EQ("def", observer.group_name()); |
495 } | 505 } |
496 | 506 |
| 507 TEST_F(FieldTrialTest, CreateTrialsFromStringWithIgnoredFieldTrials) { |
| 508 ASSERT_FALSE(FieldTrialList::TrialExists("Unaccepted1")); |
| 509 ASSERT_FALSE(FieldTrialList::TrialExists("Foo")); |
| 510 ASSERT_FALSE(FieldTrialList::TrialExists("Unaccepted2")); |
| 511 ASSERT_FALSE(FieldTrialList::TrialExists("Bar")); |
| 512 ASSERT_FALSE(FieldTrialList::TrialExists("Unaccepted3")); |
| 513 |
| 514 std::set<std::string> ignored_trial_names; |
| 515 ignored_trial_names.insert("Unaccepted1"); |
| 516 ignored_trial_names.insert("Unaccepted2"); |
| 517 ignored_trial_names.insert("Unaccepted3"); |
| 518 |
| 519 FieldTrialList::CreateTrialsFromString( |
| 520 "Unaccepted1/Unaccepted1_name/" |
| 521 "Foo/Foo_name/" |
| 522 "Unaccepted2/Unaccepted2_name/" |
| 523 "Bar/Bar_name/" |
| 524 "Unaccepted3/Unaccepted3_name/", |
| 525 FieldTrialList::DONT_ACTIVATE_TRIALS, |
| 526 ignored_trial_names); |
| 527 |
| 528 EXPECT_FALSE(FieldTrialList::TrialExists("Unaccepted1")); |
| 529 EXPECT_TRUE(FieldTrialList::TrialExists("Foo")); |
| 530 EXPECT_FALSE(FieldTrialList::TrialExists("Unaccepted2")); |
| 531 EXPECT_TRUE(FieldTrialList::TrialExists("Bar")); |
| 532 EXPECT_FALSE(FieldTrialList::TrialExists("Unaccepted3")); |
| 533 |
| 534 FieldTrial::ActiveGroups active_groups; |
| 535 FieldTrialList::GetActiveFieldTrialGroups(&active_groups); |
| 536 EXPECT_TRUE(active_groups.empty()); |
| 537 |
| 538 FieldTrial* trial = FieldTrialList::Find("Foo"); |
| 539 ASSERT_NE(static_cast<FieldTrial*>(NULL), trial); |
| 540 EXPECT_EQ("Foo", trial->trial_name()); |
| 541 EXPECT_EQ("Foo_name", trial->group_name()); |
| 542 |
| 543 trial = FieldTrialList::Find("Bar"); |
| 544 ASSERT_NE(static_cast<FieldTrial*>(NULL), trial); |
| 545 EXPECT_EQ("Bar", trial->trial_name()); |
| 546 EXPECT_EQ("Bar_name", trial->group_name()); |
| 547 } |
| 548 |
497 TEST_F(FieldTrialTest, CreateFieldTrial) { | 549 TEST_F(FieldTrialTest, CreateFieldTrial) { |
498 ASSERT_FALSE(FieldTrialList::TrialExists("Some_name")); | 550 ASSERT_FALSE(FieldTrialList::TrialExists("Some_name")); |
499 | 551 |
500 FieldTrialList::CreateFieldTrial("Some_name", "Winner"); | 552 FieldTrialList::CreateFieldTrial("Some_name", "Winner"); |
501 | 553 |
502 FieldTrial* trial = FieldTrialList::Find("Some_name"); | 554 FieldTrial* trial = FieldTrialList::Find("Some_name"); |
503 ASSERT_NE(static_cast<FieldTrial*>(NULL), trial); | 555 ASSERT_NE(static_cast<FieldTrial*>(NULL), trial); |
504 EXPECT_EQ("Winner", trial->group_name()); | 556 EXPECT_EQ("Winner", trial->group_name()); |
505 EXPECT_EQ("Some_name", trial->trial_name()); | 557 EXPECT_EQ("Some_name", trial->trial_name()); |
506 } | 558 } |
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
914 EXPECT_TRUE(active_groups.empty()); | 966 EXPECT_TRUE(active_groups.empty()); |
915 | 967 |
916 // The trial shouldn't be listed in the |StatesToString()| result. | 968 // The trial shouldn't be listed in the |StatesToString()| result. |
917 std::string states; | 969 std::string states; |
918 FieldTrialList::StatesToString(&states); | 970 FieldTrialList::StatesToString(&states); |
919 EXPECT_TRUE(states.empty()); | 971 EXPECT_TRUE(states.empty()); |
920 } | 972 } |
921 } | 973 } |
922 | 974 |
923 } // namespace base | 975 } // namespace base |
OLD | NEW |