128 lines
3.8 KiB
JavaScript
128 lines
3.8 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
https://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
/**
|
|
* Tests whether the suggestion count telemetry is correctly divided
|
|
* into {successful, aborted, failed}, and whether it is only recorded
|
|
* for app-provided search engines.
|
|
*/
|
|
|
|
"use strict";
|
|
|
|
const { SearchSuggestionController } = ChromeUtils.importESModule(
|
|
"moz-src:///toolkit/components/search/SearchSuggestionController.sys.mjs"
|
|
);
|
|
|
|
let openSearchEngine, workingAppEngine, failingAppEngine;
|
|
|
|
add_setup(async function () {
|
|
// Initialize Glean.
|
|
do_get_profile();
|
|
Services.fog.initializeFOG();
|
|
// Initialize sjs server early so we have access to gHttpURL.
|
|
let server = useHttpServer();
|
|
server.registerContentType("sjs", "sjs");
|
|
|
|
consoleAllowList = consoleAllowList.concat([
|
|
"SearchSuggestionController found an unexpected string value",
|
|
]);
|
|
|
|
SearchTestUtils.setRemoteSettingsConfig([
|
|
{
|
|
identifier: "workingAppEngine",
|
|
base: {
|
|
urls: {
|
|
suggestions: {
|
|
base: `${gHttpURL}/sjs/searchSuggestions.sjs`,
|
|
searchTermParamName: "q",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
identifier: "failingAppEngine",
|
|
base: {
|
|
urls: {
|
|
suggestions: {
|
|
base: "http://example.invalid/",
|
|
searchTermParamName: "q",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
]);
|
|
await Services.search.init();
|
|
|
|
let openSearchEngineData = {
|
|
baseURL: `${gHttpURL}/sjs/`,
|
|
name: "GET suggestion engine",
|
|
method: "GET",
|
|
};
|
|
|
|
openSearchEngine = await SearchTestUtils.installOpenSearchEngine({
|
|
url: `${gHttpURL}/sjs/engineMaker.sjs?${JSON.stringify(openSearchEngineData)}`,
|
|
});
|
|
workingAppEngine = Services.search.getEngineById("workingAppEngine");
|
|
failingAppEngine = Services.search.getEngineById("failingAppEngine");
|
|
});
|
|
|
|
add_task(async function test_success() {
|
|
for (let i = 0; i < 5; i++) {
|
|
let controller = new SearchSuggestionController();
|
|
let result = await controller.fetch("mo", false, workingAppEngine);
|
|
Assert.equal(result.remote.length, 3);
|
|
}
|
|
|
|
Assert.equal(
|
|
Glean.searchSuggestions.successfulRequests.workingAppEngine.testGetValue(),
|
|
5,
|
|
"Successful request counter is correctly updated"
|
|
);
|
|
});
|
|
|
|
add_task(async function test_abort() {
|
|
let controller = new SearchSuggestionController();
|
|
|
|
// Don't await the result to trigger the abort handler.
|
|
controller.fetch("mo", false, workingAppEngine);
|
|
controller.fetch("mo", false, workingAppEngine);
|
|
controller.fetch("mo", false, workingAppEngine);
|
|
controller.fetch("mo", false, workingAppEngine);
|
|
await controller.fetch("mo", false, workingAppEngine);
|
|
|
|
Assert.equal(
|
|
Glean.searchSuggestions.successfulRequests.workingAppEngine.testGetValue(),
|
|
6, // 1 new + 5 from the previous test.
|
|
"Successful request counter is correctly updated"
|
|
);
|
|
Assert.equal(
|
|
Glean.searchSuggestions.abortedRequests.workingAppEngine.testGetValue(),
|
|
4,
|
|
"Aborted request counter is correctly updated"
|
|
);
|
|
});
|
|
|
|
add_task(async function test_error() {
|
|
let controller = new SearchSuggestionController();
|
|
await controller.fetch("mo", false, failingAppEngine);
|
|
await controller.fetch("mo", false, failingAppEngine);
|
|
await controller.fetch("mo", false, failingAppEngine);
|
|
|
|
Assert.equal(
|
|
Glean.searchSuggestions.failedRequests.failingAppEngine.testGetValue(),
|
|
3,
|
|
"Failed request counter is correctly updated"
|
|
);
|
|
});
|
|
|
|
add_task(async function test_nonAppProvided() {
|
|
let controller = new SearchSuggestionController();
|
|
let result = await controller.fetch("mo", false, openSearchEngine);
|
|
Assert.equal(result.remote.length, 3);
|
|
|
|
Assert.equal(
|
|
Glean.searchSuggestions.successfulRequests.openSearchEngine.testGetValue(),
|
|
null,
|
|
"No telemetry is recorded for non-app-provided-engine"
|
|
);
|
|
});
|