Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
/* Any copyright is dedicated to the Public Domain.
*/
"use strict";
const { MacAttribution } = ChromeUtils.importESModule(
"resource:///modules/MacAttribution.sys.mjs"
);
let extendedAttributeTestCases = [
{
raw: "__MOZCUSTOM__dlsource%3D=mozci",
expected: "dlsource%3D=mozci",
error: false,
},
{
raw: "__MOZCUSTOM__dlsource%3D=mozci\0\0\0\0\0",
expected: "dlsource%3D=mozci",
error: false,
},
{
raw: "__MOZCUSTOM__dlsource%3D=mozci\t\t\t\t\t",
expected: "dlsource%3D=mozci",
error: false,
},
{
raw: "__MOZCUSTOM__dlsource%3D=mozci\0\0\0\t\t",
expected: "dlsource%3D=mozci",
error: false,
},
{
raw: "__MOZCUSTOM__dlsource%3D=mozci\t\t\0\0",
expected: "dlsource%3D=mozci",
error: false,
},
{
raw: "__MOZCUSTOM__dlsource%3D=mozci\0\t\0\t\0\t",
expected: "dlsource%3D=mozci",
error: false,
},
{
raw: "",
expected: "",
error: true,
},
{
raw: "dlsource%3D=mozci\0\t\0\t\0\t",
expected: "",
error: true,
},
];
add_task(async () => {
await setupStubs();
});
// Tests to ensure that MacAttribution.getAttributionString
// strips away the parts of the extended attribute that it should,
// and that invalid extended attribute values result in no attribution
// data.
add_task(async function testExtendedAttributeProcessing() {
for (let entry of extendedAttributeTestCases) {
// We use setMacXAttr directly here rather than setAttributionString because
// we need the ability to set invalid attribution strings.
await IOUtils.setMacXAttr(
MacAttribution.applicationPath,
"com.apple.application-instance",
new TextEncoder().encode(entry.raw)
);
try {
let got = await MacAttribution.getAttributionString();
if (entry.error === true) {
Assert.ok(false, "Expected error, raw code was: " + entry.raw);
}
Assert.equal(
got,
entry.expected,
"Returned code should match expected value, raw code was: " + entry.raw
);
} catch (err) {
if (entry.error === false) {
Assert.ok(
false,
"Unexpected error, raw code was: " + entry.raw + " error is: " + err
);
}
}
}
});
add_task(async function testValidAttrCodes() {
for (let entry of validAttrCodes) {
if (entry.platforms && !entry.platforms.includes("mac")) {
continue;
}
await MacAttribution.setAttributionString(entry.code);
// Read attribution code from xattr.
AttributionCode._clearCache();
let result = await AttributionCode.getAttrDataAsync();
Assert.deepEqual(
result,
entry.parsed,
"Parsed code should match expected value, code was: " + entry.code
);
// Read attribution code from cache.
result = await AttributionCode.getAttrDataAsync();
Assert.deepEqual(
result,
entry.parsed,
"Parsed code should match expected value, code was: " + entry.code
);
// Does not overwrite cached existing attribution code.
await MacAttribution.setAttributionString("__MOZCUSTOM__testcode");
result = await AttributionCode.getAttrDataAsync();
Assert.deepEqual(
result,
entry.parsed,
"Parsed code should match expected value, code was: " + entry.code
);
}
});
add_task(async function testInvalidAttrCodes() {
for (let code of invalidAttrCodes) {
await MacAttribution.setAttributionString("__MOZCUSTOM__" + code);
// Read attribution code from xattr
AttributionCode._clearCache();
let result = await AttributionCode.getAttrDataAsync();
Assert.deepEqual(result, {}, "Code should have failed to parse: " + code);
}
});