156 lines
4.2 KiB
JavaScript
156 lines
4.2 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
"use strict";
|
|
|
|
const { HttpServer } = ChromeUtils.importESModule(
|
|
"resource://testing-common/httpd.sys.mjs"
|
|
);
|
|
|
|
const lazy = {};
|
|
|
|
ChromeUtils.defineESModuleGetters(lazy, {
|
|
DAPTelemetrySender: "resource://gre/modules/DAPTelemetrySender.sys.mjs",
|
|
});
|
|
|
|
const BinaryInputStream = Components.Constructor(
|
|
"@mozilla.org/binaryinputstream;1",
|
|
"nsIBinaryInputStream",
|
|
"setInputStream"
|
|
);
|
|
|
|
const PREF_LEADER = "toolkit.telemetry.dap.leader.url";
|
|
const PREF_HELPER = "toolkit.telemetry.dap.helper.url";
|
|
|
|
const PREF_DATAUPLOAD = "datareporting.healthreport.uploadEnabled";
|
|
|
|
let server;
|
|
let server_addr;
|
|
|
|
// The dummy test server will record report sizes in this list.
|
|
let server_requests = [];
|
|
|
|
// List of testing task configurations. These are fake IDs for use in this files
|
|
// test server only.
|
|
const tasks = [
|
|
{
|
|
id: "QjMD4n8l_MHBoLrbCfLTFi8hC264fC59SKHPviPF0q8",
|
|
vdaf: "sum",
|
|
bits: 8,
|
|
time_precision: 300,
|
|
},
|
|
{
|
|
id: "52TTU9GPOA_eTiPJePk5RNauQI4EWCnzixAXe3LEz7o",
|
|
vdaf: "sumvec",
|
|
bits: 1,
|
|
length: 20,
|
|
time_precision: 300,
|
|
},
|
|
{
|
|
id: "DSZGMFh26hBYXNaKvhL_N4AHA3P5lDn19on1vFPBxJM",
|
|
vdaf: "sumvec",
|
|
bits: 8,
|
|
length: 20,
|
|
time_precision: 300,
|
|
},
|
|
{
|
|
id: "RnywY1X4s1vtspu6B8C1FOu_jJZhJO6V8L3PT3WepF4",
|
|
vdaf: "sumvec",
|
|
bits: 16,
|
|
length: 20,
|
|
time_precision: 300,
|
|
},
|
|
{
|
|
id: "o-91EcR2kfxfAmkKPPHifXKqiH7Upm0Ilw5joB3L_pE",
|
|
vdaf: "histogram",
|
|
length: 30,
|
|
time_precision: 300,
|
|
},
|
|
];
|
|
|
|
// Expected payload sizes of DAP reports for the above tasks.
|
|
const task_report_sizes = [886, 902, 3654, 6566, 1126];
|
|
|
|
function uploadHandler(request, response) {
|
|
Assert.equal(
|
|
request.getHeader("Content-Type"),
|
|
"application/dap-report",
|
|
"Wrong Content-Type header."
|
|
);
|
|
|
|
let body = new BinaryInputStream(request.bodyInputStream);
|
|
server_requests.push(body.available());
|
|
|
|
response.setStatusLine(request.httpVersion, 200);
|
|
}
|
|
|
|
add_setup(async function () {
|
|
do_get_profile();
|
|
|
|
// Set up a mock server to represent the DAP endpoints.
|
|
server = new HttpServer();
|
|
server.registerPrefixHandler("/leader_endpoint/tasks/", uploadHandler);
|
|
server.start(-1);
|
|
const i = server.identity;
|
|
server_addr = i.primaryScheme + "://" + i.primaryHost + ":" + i.primaryPort;
|
|
|
|
Services.prefs.setStringPref(PREF_LEADER, server_addr + "/leader_endpoint");
|
|
Services.prefs.setStringPref(PREF_HELPER, server_addr + "/helper_endpoint");
|
|
registerCleanupFunction(() => {
|
|
Services.prefs.clearUserPref(PREF_LEADER);
|
|
Services.prefs.clearUserPref(PREF_HELPER);
|
|
|
|
return new Promise(resolve => {
|
|
server.stop(resolve);
|
|
});
|
|
});
|
|
});
|
|
|
|
add_task(async function testVerificationTask() {
|
|
server_requests = [];
|
|
await lazy.DAPTelemetrySender.sendTestReports(tasks, { timeout: 5000 });
|
|
Assert.deepEqual(
|
|
server_requests,
|
|
task_report_sizes,
|
|
"Report upload successful."
|
|
);
|
|
});
|
|
|
|
add_task(async function testNetworkError() {
|
|
const test_leader = Services.prefs.getStringPref(PREF_LEADER);
|
|
Services.prefs.setStringPref(PREF_LEADER, server_addr + "/invalid-endpoint");
|
|
|
|
server_requests = [];
|
|
|
|
let thrownErr;
|
|
try {
|
|
await lazy.DAPTelemetrySender.sendTestReports(tasks, { timeout: 5000 });
|
|
} catch (e) {
|
|
thrownErr = e;
|
|
}
|
|
|
|
Assert.deepEqual(server_requests, []);
|
|
Assert.ok(thrownErr.message.startsWith("Sending failed."));
|
|
|
|
Services.prefs.setStringPref(PREF_LEADER, test_leader);
|
|
});
|
|
|
|
add_task(async function testTelemetryToggle() {
|
|
// Normal
|
|
server_requests = [];
|
|
await lazy.DAPTelemetrySender.sendTestReports(tasks, { timeout: 5000 });
|
|
Assert.deepEqual(server_requests, task_report_sizes);
|
|
|
|
// Telemetry off
|
|
server_requests = [];
|
|
Services.prefs.setBoolPref(PREF_DATAUPLOAD, false);
|
|
await lazy.DAPTelemetrySender.sendTestReports(tasks, { timeout: 5000 });
|
|
Assert.deepEqual(server_requests, []);
|
|
|
|
// Normal
|
|
server_requests = [];
|
|
Services.prefs.clearUserPref(PREF_DATAUPLOAD);
|
|
await lazy.DAPTelemetrySender.sendTestReports(tasks, { timeout: 5000 });
|
|
Assert.deepEqual(server_requests, task_report_sizes);
|
|
});
|