blob: 6b107d1aa536d98272f97be18591c0ac036c9fc8 [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
Sorin Jianub9258672020-02-19 16:52:1710#include "base/version.h"
wafflesd2d9a332016-04-09 01:59:5711#include "components/prefs/testing_pref_service.h"
Minh X. Nguyenbe9d8762017-09-11 20:57:4012#include "components/update_client/activity_data_service.h"
wafflesd2d9a332016-04-09 01:59:5713#include "components/update_client/persisted_data.h"
14#include "testing/gtest/include/gtest/gtest.h"
15
16namespace update_client {
17
18TEST(PersistedDataTest, Simple) {
Minh X. Nguyenbe9d8762017-09-11 20:57:4019 auto pref = std::make_unique<TestingPrefServiceSimple>();
wafflesd2d9a332016-04-09 01:59:5720 PersistedData::RegisterPrefs(pref->registry());
Minh X. Nguyenbe9d8762017-09-11 20:57:4021 auto metadata = std::make_unique<PersistedData>(pref.get(), nullptr);
wafflesd2d9a332016-04-09 01:59:5722 EXPECT_EQ(-2, metadata->GetDateLastRollCall("someappid"));
Minh X. Nguyenbe9d8762017-09-11 20:57:4023 EXPECT_EQ(-2, metadata->GetDateLastActive("someappid"));
24 EXPECT_EQ(-2, metadata->GetDaysSinceLastRollCall("someappid"));
25 EXPECT_EQ(-2, metadata->GetDaysSinceLastActive("someappid"));
wafflesd2d9a332016-04-09 01:59:5726 std::vector<std::string> items;
27 items.push_back("someappid");
28 metadata->SetDateLastRollCall(items, 3383);
Minh X. Nguyenbe9d8762017-09-11 20:57:4029 metadata->SetDateLastActive(items, 3383);
wafflesd2d9a332016-04-09 01:59:5730 EXPECT_EQ(3383, metadata->GetDateLastRollCall("someappid"));
Minh X. Nguyenbe9d8762017-09-11 20:57:4031 EXPECT_EQ(-2, metadata->GetDateLastActive("someappid"));
32 EXPECT_EQ(-2, metadata->GetDaysSinceLastRollCall("someappid"));
33 EXPECT_EQ(-2, metadata->GetDaysSinceLastActive("someappid"));
wafflesd2d9a332016-04-09 01:59:5734 EXPECT_EQ(-2, metadata->GetDateLastRollCall("someotherappid"));
Minh X. Nguyenbe9d8762017-09-11 20:57:4035 EXPECT_EQ(-2, metadata->GetDateLastActive("someotherappid"));
36 EXPECT_EQ(-2, metadata->GetDaysSinceLastRollCall("someotherappid"));
37 EXPECT_EQ(-2, metadata->GetDaysSinceLastActive("someotherappid"));
wafflese7dff732016-04-15 23:51:4938 const std::string pf1 = metadata->GetPingFreshness("someappid");
39 EXPECT_FALSE(pf1.empty());
wafflesd2d9a332016-04-09 01:59:5740 metadata->SetDateLastRollCall(items, 3386);
Minh X. Nguyenbe9d8762017-09-11 20:57:4041 metadata->SetDateLastActive(items, 3386);
wafflesd2d9a332016-04-09 01:59:5742 EXPECT_EQ(3386, metadata->GetDateLastRollCall("someappid"));
Minh X. Nguyenbe9d8762017-09-11 20:57:4043 EXPECT_EQ(-2, metadata->GetDateLastActive("someappid"));
44 EXPECT_EQ(-2, metadata->GetDaysSinceLastRollCall("someappid"));
45 EXPECT_EQ(-2, metadata->GetDaysSinceLastActive("someappid"));
wafflesd2d9a332016-04-09 01:59:5746 EXPECT_EQ(-2, metadata->GetDateLastRollCall("someotherappid"));
Minh X. Nguyenbe9d8762017-09-11 20:57:4047 EXPECT_EQ(-2, metadata->GetDateLastActive("someotherappid"));
48 EXPECT_EQ(-2, metadata->GetDaysSinceLastRollCall("someotherappid"));
49 EXPECT_EQ(-2, metadata->GetDaysSinceLastActive("someotherappid"));
wafflese7dff732016-04-15 23:51:4950 const std::string pf2 = metadata->GetPingFreshness("someappid");
51 EXPECT_FALSE(pf2.empty());
52 // The following has a 1 / 2^128 chance of being flaky.
53 EXPECT_NE(pf1, pf2);
Sorin Jianub9258672020-02-19 16:52:1754
55 EXPECT_FALSE(metadata->GetProductVersion("someappid").IsValid());
56 metadata->SetProductVersion("someappid", base::Version("1.0"));
57 EXPECT_EQ(base::Version("1.0"), metadata->GetProductVersion("someappid"));
58
59 EXPECT_TRUE(metadata->GetFingerprint("someappid").empty());
60 metadata->SetFingerprint("someappid", "somefingerprint");
61 EXPECT_STREQ("somefingerprint",
62 metadata->GetFingerprint("someappid").c_str());
wafflesd2d9a332016-04-09 01:59:5763}
64
65TEST(PersistedDataTest, SharedPref) {
Minh X. Nguyenbe9d8762017-09-11 20:57:4066 auto pref = std::make_unique<TestingPrefServiceSimple>();
wafflesd2d9a332016-04-09 01:59:5767 PersistedData::RegisterPrefs(pref->registry());
Minh X. Nguyenbe9d8762017-09-11 20:57:4068 auto metadata = std::make_unique<PersistedData>(pref.get(), nullptr);
wafflesd2d9a332016-04-09 01:59:5769 EXPECT_EQ(-2, metadata->GetDateLastRollCall("someappid"));
Minh X. Nguyenbe9d8762017-09-11 20:57:4070 EXPECT_EQ(-2, metadata->GetDateLastActive("someappid"));
71 EXPECT_EQ(-2, metadata->GetDaysSinceLastRollCall("someappid"));
72 EXPECT_EQ(-2, metadata->GetDaysSinceLastActive("someappid"));
wafflesd2d9a332016-04-09 01:59:5773 std::vector<std::string> items;
74 items.push_back("someappid");
75 metadata->SetDateLastRollCall(items, 3383);
Minh X. Nguyenbe9d8762017-09-11 20:57:4076 metadata->SetDateLastActive(items, 3383);
wafflesd2d9a332016-04-09 01:59:5777
78 // Now, create a new PersistedData reading from the same path, verify
79 // that it loads the value.
Minh X. Nguyenbe9d8762017-09-11 20:57:4080 metadata = std::make_unique<PersistedData>(pref.get(), nullptr);
wafflesd2d9a332016-04-09 01:59:5781 EXPECT_EQ(3383, metadata->GetDateLastRollCall("someappid"));
Minh X. Nguyenbe9d8762017-09-11 20:57:4082 EXPECT_EQ(-2, metadata->GetDateLastActive("someappid"));
83 EXPECT_EQ(-2, metadata->GetDaysSinceLastRollCall("someappid"));
84 EXPECT_EQ(-2, metadata->GetDaysSinceLastActive("someappid"));
wafflesd2d9a332016-04-09 01:59:5785 EXPECT_EQ(-2, metadata->GetDateLastRollCall("someotherappid"));
Minh X. Nguyenbe9d8762017-09-11 20:57:4086 EXPECT_EQ(-2, metadata->GetDateLastActive("someotherappid"));
87 EXPECT_EQ(-2, metadata->GetDaysSinceLastRollCall("someotherappid"));
88 EXPECT_EQ(-2, metadata->GetDaysSinceLastActive("someotherappid"));
wafflesd2d9a332016-04-09 01:59:5789}
90
wafflesf43eb2fd32016-08-23 19:15:2991TEST(PersistedDataTest, SimpleCohort) {
Minh X. Nguyenbe9d8762017-09-11 20:57:4092 auto pref = std::make_unique<TestingPrefServiceSimple>();
wafflesf43eb2fd32016-08-23 19:15:2993 PersistedData::RegisterPrefs(pref->registry());
Minh X. Nguyenbe9d8762017-09-11 20:57:4094 auto metadata = std::make_unique<PersistedData>(pref.get(), nullptr);
wafflesf43eb2fd32016-08-23 19:15:2995 EXPECT_EQ("", metadata->GetCohort("someappid"));
96 EXPECT_EQ("", metadata->GetCohort("someotherappid"));
97 EXPECT_EQ("", metadata->GetCohortHint("someappid"));
98 EXPECT_EQ("", metadata->GetCohortHint("someotherappid"));
99 EXPECT_EQ("", metadata->GetCohortName("someappid"));
100 EXPECT_EQ("", metadata->GetCohortName("someotherappid"));
101 metadata->SetCohort("someappid", "c1");
102 metadata->SetCohort("someotherappid", "c2");
103 metadata->SetCohortHint("someappid", "ch1");
104 metadata->SetCohortHint("someotherappid", "ch2");
105 metadata->SetCohortName("someappid", "cn1");
106 metadata->SetCohortName("someotherappid", "cn2");
107 EXPECT_EQ("c1", metadata->GetCohort("someappid"));
108 EXPECT_EQ("c2", metadata->GetCohort("someotherappid"));
109 EXPECT_EQ("ch1", metadata->GetCohortHint("someappid"));
110 EXPECT_EQ("ch2", metadata->GetCohortHint("someotherappid"));
111 EXPECT_EQ("cn1", metadata->GetCohortName("someappid"));
112 EXPECT_EQ("cn2", metadata->GetCohortName("someotherappid"));
113 metadata->SetCohort("someappid", "oc1");
114 metadata->SetCohort("someotherappid", "oc2");
115 metadata->SetCohortHint("someappid", "och1");
116 metadata->SetCohortHint("someotherappid", "och2");
117 metadata->SetCohortName("someappid", "ocn1");
118 metadata->SetCohortName("someotherappid", "ocn2");
119 EXPECT_EQ("oc1", metadata->GetCohort("someappid"));
120 EXPECT_EQ("oc2", metadata->GetCohort("someotherappid"));
121 EXPECT_EQ("och1", metadata->GetCohortHint("someappid"));
122 EXPECT_EQ("och2", metadata->GetCohortHint("someotherappid"));
123 EXPECT_EQ("ocn1", metadata->GetCohortName("someappid"));
124 EXPECT_EQ("ocn2", metadata->GetCohortName("someotherappid"));
125}
126
Minh X. Nguyenbe9d8762017-09-11 20:57:40127TEST(PersistedDataTest, ActivityData) {
128 class TestActivityDataService : public ActivityDataService {
129 public:
130 bool GetActiveBit(const std::string& id) const override {
131 auto it = active_.find(id);
132 return it != active_.end() ? it->second : false;
133 }
134
135 int GetDaysSinceLastActive(const std::string& id) const override {
136 auto it = days_last_active_.find(id);
137 return it != days_last_active_.end() ? it->second : -1;
138 }
139
140 int GetDaysSinceLastRollCall(const std::string& id) const override {
141 auto it = days_last_roll_call_.find(id);
142 return it != days_last_roll_call_.end() ? it->second : -1;
143 }
144
145 void ClearActiveBit(const std::string& id) override { active_[id] = false; }
146
147 void SetDaysSinceLastActive(const std::string& id, int numdays) {
148 days_last_active_[id] = numdays;
149 }
150
151 void SetDaysSinceLastRollCall(const std::string& id, int numdays) {
152 days_last_roll_call_[id] = numdays;
153 }
154
155 void SetActiveBit(const std::string& id) { active_[id] = true; }
156
157 private:
158 std::map<std::string, bool> active_;
159 std::map<std::string, int> days_last_active_;
160 std::map<std::string, int> days_last_roll_call_;
161 };
162
163 auto pref = std::make_unique<TestingPrefServiceSimple>();
164 auto activity_service = std::make_unique<TestActivityDataService>();
165 PersistedData::RegisterPrefs(pref->registry());
166 auto metadata =
167 std::make_unique<PersistedData>(pref.get(), activity_service.get());
168
169 std::vector<std::string> items({"id1", "id2", "id3"});
170
171 for (const auto& item : items) {
172 EXPECT_EQ(-2, metadata->GetDateLastActive(item));
173 EXPECT_EQ(-2, metadata->GetDateLastRollCall(item));
174 EXPECT_EQ(-1, metadata->GetDaysSinceLastActive(item));
175 EXPECT_EQ(-1, metadata->GetDaysSinceLastRollCall(item));
176 EXPECT_EQ(false, metadata->GetActiveBit(item));
177 }
178
179 metadata->SetDateLastActive(items, 1234);
180 metadata->SetDateLastRollCall(items, 1234);
181 for (const auto& item : items) {
182 EXPECT_EQ(false, metadata->GetActiveBit(item));
183 EXPECT_EQ(-2, metadata->GetDateLastActive(item));
184 EXPECT_EQ(1234, metadata->GetDateLastRollCall(item));
185 EXPECT_EQ(-1, metadata->GetDaysSinceLastActive(item));
186 EXPECT_EQ(-1, metadata->GetDaysSinceLastRollCall(item));
187 }
188
189 activity_service->SetActiveBit("id1");
190 activity_service->SetDaysSinceLastActive("id1", 3);
191 activity_service->SetDaysSinceLastRollCall("id1", 2);
192 activity_service->SetDaysSinceLastRollCall("id2", 3);
193 activity_service->SetDaysSinceLastRollCall("id3", 4);
194 EXPECT_EQ(true, metadata->GetActiveBit("id1"));
195 EXPECT_EQ(false, metadata->GetActiveBit("id2"));
196 EXPECT_EQ(false, metadata->GetActiveBit("id2"));
197 EXPECT_EQ(3, metadata->GetDaysSinceLastActive("id1"));
198 EXPECT_EQ(-1, metadata->GetDaysSinceLastActive("id2"));
199 EXPECT_EQ(-1, metadata->GetDaysSinceLastActive("id3"));
200 EXPECT_EQ(2, metadata->GetDaysSinceLastRollCall("id1"));
201 EXPECT_EQ(3, metadata->GetDaysSinceLastRollCall("id2"));
202 EXPECT_EQ(4, metadata->GetDaysSinceLastRollCall("id3"));
203
204 metadata->SetDateLastActive(items, 3384);
205 metadata->SetDateLastRollCall(items, 3383);
206 EXPECT_EQ(false, metadata->GetActiveBit("id1"));
207 EXPECT_EQ(false, metadata->GetActiveBit("id2"));
208 EXPECT_EQ(false, metadata->GetActiveBit("id3"));
209 EXPECT_EQ(3, metadata->GetDaysSinceLastActive("id1"));
210 EXPECT_EQ(-1, metadata->GetDaysSinceLastActive("id2"));
211 EXPECT_EQ(-1, metadata->GetDaysSinceLastActive("id3"));
212 EXPECT_EQ(2, metadata->GetDaysSinceLastRollCall("id1"));
213 EXPECT_EQ(3, metadata->GetDaysSinceLastRollCall("id2"));
214 EXPECT_EQ(4, metadata->GetDaysSinceLastRollCall("id3"));
215 EXPECT_EQ(3384, metadata->GetDateLastActive("id1"));
216 EXPECT_EQ(-2, metadata->GetDateLastActive("id2"));
217 EXPECT_EQ(-2, metadata->GetDateLastActive("id3"));
218 EXPECT_EQ(3383, metadata->GetDateLastRollCall("id1"));
219 EXPECT_EQ(3383, metadata->GetDateLastRollCall("id2"));
220 EXPECT_EQ(3383, metadata->GetDateLastRollCall("id3"));
221
222 metadata->SetDateLastActive(items, 5000);
223 metadata->SetDateLastRollCall(items, 3390);
224 EXPECT_EQ(false, metadata->GetActiveBit("id1"));
225 EXPECT_EQ(false, metadata->GetActiveBit("id2"));
226 EXPECT_EQ(false, metadata->GetActiveBit("id3"));
227 EXPECT_EQ(3, metadata->GetDaysSinceLastActive("id1"));
228 EXPECT_EQ(-1, metadata->GetDaysSinceLastActive("id2"));
229 EXPECT_EQ(-1, metadata->GetDaysSinceLastActive("id3"));
230 EXPECT_EQ(2, metadata->GetDaysSinceLastRollCall("id1"));
231 EXPECT_EQ(3, metadata->GetDaysSinceLastRollCall("id2"));
232 EXPECT_EQ(4, metadata->GetDaysSinceLastRollCall("id3"));
233 EXPECT_EQ(3384, metadata->GetDateLastActive("id1"));
234 EXPECT_EQ(-2, metadata->GetDateLastActive("id2"));
235 EXPECT_EQ(-2, metadata->GetDateLastActive("id3"));
236 EXPECT_EQ(3390, metadata->GetDateLastRollCall("id1"));
237 EXPECT_EQ(3390, metadata->GetDateLastRollCall("id2"));
238 EXPECT_EQ(3390, metadata->GetDateLastRollCall("id3"));
239
240 activity_service->SetActiveBit("id2");
241 metadata->SetDateLastActive(items, 5678);
242 metadata->SetDateLastRollCall(items, 6789);
243 EXPECT_EQ(false, metadata->GetActiveBit("id1"));
244 EXPECT_EQ(false, metadata->GetActiveBit("id2"));
245 EXPECT_EQ(false, metadata->GetActiveBit("id3"));
246 EXPECT_EQ(3, metadata->GetDaysSinceLastActive("id1"));
247 EXPECT_EQ(-1, metadata->GetDaysSinceLastActive("id2"));
248 EXPECT_EQ(-1, metadata->GetDaysSinceLastActive("id3"));
249 EXPECT_EQ(2, metadata->GetDaysSinceLastRollCall("id1"));
250 EXPECT_EQ(3, metadata->GetDaysSinceLastRollCall("id2"));
251 EXPECT_EQ(4, metadata->GetDaysSinceLastRollCall("id3"));
252 EXPECT_EQ(3384, metadata->GetDateLastActive("id1"));
253 EXPECT_EQ(5678, metadata->GetDateLastActive("id2"));
254 EXPECT_EQ(-2, metadata->GetDateLastActive("id3"));
255 EXPECT_EQ(6789, metadata->GetDateLastRollCall("id1"));
256 EXPECT_EQ(6789, metadata->GetDateLastRollCall("id2"));
257 EXPECT_EQ(6789, metadata->GetDateLastRollCall("id3"));
258}
259
wafflesd2d9a332016-04-09 01:59:57260} // namespace update_client