| 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 |