| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "components/variations/variations_associated_data.h" | 5 #include "components/variations/variations_associated_data.h" |
| 6 | 6 |
| 7 #include "base/metrics/field_trial.h" | 7 #include "base/metrics/field_trial.h" |
| 8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
| 9 | 9 |
| 10 namespace variations { | 10 namespace variations { |
| 11 | 11 |
| 12 namespace { | 12 namespace { |
| 13 | 13 |
| 14 const VariationID TEST_VALUE_A = 3300200; | 14 const VariationID TEST_VALUE_A = 3300200; |
| 15 const VariationID TEST_VALUE_B = 3300201; | 15 const VariationID TEST_VALUE_B = 3300201; |
| 16 | 16 |
| 17 // Convenience helper to retrieve the variations::VariationID for a FieldTrial. | 17 // Convenience helper to retrieve the variations::VariationID for a FieldTrial. |
| 18 // Note that this will do the group assignment in |trial| if not already done. | 18 // Note that this will do the group assignment in |trial| if not already done. |
| 19 VariationID GetIDForTrial(IDCollectionKey key, base::FieldTrial* trial) { | 19 VariationID GetIDForTrial(IDCollectionKey key, base::FieldTrial* trial) { |
| 20 return GetGoogleVariationID(key, trial->trial_name(), trial->group_name()); | 20 return GetGoogleVariationID(key, trial->trial_name(), trial->group_name()); |
| 21 } | 21 } |
| 22 | 22 |
| 23 // Tests whether a field trial is active (i.e. group() has been called on it). | |
| 24 bool IsFieldTrialActive(const std::string& trial_name) { | |
| 25 base::FieldTrial::ActiveGroups active_groups; | |
| 26 base::FieldTrialList::GetActiveFieldTrialGroups(&active_groups); | |
| 27 for (size_t i = 0; i < active_groups.size(); ++i) { | |
| 28 if (active_groups[i].trial_name == trial_name) | |
| 29 return true; | |
| 30 } | |
| 31 return false; | |
| 32 } | |
| 33 | |
| 34 // Call FieldTrialList::FactoryGetFieldTrial() with a future expiry date. | 23 // Call FieldTrialList::FactoryGetFieldTrial() with a future expiry date. |
| 35 scoped_refptr<base::FieldTrial> CreateFieldTrial( | 24 scoped_refptr<base::FieldTrial> CreateFieldTrial( |
| 36 const std::string& trial_name, | 25 const std::string& trial_name, |
| 37 int total_probability, | 26 int total_probability, |
| 38 const std::string& default_group_name, | 27 const std::string& default_group_name, |
| 39 int* default_group_number) { | 28 int* default_group_number) { |
| 40 return base::FieldTrialList::FactoryGetFieldTrial( | 29 return base::FieldTrialList::FactoryGetFieldTrial( |
| 41 trial_name, total_probability, default_group_name, | 30 trial_name, total_probability, default_group_name, |
| 42 base::FieldTrialList::kNoExpirationYear, 1, 1, | 31 base::FieldTrialList::kNoExpirationYear, 1, 1, |
| 43 base::FieldTrial::SESSION_RANDOMIZED, default_group_number); | 32 base::FieldTrial::SESSION_RANDOMIZED, default_group_number); |
| (...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 292 std::map<std::string, std::string> params; | 281 std::map<std::string, std::string> params; |
| 293 params["a"] = "10"; | 282 params["a"] = "10"; |
| 294 EXPECT_FALSE(AssociateVariationParams(kTrialName, "B", params)); | 283 EXPECT_FALSE(AssociateVariationParams(kTrialName, "B", params)); |
| 295 EXPECT_FALSE(AssociateVariationParams(kTrialName, "A", params)); | 284 EXPECT_FALSE(AssociateVariationParams(kTrialName, "A", params)); |
| 296 } | 285 } |
| 297 | 286 |
| 298 TEST_F(VariationsAssociatedDataTest, | 287 TEST_F(VariationsAssociatedDataTest, |
| 299 AssociateVariationParams_DoesntActivateTrial) { | 288 AssociateVariationParams_DoesntActivateTrial) { |
| 300 const std::string kTrialName = "AssociateVariationParams_DoesntActivateTrial"; | 289 const std::string kTrialName = "AssociateVariationParams_DoesntActivateTrial"; |
| 301 | 290 |
| 302 ASSERT_FALSE(IsFieldTrialActive(kTrialName)); | 291 ASSERT_FALSE(base::FieldTrialList::IsTrialActive(kTrialName)); |
| 303 scoped_refptr<base::FieldTrial> trial( | 292 scoped_refptr<base::FieldTrial> trial( |
| 304 CreateFieldTrial(kTrialName, 100, "A", NULL)); | 293 CreateFieldTrial(kTrialName, 100, "A", NULL)); |
| 305 ASSERT_FALSE(IsFieldTrialActive(kTrialName)); | 294 ASSERT_FALSE(base::FieldTrialList::IsTrialActive(kTrialName)); |
| 306 | 295 |
| 307 std::map<std::string, std::string> params; | 296 std::map<std::string, std::string> params; |
| 308 params["a"] = "10"; | 297 params["a"] = "10"; |
| 309 EXPECT_TRUE(AssociateVariationParams(kTrialName, "A", params)); | 298 EXPECT_TRUE(AssociateVariationParams(kTrialName, "A", params)); |
| 310 ASSERT_FALSE(IsFieldTrialActive(kTrialName)); | 299 ASSERT_FALSE(base::FieldTrialList::IsTrialActive(kTrialName)); |
| 311 } | 300 } |
| 312 | 301 |
| 313 TEST_F(VariationsAssociatedDataTest, GetVariationParams_NoTrial) { | 302 TEST_F(VariationsAssociatedDataTest, GetVariationParams_NoTrial) { |
| 314 const std::string kTrialName = "GetVariationParams_NoParams"; | 303 const std::string kTrialName = "GetVariationParams_NoParams"; |
| 315 | 304 |
| 316 std::map<std::string, std::string> params; | 305 std::map<std::string, std::string> params; |
| 317 EXPECT_FALSE(GetVariationParams(kTrialName, ¶ms)); | 306 EXPECT_FALSE(GetVariationParams(kTrialName, ¶ms)); |
| 318 EXPECT_EQ(std::string(), GetVariationParamValue(kTrialName, "x")); | 307 EXPECT_EQ(std::string(), GetVariationParamValue(kTrialName, "x")); |
| 319 EXPECT_EQ(std::string(), GetVariationParamValue(kTrialName, "y")); | 308 EXPECT_EQ(std::string(), GetVariationParamValue(kTrialName, "y")); |
| 320 } | 309 } |
| 321 | 310 |
| 322 TEST_F(VariationsAssociatedDataTest, GetVariationParams_NoParams) { | 311 TEST_F(VariationsAssociatedDataTest, GetVariationParams_NoParams) { |
| 323 const std::string kTrialName = "GetVariationParams_NoParams"; | 312 const std::string kTrialName = "GetVariationParams_NoParams"; |
| 324 | 313 |
| 325 base::FieldTrialList::CreateFieldTrial(kTrialName, "A"); | 314 base::FieldTrialList::CreateFieldTrial(kTrialName, "A"); |
| 326 | 315 |
| 327 std::map<std::string, std::string> params; | 316 std::map<std::string, std::string> params; |
| 328 EXPECT_FALSE(GetVariationParams(kTrialName, ¶ms)); | 317 EXPECT_FALSE(GetVariationParams(kTrialName, ¶ms)); |
| 329 EXPECT_EQ(std::string(), GetVariationParamValue(kTrialName, "x")); | 318 EXPECT_EQ(std::string(), GetVariationParamValue(kTrialName, "x")); |
| 330 EXPECT_EQ(std::string(), GetVariationParamValue(kTrialName, "y")); | 319 EXPECT_EQ(std::string(), GetVariationParamValue(kTrialName, "y")); |
| 331 } | 320 } |
| 332 | 321 |
| 333 TEST_F(VariationsAssociatedDataTest, GetVariationParams_ActivatesTrial) { | 322 TEST_F(VariationsAssociatedDataTest, GetVariationParams_ActivatesTrial) { |
| 334 const std::string kTrialName = "GetVariationParams_ActivatesTrial"; | 323 const std::string kTrialName = "GetVariationParams_ActivatesTrial"; |
| 335 | 324 |
| 336 ASSERT_FALSE(IsFieldTrialActive(kTrialName)); | 325 ASSERT_FALSE(base::FieldTrialList::IsTrialActive(kTrialName)); |
| 337 scoped_refptr<base::FieldTrial> trial( | 326 scoped_refptr<base::FieldTrial> trial( |
| 338 CreateFieldTrial(kTrialName, 100, "A", NULL)); | 327 CreateFieldTrial(kTrialName, 100, "A", NULL)); |
| 339 ASSERT_FALSE(IsFieldTrialActive(kTrialName)); | 328 ASSERT_FALSE(base::FieldTrialList::IsTrialActive(kTrialName)); |
| 340 | 329 |
| 341 std::map<std::string, std::string> params; | 330 std::map<std::string, std::string> params; |
| 342 EXPECT_FALSE(GetVariationParams(kTrialName, ¶ms)); | 331 EXPECT_FALSE(GetVariationParams(kTrialName, ¶ms)); |
| 343 ASSERT_TRUE(IsFieldTrialActive(kTrialName)); | 332 ASSERT_TRUE(base::FieldTrialList::IsTrialActive(kTrialName)); |
| 344 } | 333 } |
| 345 | 334 |
| 346 TEST_F(VariationsAssociatedDataTest, GetVariationParamValue_ActivatesTrial) { | 335 TEST_F(VariationsAssociatedDataTest, GetVariationParamValue_ActivatesTrial) { |
| 347 const std::string kTrialName = "GetVariationParamValue_ActivatesTrial"; | 336 const std::string kTrialName = "GetVariationParamValue_ActivatesTrial"; |
| 348 | 337 |
| 349 ASSERT_FALSE(IsFieldTrialActive(kTrialName)); | 338 ASSERT_FALSE(base::FieldTrialList::IsTrialActive(kTrialName)); |
| 350 scoped_refptr<base::FieldTrial> trial( | 339 scoped_refptr<base::FieldTrial> trial( |
| 351 CreateFieldTrial(kTrialName, 100, "A", NULL)); | 340 CreateFieldTrial(kTrialName, 100, "A", NULL)); |
| 352 ASSERT_FALSE(IsFieldTrialActive(kTrialName)); | 341 ASSERT_FALSE(base::FieldTrialList::IsTrialActive(kTrialName)); |
| 353 | 342 |
| 354 std::map<std::string, std::string> params; | 343 std::map<std::string, std::string> params; |
| 355 EXPECT_EQ(std::string(), GetVariationParamValue(kTrialName, "x")); | 344 EXPECT_EQ(std::string(), GetVariationParamValue(kTrialName, "x")); |
| 356 ASSERT_TRUE(IsFieldTrialActive(kTrialName)); | 345 ASSERT_TRUE(base::FieldTrialList::IsTrialActive(kTrialName)); |
| 357 } | 346 } |
| 358 | 347 |
| 359 } // namespace variations | 348 } // namespace variations |
| OLD | NEW |