Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(142)

Side by Side Diff: components/variations/variations_http_header_provider_unittest.cc

Issue 1530133005: Refactor VariationsHttpHeaderProvider. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add missing include to srt_fetcher_win.cc. Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « components/variations/variations_http_header_provider.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "components/variations/variations_http_header_provider.h"
6
7 #include <string>
8
9 #include "base/base64.h"
10 #include "base/message_loop/message_loop.h"
11 #include "base/metrics/field_trial.h"
12 #include "base/run_loop.h"
13 #include "components/variations/entropy_provider.h"
14 #include "components/variations/proto/client_variations.pb.h"
15 #include "components/variations/variations_associated_data.h"
16 #include "testing/gtest/include/gtest/gtest.h"
17
18 namespace variations {
19
20 namespace {
21
22 // Decodes the variations header and extracts the variation ids.
23 bool ExtractVariationIds(const std::string& variations,
24 std::set<VariationID>* variation_ids,
25 std::set<VariationID>* trigger_ids) {
26 std::string serialized_proto;
27 if (!base::Base64Decode(variations, &serialized_proto))
28 return false;
29 ClientVariations proto;
30 if (!proto.ParseFromString(serialized_proto))
31 return false;
32 for (int i = 0; i < proto.variation_id_size(); ++i)
33 variation_ids->insert(proto.variation_id(i));
34 for (int i = 0; i < proto.trigger_variation_id_size(); ++i)
35 trigger_ids->insert(proto.trigger_variation_id(i));
36 return true;
37 }
38
39 scoped_refptr<base::FieldTrial> CreateTrialAndAssociateId(
40 const std::string& trial_name,
41 const std::string& default_group_name,
42 IDCollectionKey key,
43 VariationID id) {
44 scoped_refptr<base::FieldTrial> trial(
45 base::FieldTrialList::CreateFieldTrial(trial_name, default_group_name));
46
47 AssociateGoogleVariationID(key, trial->trial_name(), trial->group_name(), id);
48
49 return trial;
50 }
51
52 } // namespace
53
54 class VariationsHttpHeaderProviderTest : public ::testing::Test {
55 public:
56 VariationsHttpHeaderProviderTest() {}
57
58 ~VariationsHttpHeaderProviderTest() override {}
59
60 void TearDown() override { testing::ClearAllVariationIDs(); }
61 };
62
63 TEST_F(VariationsHttpHeaderProviderTest, SetDefaultVariationIds_Valid) {
64 base::MessageLoop loop;
65 VariationsHttpHeaderProvider provider;
66
67 // Valid experiment ids.
68 EXPECT_TRUE(provider.SetDefaultVariationIds("12,456,t789"));
69 provider.InitVariationIDsCacheIfNeeded();
70 std::string variations = provider.GetClientDataHeader();
71 EXPECT_FALSE(variations.empty());
72 std::set<VariationID> variation_ids;
73 std::set<VariationID> trigger_ids;
74 ASSERT_TRUE(ExtractVariationIds(variations, &variation_ids, &trigger_ids));
75 EXPECT_TRUE(variation_ids.find(12) != variation_ids.end());
76 EXPECT_TRUE(variation_ids.find(456) != variation_ids.end());
77 EXPECT_TRUE(trigger_ids.find(789) != trigger_ids.end());
78 EXPECT_FALSE(variation_ids.find(789) != variation_ids.end());
79 }
80
81 TEST_F(VariationsHttpHeaderProviderTest, SetDefaultVariationIds_Invalid) {
82 base::MessageLoop loop;
83 VariationsHttpHeaderProvider provider;
84
85 // Invalid experiment ids.
86 EXPECT_FALSE(provider.SetDefaultVariationIds("abcd12,456"));
87 provider.InitVariationIDsCacheIfNeeded();
88 EXPECT_TRUE(provider.GetClientDataHeader().empty());
89
90 // Invalid trigger experiment id
91 EXPECT_FALSE(provider.SetDefaultVariationIds("12,tabc456"));
92 provider.InitVariationIDsCacheIfNeeded();
93 EXPECT_TRUE(provider.GetClientDataHeader().empty());
94 }
95
96 TEST_F(VariationsHttpHeaderProviderTest, OnFieldTrialGroupFinalized) {
97 base::MessageLoop loop;
98 base::FieldTrialList field_trial_list(nullptr);
99 VariationsHttpHeaderProvider provider;
100 provider.InitVariationIDsCacheIfNeeded();
101
102 const std::string default_name = "default";
103 scoped_refptr<base::FieldTrial> trial_1(CreateTrialAndAssociateId(
104 "t1", default_name, GOOGLE_WEB_PROPERTIES, 123));
105
106 ASSERT_EQ(default_name, trial_1->group_name());
107
108 scoped_refptr<base::FieldTrial> trial_2(CreateTrialAndAssociateId(
109 "t2", default_name, GOOGLE_WEB_PROPERTIES_TRIGGER, 456));
110
111 ASSERT_EQ(default_name, trial_2->group_name());
112
113 // Run the message loop to make sure OnFieldTrialGroupFinalized is called for
114 // the two field trials.
115 base::RunLoop().RunUntilIdle();
116
117 std::string variations = provider.GetClientDataHeader();
118
119 std::set<VariationID> variation_ids;
120 std::set<VariationID> trigger_ids;
121 ASSERT_TRUE(ExtractVariationIds(variations, &variation_ids, &trigger_ids));
122 EXPECT_TRUE(variation_ids.find(123) != variation_ids.end());
123 EXPECT_TRUE(trigger_ids.find(456) != trigger_ids.end());
124 }
125
126 } // namespace variations
OLDNEW
« no previous file with comments | « components/variations/variations_http_header_provider.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698