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

Side by Side Diff: components/component_updater/component_updater_service_unittest.cc

Issue 1777793002: Define a few simple UMA metrics for the component updater. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 months 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 <limits> 5 #include <limits>
6 #include <string> 6 #include <string>
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
11 #include "base/files/file_path.h" 11 #include "base/files/file_path.h"
12 #include "base/files/file_util.h" 12 #include "base/files/file_util.h"
13 #include "base/macros.h" 13 #include "base/macros.h"
14 #include "base/memory/ref_counted.h" 14 #include "base/memory/ref_counted.h"
15 #include "base/memory/scoped_ptr.h" 15 #include "base/memory/scoped_ptr.h"
16 #include "base/message_loop/message_loop.h" 16 #include "base/message_loop/message_loop.h"
17 #include "base/run_loop.h" 17 #include "base/run_loop.h"
18 #include "base/test/histogram_tester.h"
18 #include "base/test/sequenced_worker_pool_owner.h" 19 #include "base/test/sequenced_worker_pool_owner.h"
19 #include "base/thread_task_runner_handle.h" 20 #include "base/thread_task_runner_handle.h"
20 #include "base/values.h" 21 #include "base/values.h"
21 #include "components/component_updater/component_updater_service.h" 22 #include "components/component_updater/component_updater_service.h"
22 #include "components/component_updater/component_updater_service_internal.h" 23 #include "components/component_updater/component_updater_service_internal.h"
23 #include "components/update_client/test_configurator.h" 24 #include "components/update_client/test_configurator.h"
24 #include "components/update_client/test_installer.h" 25 #include "components/update_client/test_installer.h"
25 #include "components/update_client/update_client.h" 26 #include "components/update_client/update_client.h"
26 27
27 #include "testing/gmock/include/gmock/gmock.h" 28 #include "testing/gmock/include/gmock/gmock.h"
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 // Also tests that Uninstall is called when a component is unregistered. 209 // Also tests that Uninstall is called when a component is unregistered.
209 TEST_F(ComponentUpdaterTest, RegisterComponent) { 210 TEST_F(ComponentUpdaterTest, RegisterComponent) {
210 class LoopHandler { 211 class LoopHandler {
211 public: 212 public:
212 LoopHandler(int max_cnt, const base::Closure& quit_closure) 213 LoopHandler(int max_cnt, const base::Closure& quit_closure)
213 : max_cnt_(max_cnt), quit_closure_(quit_closure) {} 214 : max_cnt_(max_cnt), quit_closure_(quit_closure) {}
214 215
215 void OnUpdate(const std::vector<std::string>& ids, 216 void OnUpdate(const std::vector<std::string>& ids,
216 const UpdateClient::CrxDataCallback& crx_data_callback, 217 const UpdateClient::CrxDataCallback& crx_data_callback,
217 const UpdateClient::CompletionCallback& completion_callback) { 218 const UpdateClient::CompletionCallback& completion_callback) {
219 completion_callback.Run(0);
218 static int cnt = 0; 220 static int cnt = 0;
219 ++cnt; 221 ++cnt;
220 if (cnt >= max_cnt_) 222 if (cnt >= max_cnt_)
221 quit_closure_.Run(); 223 quit_closure_.Run();
222 } 224 }
223 225
224 private: 226 private:
225 const int max_cnt_; 227 const int max_cnt_;
226 base::Closure quit_closure_; 228 base::Closure quit_closure_;
227 }; 229 };
228 230
231 base::HistogramTester ht;
232
229 scoped_refptr<MockInstaller> installer(new MockInstaller()); 233 scoped_refptr<MockInstaller> installer(new MockInstaller());
230 EXPECT_CALL(*installer, Uninstall()).WillOnce(Return(true)); 234 EXPECT_CALL(*installer, Uninstall()).WillOnce(Return(true));
231 235
232 using update_client::jebg_hash; 236 using update_client::jebg_hash;
233 using update_client::abag_hash; 237 using update_client::abag_hash;
234 238
235 const std::string id1 = "abagagagagagagagagagagagagagagag"; 239 const std::string id1 = "abagagagagagagagagagagagagagagag";
236 const std::string id2 = "jebgalgnebhfojomionfpkfelancnnkf"; 240 const std::string id2 = "jebgalgnebhfojomionfpkfelancnnkf";
237 std::vector<std::string> ids; 241 std::vector<std::string> ids;
238 ids.push_back(id1); 242 ids.push_back(id1);
(...skipping 14 matching lines...) Expand all
253 EXPECT_CALL(update_client(), Update(ids, _, _)) 257 EXPECT_CALL(update_client(), Update(ids, _, _))
254 .WillRepeatedly(Invoke(&loop_handler, &LoopHandler::OnUpdate)); 258 .WillRepeatedly(Invoke(&loop_handler, &LoopHandler::OnUpdate));
255 259
256 EXPECT_CALL(update_client(), IsUpdating(id1)).Times(1); 260 EXPECT_CALL(update_client(), IsUpdating(id1)).Times(1);
257 EXPECT_CALL(update_client(), Stop()).Times(1); 261 EXPECT_CALL(update_client(), Stop()).Times(1);
258 262
259 EXPECT_TRUE(component_updater().RegisterComponent(crx_component1)); 263 EXPECT_TRUE(component_updater().RegisterComponent(crx_component1));
260 EXPECT_TRUE(component_updater().RegisterComponent(crx_component2)); 264 EXPECT_TRUE(component_updater().RegisterComponent(crx_component2));
261 265
262 RunThreads(); 266 RunThreads();
267 EXPECT_TRUE(component_updater().UnregisterComponent(id1));
263 268
264 EXPECT_TRUE(component_updater().UnregisterComponent(id1)); 269 ht.ExpectUniqueSample("ComponentUpdater.Calls", 1, 2);
270 ht.ExpectUniqueSample("ComponentUpdater.UpdateCompleteResult", 0, 2);
271 ht.ExpectTotalCount("ComponentUpdater.UpdateCompleteTime", 2);
265 } 272 }
266 273
267 // Tests that on-demand updates invoke UpdateClient::Install. 274 // Tests that on-demand updates invoke UpdateClient::Install.
268 TEST_F(ComponentUpdaterTest, OnDemandUpdate) { 275 TEST_F(ComponentUpdaterTest, OnDemandUpdate) {
269 class LoopHandler { 276 class LoopHandler {
270 public: 277 public:
271 LoopHandler(int max_cnt, const base::Closure& quit_closure) 278 LoopHandler(int max_cnt, const base::Closure& quit_closure)
272 : max_cnt_(max_cnt), quit_closure_(quit_closure) {} 279 : max_cnt_(max_cnt), quit_closure_(quit_closure) {}
273 280
274 void OnInstall( 281 void OnInstall(
275 const std::string& ids, 282 const std::string& ids,
276 const UpdateClient::CrxDataCallback& crx_data_callback, 283 const UpdateClient::CrxDataCallback& crx_data_callback,
277 const UpdateClient::CompletionCallback& completion_callback) { 284 const UpdateClient::CompletionCallback& completion_callback) {
285 completion_callback.Run(0);
278 static int cnt = 0; 286 static int cnt = 0;
279 ++cnt; 287 ++cnt;
280 if (cnt >= max_cnt_) 288 if (cnt >= max_cnt_)
281 quit_closure_.Run(); 289 quit_closure_.Run();
282 } 290 }
283 291
284 private: 292 private:
285 const int max_cnt_; 293 const int max_cnt_;
286 base::Closure quit_closure_; 294 base::Closure quit_closure_;
287 }; 295 };
288 296
297 base::HistogramTester ht;
298
289 auto config = configurator(); 299 auto config = configurator();
290 config->SetInitialDelay(3600); 300 config->SetInitialDelay(3600);
291 301
292 auto& cus = component_updater(); 302 auto& cus = component_updater();
293 303
294 const std::string id = "jebgalgnebhfojomionfpkfelancnnkf"; 304 const std::string id = "jebgalgnebhfojomionfpkfelancnnkf";
295 EXPECT_FALSE(OnDemandTester::OnDemand(&cus, id)); 305 EXPECT_FALSE(OnDemandTester::OnDemand(&cus, id));
296 306
297 scoped_refptr<MockInstaller> installer(new MockInstaller()); 307 scoped_refptr<MockInstaller> installer(new MockInstaller());
298 308
299 using update_client::jebg_hash; 309 using update_client::jebg_hash;
300 CrxComponent crx_component; 310 CrxComponent crx_component;
301 crx_component.pk_hash.assign(jebg_hash, jebg_hash + arraysize(jebg_hash)); 311 crx_component.pk_hash.assign(jebg_hash, jebg_hash + arraysize(jebg_hash));
302 crx_component.version = Version("0.9"); 312 crx_component.version = Version("0.9");
303 crx_component.installer = installer; 313 crx_component.installer = installer;
304 314
305 LoopHandler loop_handler(1, quit_closure()); 315 LoopHandler loop_handler(1, quit_closure());
306 EXPECT_CALL(update_client(), 316 EXPECT_CALL(update_client(),
307 Install("jebgalgnebhfojomionfpkfelancnnkf", _, _)) 317 Install("jebgalgnebhfojomionfpkfelancnnkf", _, _))
308 .WillOnce(Invoke(&loop_handler, &LoopHandler::OnInstall)); 318 .WillOnce(Invoke(&loop_handler, &LoopHandler::OnInstall));
309 EXPECT_CALL(update_client(), Stop()).Times(1); 319 EXPECT_CALL(update_client(), Stop()).Times(1);
310 320
311 EXPECT_TRUE(cus.RegisterComponent(crx_component)); 321 EXPECT_TRUE(cus.RegisterComponent(crx_component));
312 EXPECT_TRUE(OnDemandTester::OnDemand(&cus, id)); 322 EXPECT_TRUE(OnDemandTester::OnDemand(&cus, id));
313 323
314 RunThreads(); 324 RunThreads();
325
326 ht.ExpectUniqueSample("ComponentUpdater.Calls", 0, 1);
327 ht.ExpectUniqueSample("ComponentUpdater.UpdateCompleteResult", 0, 1);
328 ht.ExpectTotalCount("ComponentUpdater.UpdateCompleteTime", 1);
315 } 329 }
316 330
317 // Tests that throttling an update invokes UpdateClient::Install. 331 // Tests that throttling an update invokes UpdateClient::Install.
318 TEST_F(ComponentUpdaterTest, MaybeThrottle) { 332 TEST_F(ComponentUpdaterTest, MaybeThrottle) {
319 class LoopHandler { 333 class LoopHandler {
320 public: 334 public:
321 LoopHandler(int max_cnt, const base::Closure& quit_closure) 335 LoopHandler(int max_cnt, const base::Closure& quit_closure)
322 : max_cnt_(max_cnt), quit_closure_(quit_closure) {} 336 : max_cnt_(max_cnt), quit_closure_(quit_closure) {}
323 337
324 void OnInstall( 338 void OnInstall(
325 const std::string& ids, 339 const std::string& ids,
326 const UpdateClient::CrxDataCallback& crx_data_callback, 340 const UpdateClient::CrxDataCallback& crx_data_callback,
327 const UpdateClient::CompletionCallback& completion_callback) { 341 const UpdateClient::CompletionCallback& completion_callback) {
342 completion_callback.Run(0);
328 static int cnt = 0; 343 static int cnt = 0;
329 ++cnt; 344 ++cnt;
330 if (cnt >= max_cnt_) 345 if (cnt >= max_cnt_)
331 quit_closure_.Run(); 346 quit_closure_.Run();
332 } 347 }
333 348
334 private: 349 private:
335 const int max_cnt_; 350 const int max_cnt_;
336 base::Closure quit_closure_; 351 base::Closure quit_closure_;
337 }; 352 };
338 353
354 base::HistogramTester ht;
355
339 auto config = configurator(); 356 auto config = configurator();
340 config->SetInitialDelay(3600); 357 config->SetInitialDelay(3600);
341 358
342 scoped_refptr<MockInstaller> installer(new MockInstaller()); 359 scoped_refptr<MockInstaller> installer(new MockInstaller());
343 360
344 using update_client::jebg_hash; 361 using update_client::jebg_hash;
345 CrxComponent crx_component; 362 CrxComponent crx_component;
346 crx_component.pk_hash.assign(jebg_hash, jebg_hash + arraysize(jebg_hash)); 363 crx_component.pk_hash.assign(jebg_hash, jebg_hash + arraysize(jebg_hash));
347 crx_component.version = Version("0.9"); 364 crx_component.version = Version("0.9");
348 crx_component.installer = installer; 365 crx_component.installer = installer;
349 366
350 LoopHandler loop_handler(1, quit_closure()); 367 LoopHandler loop_handler(1, quit_closure());
351 EXPECT_CALL(update_client(), 368 EXPECT_CALL(update_client(),
352 Install("jebgalgnebhfojomionfpkfelancnnkf", _, _)) 369 Install("jebgalgnebhfojomionfpkfelancnnkf", _, _))
353 .WillOnce(Invoke(&loop_handler, &LoopHandler::OnInstall)); 370 .WillOnce(Invoke(&loop_handler, &LoopHandler::OnInstall));
354 EXPECT_CALL(update_client(), Stop()).Times(1); 371 EXPECT_CALL(update_client(), Stop()).Times(1);
355 372
356 EXPECT_TRUE(component_updater().RegisterComponent(crx_component)); 373 EXPECT_TRUE(component_updater().RegisterComponent(crx_component));
357 component_updater().MaybeThrottle( 374 component_updater().MaybeThrottle(
358 "jebgalgnebhfojomionfpkfelancnnkf", 375 "jebgalgnebhfojomionfpkfelancnnkf",
359 base::Bind(&ComponentUpdaterTest::ReadyCallback)); 376 base::Bind(&ComponentUpdaterTest::ReadyCallback));
360 377
361 RunThreads(); 378 RunThreads();
379
380 ht.ExpectUniqueSample("ComponentUpdater.Calls", 0, 1);
381 ht.ExpectUniqueSample("ComponentUpdater.UpdateCompleteResult", 0, 1);
382 ht.ExpectTotalCount("ComponentUpdater.UpdateCompleteTime", 1);
362 } 383 }
363 384
364 } // namespace component_updater 385 } // namespace component_updater
OLDNEW
« no previous file with comments | « components/component_updater/component_updater_service_internal.h ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698