183 lines
5.4 KiB
JavaScript
183 lines
5.4 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
add_setup(function test_setup() {
|
|
// FOG needs a profile directory to put its data in.
|
|
do_get_profile();
|
|
|
|
// FOG needs to be initialized in order for data to flow.
|
|
Services.fog.initializeFOG();
|
|
});
|
|
|
|
add_task(async function test_purge_counting() {
|
|
let profile = do_get_profile();
|
|
let dbFile = do_get_cookie_file(profile);
|
|
Assert.ok(!dbFile.exists());
|
|
|
|
let schema12db = new CookieDatabaseConnection(dbFile, 12);
|
|
let now = Date.now() * 1000; // date in microseconds
|
|
|
|
// add some non-partitioned cookies for key
|
|
let cookieNum1 = 1;
|
|
let hostNonPartitioned = "cookie-host-non-partitioned.com";
|
|
for (let i = 0; i < cookieNum1; i++) {
|
|
let cookie = new Cookie(
|
|
"cookie-name" + i,
|
|
"cookie-value" + i,
|
|
hostNonPartitioned,
|
|
"/", // path
|
|
now, // expiry
|
|
now, // needed to get the cookie by the db init
|
|
now, // creation time
|
|
false, // session
|
|
false, // secure
|
|
false, // http-only
|
|
false, // inBrowserElement
|
|
{} // OA
|
|
);
|
|
schema12db.insertCookie(cookie);
|
|
}
|
|
|
|
// add some non-partitioned cookies different key
|
|
let cookieNum2 = 10;
|
|
for (let i = 0; i < cookieNum2; i++) {
|
|
let cookie = new Cookie(
|
|
"cookie-name" + i,
|
|
"cookie-value" + i,
|
|
hostNonPartitioned,
|
|
"/", // path
|
|
now, // expiry
|
|
now, // needed to get the cookie by the db init
|
|
now, // creation time
|
|
false, // session
|
|
false, // secure
|
|
false, // http-only
|
|
false, // inBrowserElement
|
|
{ userContextId: 8 } // OA
|
|
);
|
|
schema12db.insertCookie(cookie);
|
|
}
|
|
|
|
// add some partitioned cookies
|
|
let hostPartitioned = "host-partitioned.com";
|
|
let cookieNum3 = 3;
|
|
for (let i = 0; i < cookieNum3; i++) {
|
|
let cookie = new Cookie(
|
|
"cookie-name" + i,
|
|
"cookie-value" + i,
|
|
hostPartitioned,
|
|
"/", // path
|
|
now, // expiry
|
|
now, // needed to get the cookie by the db init
|
|
now, // creation time
|
|
false, // session
|
|
false, // secure
|
|
false, // http-only
|
|
false, // inBrowserElement
|
|
{ partitionKey: "(https,example.com)" }
|
|
);
|
|
schema12db.insertCookie(cookie);
|
|
}
|
|
|
|
// add some partitioned with different OA
|
|
let cookieNum4 = 35;
|
|
for (let i = 0; i < cookieNum4; i++) {
|
|
let cookie = new Cookie(
|
|
"cookie-name" + i,
|
|
"cookie-value" + i,
|
|
hostPartitioned,
|
|
"/", // path
|
|
now, // expiry
|
|
now, // needed to get the cookie by the db init
|
|
now, // creation time
|
|
false, // session
|
|
false, // secure
|
|
false, // http-only
|
|
false, // inBrowserElement
|
|
{ partitionKey: "(https,example.com)", userContextId: 7 }
|
|
);
|
|
schema12db.insertCookie(cookie);
|
|
}
|
|
|
|
let allCookieCount = cookieNum1 + cookieNum2 + cookieNum3 + cookieNum4;
|
|
Assert.equal(do_count_cookies_in_db(schema12db.db), allCookieCount);
|
|
|
|
// startup the cookie service and check the cookie counts
|
|
let cookieCountNonPart =
|
|
Services.cookies.countCookiesFromHost(hostNonPartitioned); // includes expired cookies
|
|
Assert.equal(cookieCountNonPart, cookieNum1);
|
|
let cookieCountNonPartOA = Services.cookies.getCookiesFromHost(
|
|
hostNonPartitioned,
|
|
{ userContextId: 8 }
|
|
).length; // includes expired cookies
|
|
Assert.equal(cookieCountNonPartOA, cookieNum2);
|
|
let cookieCountPart = Services.cookies.getCookiesFromHost(hostPartitioned, {
|
|
partitionKey: "(https,example.com)",
|
|
}).length; // includes expired cookies
|
|
Assert.equal(cookieCountPart, cookieNum3);
|
|
let cookieCountPartOA = Services.cookies.getCookiesFromHost(hostPartitioned, {
|
|
partitionKey: "(https,example.com)",
|
|
userContextId: 7,
|
|
}).length; // includes expired cookies
|
|
Assert.equal(cookieCountPartOA, cookieNum4);
|
|
|
|
// trigger the collection
|
|
Services.obs.notifyObservers(null, "idle-daily");
|
|
|
|
// check telem fired for all cookie count
|
|
let cct = await Glean.networking.cookieCountTotal.testGetValue();
|
|
Assert.equal(cct.sum, allCookieCount, "All cookies telem");
|
|
|
|
// check telem for all un/partitioned counts
|
|
let ccp = await Glean.networking.cookieCountPartitioned.testGetValue();
|
|
Assert.equal(
|
|
ccp.sum,
|
|
cookieNum3 + cookieNum4,
|
|
"All partitioned cookies telem"
|
|
);
|
|
|
|
let ccu = await Glean.networking.cookieCountUnpartitioned.testGetValue();
|
|
Assert.equal(
|
|
ccu.sum,
|
|
cookieNum1 + cookieNum2,
|
|
"All unpartitioned cookies telem"
|
|
);
|
|
|
|
// check telem for part by key (host+OA)
|
|
// Note: With the decided histogram layout we see the buckets
|
|
// (used for indexing the histogram's buckets)
|
|
let histPartByKey =
|
|
await Glean.networking.cookieCountPartByKey.testGetValue();
|
|
Assert.equal(histPartByKey.values[2], 1, "Partitioned bucket 2 has 1 value");
|
|
Assert.equal(
|
|
histPartByKey.values[31],
|
|
1,
|
|
"Partitioned bucket 31 has 1 value"
|
|
);
|
|
Assert.equal(
|
|
histPartByKey.sum,
|
|
cookieNum3 + cookieNum4,
|
|
"Partitioned bucket sums correctly"
|
|
);
|
|
|
|
// check telem for unpart by key (host+OA)
|
|
let histUnpartByKey =
|
|
await Glean.networking.cookieCountUnpartByKey.testGetValue();
|
|
Assert.equal(
|
|
histUnpartByKey.values[1],
|
|
1,
|
|
"Unpartitioned bucket 1 has 1 value"
|
|
);
|
|
Assert.equal(
|
|
histUnpartByKey.values[8],
|
|
1,
|
|
"Unpartitioned bucket 8 has 1 value"
|
|
);
|
|
Assert.equal(
|
|
histUnpartByKey.sum,
|
|
cookieNum1 + cookieNum2,
|
|
"Unpartitioned bucket sums correctly"
|
|
);
|
|
|
|
schema12db.close();
|
|
});
|