toolkit/components/places/tests/unit/test_telemetry.js

branch
TOR_BUG_3246
changeset 7
129ffea94266
equal deleted inserted replaced
-1:000000000000 0:c42f064fc2a1
1 /* Any copyright is dedicated to the Public Domain.
2 http://creativecommons.org/publicdomain/zero/1.0/ */
3
4 // Tests common Places telemetry probes by faking the telemetry service.
5
6 Components.utils.import("resource://gre/modules/PlacesDBUtils.jsm");
7
8 let histograms = {
9 PLACES_PAGES_COUNT: function (val) do_check_eq(val, 1),
10 PLACES_BOOKMARKS_COUNT: function (val) do_check_eq(val, 1),
11 PLACES_TAGS_COUNT: function (val) do_check_eq(val, 1),
12 PLACES_FOLDERS_COUNT: function (val) do_check_eq(val, 1),
13 PLACES_KEYWORDS_COUNT: function (val) do_check_eq(val, 1),
14 PLACES_SORTED_BOOKMARKS_PERC: function (val) do_check_eq(val, 100),
15 PLACES_TAGGED_BOOKMARKS_PERC: function (val) do_check_eq(val, 100),
16 PLACES_DATABASE_FILESIZE_MB: function (val) do_check_true(val > 0),
17 // The journal may have been truncated.
18 PLACES_DATABASE_JOURNALSIZE_MB: function (val) do_check_true(val >= 0),
19 PLACES_DATABASE_PAGESIZE_B: function (val) do_check_eq(val, 32768),
20 PLACES_DATABASE_SIZE_PER_PAGE_B: function (val) do_check_true(val > 0),
21 PLACES_EXPIRATION_STEPS_TO_CLEAN2: function (val) do_check_true(val > 1),
22 //PLACES_AUTOCOMPLETE_1ST_RESULT_TIME_MS: function (val) do_check_true(val > 1),
23 PLACES_IDLE_FRECENCY_DECAY_TIME_MS: function (val) do_check_true(val > 0),
24 PLACES_IDLE_MAINTENANCE_TIME_MS: function (val) do_check_true(val > 0),
25 PLACES_ANNOS_BOOKMARKS_COUNT: function (val) do_check_eq(val, 1),
26 PLACES_ANNOS_BOOKMARKS_SIZE_KB: function (val) do_check_eq(val, 1),
27 PLACES_ANNOS_PAGES_COUNT: function (val) do_check_eq(val, 1),
28 PLACES_ANNOS_PAGES_SIZE_KB: function (val) do_check_eq(val, 1),
29 PLACES_FRECENCY_CALC_TIME_MS: function (val) do_check_true(val >= 0),
30 }
31
32 function run_test()
33 {
34 run_next_test();
35 }
36
37 add_task(function test_execute()
38 {
39 // Put some trash in the database.
40 const URI = NetUtil.newURI("http://moz.org/");
41
42 let folderId = PlacesUtils.bookmarks.createFolder(PlacesUtils.unfiledBookmarksFolderId,
43 "moz test",
44 PlacesUtils.bookmarks.DEFAULT_INDEX);
45 let itemId = PlacesUtils.bookmarks.insertBookmark(folderId,
46 uri,
47 PlacesUtils.bookmarks.DEFAULT_INDEX,
48 "moz test");
49 PlacesUtils.tagging.tagURI(uri, ["tag"]);
50 PlacesUtils.bookmarks.setKeywordForBookmark(itemId, "keyword");
51
52 // Set a large annotation.
53 let content = "";
54 while (content.length < 1024) {
55 content += "0";
56 }
57 PlacesUtils.annotations.setItemAnnotation(itemId, "test-anno", content, 0,
58 PlacesUtils.annotations.EXPIRE_NEVER);
59 PlacesUtils.annotations.setPageAnnotation(uri, "test-anno", content, 0,
60 PlacesUtils.annotations.EXPIRE_NEVER);
61
62 // Request to gather telemetry data.
63 Cc["@mozilla.org/places/categoriesStarter;1"]
64 .getService(Ci.nsIObserver)
65 .observe(null, "gather-telemetry", null);
66
67 yield promiseAsyncUpdates();
68
69 // Test expiration probes.
70 for (let i = 0; i < 2; i++) {
71 yield promiseAddVisits({
72 uri: uri("http://" + i + ".moz.org/"),
73 visitDate: Date.now() // [sic]
74 });
75 }
76 Services.prefs.setIntPref("places.history.expiration.max_pages", 0);
77 let expire = Cc["@mozilla.org/places/expiration;1"].getService(Ci.nsIObserver);
78 expire.observe(null, "places-debug-start-expiration", 1);
79 expire.observe(null, "places-debug-start-expiration", -1);
80
81 // Test autocomplete probes.
82 /*
83 // This is useful for manual testing by changing the minimum time for
84 // autocomplete telemetry to 0, but there is no way to artificially delay
85 // autocomplete by more than 50ms in a realiable way.
86 Services.prefs.setIntPref("browser.urlbar.search.sources", 3);
87 Services.prefs.setIntPref("browser.urlbar.default.behavior", 0);
88 function AutoCompleteInput(aSearches) {
89 this.searches = aSearches;
90 }
91 AutoCompleteInput.prototype = {
92 timeout: 10,
93 textValue: "",
94 searchParam: "",
95 popupOpen: false,
96 minResultsForPopup: 0,
97 invalidate: function() {},
98 disableAutoComplete: false,
99 completeDefaultIndex: false,
100 get popup() { return this; },
101 onSearchBegin: function() {},
102 onSearchComplete: function() {},
103 setSelectedIndex: function() {},
104 get searchCount() { return this.searches.length; },
105 getSearchAt: function(aIndex) this.searches[aIndex],
106 QueryInterface: XPCOMUtils.generateQI([
107 Ci.nsIAutoCompleteInput,
108 Ci.nsIAutoCompletePopup,
109 ])
110 };
111 let controller = Cc["@mozilla.org/autocomplete/controller;1"].
112 getService(Ci.nsIAutoCompleteController);
113 controller.input = new AutoCompleteInput(["history"]);
114 controller.startSearch("moz");
115 */
116
117 // Test idle probes.
118 PlacesUtils.history.QueryInterface(Ci.nsIObserver)
119 .observe(null, "idle-daily", null);
120 PlacesDBUtils.maintenanceOnIdle();
121
122 yield promiseTopicObserved("places-maintenance-finished");
123
124 for (let histogramId in histograms) {
125 do_log_info("checking histogram " + histogramId);
126 let validate = histograms[histogramId];
127 let snapshot = Services.telemetry.getHistogramById(histogramId).snapshot();
128 validate(snapshot.sum);
129 do_check_true(snapshot.counts.reduce(function(a, b) a + b) > 0);
130 }
131 });
132
133 add_test(function test_healthreport_callback() {
134 PlacesDBUtils.telemetry(null, function onResult(data) {
135 do_check_neq(data, null);
136
137 do_check_eq(Object.keys(data).length, 2);
138 do_check_eq(data.PLACES_PAGES_COUNT, 1);
139 do_check_eq(data.PLACES_BOOKMARKS_COUNT, 1);
140
141 run_next_test();
142 });
143 });
144

mercurial