blob: 7f7ae6e90ef48b2cecc076909f67bd4a06aa9ed9 [file] [log] [blame]
wafflesd2d9a332016-04-09 01:59:571// Copyright 2016 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
Minh X. Nguyenbe9d8762017-09-11 20:57:405#include <map>
wafflesf43eb2fd32016-08-23 19:15:296#include <memory>
wafflesd2d9a332016-04-09 01:59:577#include <string>
8#include <vector>
9
10#include "components/prefs/testing_pref_service.h"
Minh X. Nguyenbe9d8762017-09-11 20:57:4011#include "components/update_client/activity_data_service.h"
wafflesd2d9a332016-04-09 01:59:5712#include "components/update_client/persisted_data.h"
13#include "testing/gtest/include/gtest/gtest.h"
14
15namespace update_client {
16
17TEST(PersistedDataTest, Simple) {
Minh X. Nguyenbe9d8762017-09-11 20:57:4018 auto pref = std::make_unique<TestingPrefServiceSimple>();
wafflesd2d9a332016-04-09 01:59:5719 PersistedData::RegisterPrefs(pref->registry());
Minh X. Nguyenbe9d8762017-09-11 20:57:4020 auto metadata = std::make_unique<PersistedData>(pref.get(), nullptr);
wafflesd2d9a332016-04-09 01:59:5721 EXPECT_EQ(-2, metadata->GetDateLastRollCall("someappid"));
Minh X. Nguyenbe9d8762017-09-11 20:57:4022 EXPECT_EQ(-2, metadata->GetDateLastActive("someappid"));
23 EXPECT_EQ(-2, metadata->GetDaysSinceLastRollCall("someappid"));
24 EXPECT_EQ(-2, metadata->GetDaysSinceLastActive("someappid"));
wafflesd2d9a332016-04-09 01:59:5725 std::vector<std::string> items;
26 items.push_back("someappid");
27 metadata->SetDateLastRollCall(items, 3383);
Minh X. Nguyenbe9d8762017-09-11 20:57:4028 metadata->SetDateLastActive(items, 3383);
wafflesd2d9a332016-04-09 01:59:5729 EXPECT_EQ(3383, metadata->GetDateLastRollCall("someappid"));
Minh X. Nguyenbe9d8762017-09-11 20:57:4030 EXPECT_EQ(-2, metadata->GetDateLastActive("someappid"));
31 EXPECT_EQ(-2, metadata->GetDaysSinceLastRollCall("someappid"));
32 EXPECT_EQ(-2, metadata->GetDaysSinceLastActive("someappid"));
wafflesd2d9a332016-04-09 01:59:5733 EXPECT_EQ(-2, metadata->GetDateLastRollCall("someotherappid"));
Minh X. Nguyenbe9d8762017-09-11 20:57:4034 EXPECT_EQ(-2, metadata->GetDateLastActive("someotherappid"));
35 EXPECT_EQ(-2, metadata->GetDaysSinceLastRollCall("someotherappid"));
36 EXPECT_EQ(-2, metadata->GetDaysSinceLastActive("someotherappid"));
wafflese7dff732016-04-15 23:51:4937 const std::string pf1 = metadata->GetPingFreshness("someappid");
38 EXPECT_FALSE(pf1.empty());
wafflesd2d9a332016-04-09 01:59:5739 metadata->SetDateLastRollCall(items, 3386);
Minh X. Nguyenbe9d8762017-09-11 20:57:4040 metadata->SetDateLastActive(items, 3386);
wafflesd2d9a332016-04-09 01:59:5741 EXPECT_EQ(3386, metadata->GetDateLastRollCall("someappid"));
Minh X. Nguyenbe9d8762017-09-11 20:57:4042 EXPECT_EQ(-2, metadata->GetDateLastActive("someappid"));
43 EXPECT_EQ(-2, metadata->GetDaysSinceLastRollCall("someappid"));
44 EXPECT_EQ(-2, metadata->GetDaysSinceLastActive("someappid"));
wafflesd2d9a332016-04-09 01:59:5745 EXPECT_EQ(-2, metadata->GetDateLastRollCall("someotherappid"));
Minh X. Nguyenbe9d8762017-09-11 20:57:4046 EXPECT_EQ(-2, metadata->GetDateLastActive("someotherappid"));
47 EXPECT_EQ(-2, metadata->GetDaysSinceLastRollCall("someotherappid"));
48 EXPECT_EQ(-2, metadata->GetDaysSinceLastActive("someotherappid"));
wafflese7dff732016-04-15 23:51:4949 const std::string pf2 = metadata->GetPingFreshness("someappid");
50 EXPECT_FALSE(pf2.empty());
51 // The following has a 1 / 2^128 chance of being flaky.
52 EXPECT_NE(pf1, pf2);
wafflesd2d9a332016-04-09 01:59:5753}
54
55TEST(PersistedDataTest, SharedPref) {
Minh X. Nguyenbe9d8762017-09-11 20:57:4056 auto pref = std::make_unique<TestingPrefServiceSimple>();
wafflesd2d9a332016-04-09 01:59:5757 PersistedData::RegisterPrefs(pref->registry());
Minh X. Nguyenbe9d8762017-09-11 20:57:4058 auto metadata = std::make_unique<PersistedData>(pref.get(), nullptr);
wafflesd2d9a332016-04-09 01:59:5759 EXPECT_EQ(-2, metadata->GetDateLastRollCall("someappid"));
Minh X. Nguyenbe9d8762017-09-11 20:57:4060 EXPECT_EQ(-2, metadata->GetDateLastActive("someappid"));
61 EXPECT_EQ(-2, metadata->GetDaysSinceLastRollCall("someappid"));
62 EXPECT_EQ(-2, metadata->GetDaysSinceLastActive("someappid"));
wafflesd2d9a332016-04-09 01:59:5763 std::vector<std::string> items;
64 items.push_back("someappid");
65 metadata->SetDateLastRollCall(items, 3383);
Minh X. Nguyenbe9d8762017-09-11 20:57:4066 metadata->SetDateLastActive(items, 3383);
wafflesd2d9a332016-04-09 01:59:5767
68 // Now, create a new PersistedData reading from the same path, verify
69 // that it loads the value.
Minh X. Nguyenbe9d8762017-09-11 20:57:4070 metadata = std::make_unique<PersistedData>(pref.get(), nullptr);
wafflesd2d9a332016-04-09 01:59:5771 EXPECT_EQ(3383, metadata->GetDateLastRollCall("someappid"));
Minh X. Nguyenbe9d8762017-09-11 20:57:4072 EXPECT_EQ(-2, metadata->GetDateLastActive("someappid"));
73 EXPECT_EQ(-2, metadata->GetDaysSinceLastRollCall("someappid"));
74 EXPECT_EQ(-2, metadata->GetDaysSinceLastActive("someappid"));
wafflesd2d9a332016-04-09 01:59:5775 EXPECT_EQ(-2, metadata->GetDateLastRollCall("someotherappid"));
Minh X. Nguyenbe9d8762017-09-11 20:57:4076 EXPECT_EQ(-2, metadata->GetDateLastActive("someotherappid"));
77 EXPECT_EQ(-2, metadata->GetDaysSinceLastRollCall("someotherappid"));
78 EXPECT_EQ(-2, metadata->GetDaysSinceLastActive("someotherappid"));
wafflesd2d9a332016-04-09 01:59:5779}
80
wafflesf43eb2fd32016-08-23 19:15:2981TEST(PersistedDataTest, SimpleCohort) {
Minh X. Nguyenbe9d8762017-09-11 20:57:4082 auto pref = std::make_unique<TestingPrefServiceSimple>();
wafflesf43eb2fd32016-08-23 19:15:2983 PersistedData::RegisterPrefs(pref->registry());
Minh X. Nguyenbe9d8762017-09-11 20:57:4084 auto metadata = std::make_unique<PersistedData>(pref.get(), nullptr);
wafflesf43eb2fd32016-08-23 19:15:2985 EXPECT_EQ("", metadata->GetCohort("someappid"));
86 EXPECT_EQ("", metadata->GetCohort("someotherappid"));
87 EXPECT_EQ("", metadata->GetCohortHint("someappid"));
88 EXPECT_EQ("", metadata->GetCohortHint("someotherappid"));
89 EXPECT_EQ("", metadata->GetCohortName("someappid"));
90 EXPECT_EQ("", metadata->GetCohortName("someotherappid"));
91 metadata->SetCohort("someappid", "c1");
92 metadata->SetCohort("someotherappid", "c2");
93 metadata->SetCohortHint("someappid", "ch1");
94 metadata->SetCohortHint("someotherappid", "ch2");
95 metadata->SetCohortName("someappid", "cn1");
96 metadata->SetCohortName("someotherappid", "cn2");
97 EXPECT_EQ("c1", metadata->GetCohort("someappid"));
98 EXPECT_EQ("c2", metadata->GetCohort("someotherappid"));
99 EXPECT_EQ("ch1", metadata->GetCohortHint("someappid"));
100 EXPECT_EQ("ch2", metadata->GetCohortHint("someotherappid"));
101 EXPECT_EQ("cn1", metadata->GetCohortName("someappid"));
102 EXPECT_EQ("cn2", metadata->GetCohortName("someotherappid"));
103 metadata->SetCohort("someappid", "oc1");
104 metadata->SetCohort("someotherappid", "oc2");
105 metadata->SetCohortHint("someappid", "och1");
106 metadata->SetCohortHint("someotherappid", "och2");
107 metadata->SetCohortName("someappid", "ocn1");
108 metadata->SetCohortName("someotherappid", "ocn2");
109 EXPECT_EQ("oc1", metadata->GetCohort("someappid"));
110 EXPECT_EQ("oc2", metadata->GetCohort("someotherappid"));
111 EXPECT_EQ("och1", metadata->GetCohortHint("someappid"));
112 EXPECT_EQ("och2", metadata->GetCohortHint("someotherappid"));
113 EXPECT_EQ("ocn1", metadata->GetCohortName("someappid"));
114 EXPECT_EQ("ocn2", metadata->GetCohortName("someotherappid"));
115}
116
Minh X. Nguyenbe9d8762017-09-11 20:57:40117TEST(PersistedDataTest, ActivityData) {
118 class TestActivityDataService : public ActivityDataService {
119 public:
120 bool GetActiveBit(const std::string& id) const override {
121 auto it = active_.find(id);
122 return it != active_.end() ? it->second : false;
123 }
124
125 int GetDaysSinceLastActive(const std::string& id) const override {
126 auto it = days_last_active_.find(id);
127 return it != days_last_active_.end() ? it->second : -1;
128 }
129
130 int GetDaysSinceLastRollCall(const std::string& id) const override {
131 auto it = days_last_roll_call_.find(id);
132 return it != days_last_roll_call_.end() ? it->second : -1;
133 }
134
135 void ClearActiveBit(const std::string& id) override { active_[id] = false; }
136
137 void SetDaysSinceLastActive(const std::string& id, int numdays) {
138 days_last_active_[id] = numdays;
139 }
140
141 void SetDaysSinceLastRollCall(const std::string& id, int numdays) {
142 days_last_roll_call_[id] = numdays;
143 }
144
145 void SetActiveBit(const std::string& id) { active_[id] = true; }
146
147 private:
148 std::map<std::string, bool> active_;
149 std::map<std::string, int> days_last_active_;
150 std::map<std::string, int> days_last_roll_call_;
151 };
152
153 auto pref = std::make_unique<TestingPrefServiceSimple>();
154 auto activity_service = std::make_unique<TestActivityDataService>();
155 PersistedData::RegisterPrefs(pref->registry());
156 auto metadata =
157 std::make_unique<PersistedData>(pref.get(), activity_service.get());
158
159 std::vector<std::string> items({"id1", "id2", "id3"});
160
161 for (const auto& item : items) {
162 EXPECT_EQ(-2, metadata->GetDateLastActive(item));
163 EXPECT_EQ(-2, metadata->GetDateLastRollCall(item));
164 EXPECT_EQ(-1, metadata->GetDaysSinceLastActive(item));
165 EXPECT_EQ(-1, metadata->GetDaysSinceLastRollCall(item));
166 EXPECT_EQ(false, metadata->GetActiveBit(item));
167 }
168
169 metadata->SetDateLastActive(items, 1234);
170 metadata->SetDateLastRollCall(items, 1234);
171 for (const auto& item : items) {
172 EXPECT_EQ(false, metadata->GetActiveBit(item));
173 EXPECT_EQ(-2, metadata->GetDateLastActive(item));
174 EXPECT_EQ(1234, metadata->GetDateLastRollCall(item));
175 EXPECT_EQ(-1, metadata->GetDaysSinceLastActive(item));
176 EXPECT_EQ(-1, metadata->GetDaysSinceLastRollCall(item));
177 }
178
179 activity_service->SetActiveBit("id1");
180 activity_service->SetDaysSinceLastActive("id1", 3);
181 activity_service->SetDaysSinceLastRollCall("id1", 2);
182 activity_service->SetDaysSinceLastRollCall("id2", 3);
183 activity_service->SetDaysSinceLastRollCall("id3", 4);
184 EXPECT_EQ(true, metadata->GetActiveBit("id1"));
185 EXPECT_EQ(false, metadata->GetActiveBit("id2"));
186 EXPECT_EQ(false, metadata->GetActiveBit("id2"));
187 EXPECT_EQ(3, metadata->GetDaysSinceLastActive("id1"));
188 EXPECT_EQ(-1, metadata->GetDaysSinceLastActive("id2"));
189 EXPECT_EQ(-1, metadata->GetDaysSinceLastActive("id3"));
190 EXPECT_EQ(2, metadata->GetDaysSinceLastRollCall("id1"));
191 EXPECT_EQ(3, metadata->GetDaysSinceLastRollCall("id2"));
192 EXPECT_EQ(4, metadata->GetDaysSinceLastRollCall("id3"));
193
194 metadata->SetDateLastActive(items, 3384);
195 metadata->SetDateLastRollCall(items, 3383);
196 EXPECT_EQ(false, metadata->GetActiveBit("id1"));
197 EXPECT_EQ(false, metadata->GetActiveBit("id2"));
198 EXPECT_EQ(false, metadata->GetActiveBit("id3"));
199 EXPECT_EQ(3, metadata->GetDaysSinceLastActive("id1"));
200 EXPECT_EQ(-1, metadata->GetDaysSinceLastActive("id2"));
201 EXPECT_EQ(-1, metadata->GetDaysSinceLastActive("id3"));
202 EXPECT_EQ(2, metadata->GetDaysSinceLastRollCall("id1"));
203 EXPECT_EQ(3, metadata->GetDaysSinceLastRollCall("id2"));
204 EXPECT_EQ(4, metadata->GetDaysSinceLastRollCall("id3"));
205 EXPECT_EQ(3384, metadata->GetDateLastActive("id1"));
206 EXPECT_EQ(-2, metadata->GetDateLastActive("id2"));
207 EXPECT_EQ(-2, metadata->GetDateLastActive("id3"));
208 EXPECT_EQ(3383, metadata->GetDateLastRollCall("id1"));
209 EXPECT_EQ(3383, metadata->GetDateLastRollCall("id2"));
210 EXPECT_EQ(3383, metadata->GetDateLastRollCall("id3"));
211
212 metadata->SetDateLastActive(items, 5000);
213 metadata->SetDateLastRollCall(items, 3390);
214 EXPECT_EQ(false, metadata->GetActiveBit("id1"));
215 EXPECT_EQ(false, metadata->GetActiveBit("id2"));
216 EXPECT_EQ(false, metadata->GetActiveBit("id3"));
217 EXPECT_EQ(3, metadata->GetDaysSinceLastActive("id1"));
218 EXPECT_EQ(-1, metadata->GetDaysSinceLastActive("id2"));
219 EXPECT_EQ(-1, metadata->GetDaysSinceLastActive("id3"));
220 EXPECT_EQ(2, metadata->GetDaysSinceLastRollCall("id1"));
221 EXPECT_EQ(3, metadata->GetDaysSinceLastRollCall("id2"));
222 EXPECT_EQ(4, metadata->GetDaysSinceLastRollCall("id3"));
223 EXPECT_EQ(3384, metadata->GetDateLastActive("id1"));
224 EXPECT_EQ(-2, metadata->GetDateLastActive("id2"));
225 EXPECT_EQ(-2, metadata->GetDateLastActive("id3"));
226 EXPECT_EQ(3390, metadata->GetDateLastRollCall("id1"));
227 EXPECT_EQ(3390, metadata->GetDateLastRollCall("id2"));
228 EXPECT_EQ(3390, metadata->GetDateLastRollCall("id3"));
229
230 activity_service->SetActiveBit("id2");
231 metadata->SetDateLastActive(items, 5678);
232 metadata->SetDateLastRollCall(items, 6789);
233 EXPECT_EQ(false, metadata->GetActiveBit("id1"));
234 EXPECT_EQ(false, metadata->GetActiveBit("id2"));
235 EXPECT_EQ(false, metadata->GetActiveBit("id3"));
236 EXPECT_EQ(3, metadata->GetDaysSinceLastActive("id1"));
237 EXPECT_EQ(-1, metadata->GetDaysSinceLastActive("id2"));
238 EXPECT_EQ(-1, metadata->GetDaysSinceLastActive("id3"));
239 EXPECT_EQ(2, metadata->GetDaysSinceLastRollCall("id1"));
240 EXPECT_EQ(3, metadata->GetDaysSinceLastRollCall("id2"));
241 EXPECT_EQ(4, metadata->GetDaysSinceLastRollCall("id3"));
242 EXPECT_EQ(3384, metadata->GetDateLastActive("id1"));
243 EXPECT_EQ(5678, metadata->GetDateLastActive("id2"));
244 EXPECT_EQ(-2, metadata->GetDateLastActive("id3"));
245 EXPECT_EQ(6789, metadata->GetDateLastRollCall("id1"));
246 EXPECT_EQ(6789, metadata->GetDateLastRollCall("id2"));
247 EXPECT_EQ(6789, metadata->GetDateLastRollCall("id3"));
248}
249
wafflesd2d9a332016-04-09 01:59:57250} // namespace update_client