Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
"use strict";
add_task(async function setup() {
let path = await setupPlacesDatabase("places_v83.sqlite");
let db = await Sqlite.openConnection({ path });
const ONE_DAY = 24 * 60 * 60 * 1000;
const NOW = Date.now() * 1000; // Microseconds
const RECENT = NOW - 1 * ONE_DAY * 1000;
const OLD = NOW - 91 * ONE_DAY * 1000; // 91 days ago (outside 90 day window)
// 1. Setup Moz Origins
// Note: We use distinct IDs to make verification easy.
await db.execute(`
INSERT INTO moz_origins (id, prefix, host, frecency, recalc_frecency)
VALUES
-- Frecency above 1, recent visit. Should recalc.
(100, 'https://', 'high-frecency-recent.com', 2, 0),
-- Frecency above 1, old visit. Should recalc.
(101, 'https://', 'high-frecency-old.com', 2, 0),
-- Frecency above 1, no visits. Should recalc.
(102, 'https://', 'high-frecency-empty.com', 2, 0),
-- Frecency at 1, recent visit. Should skip.
(103, 'https://', 'low-frecency-recent.com', 1, 0),
-- Frecency at 1, old visit. Should skip.
(104, 'https://', 'low-frecency-old.com', 1, 0),
-- Frecency at 1, no visits. Should skip.
(105, 'https://', 'low-frecency-empty.com', 1, 0),
-- Already marked. Should remain 1.
(106, 'https://', 'already-marked.com', -1, 1)
`);
// 2. Setup Moz Places (Visits)
await db.execute(`
INSERT INTO moz_places
(url, url_hash, frecency, last_visit_date, origin_id, guid)
VALUES
('https://high-frecency-recent.com/', 'hashA', 2000, ${RECENT}, 100, 'guid0000000A'),
('https://high-frecency-old.com/', 'hashB', 2000, ${OLD}, 101, 'guid0000000B'),
('https://high-frecency-empty.com/', 'hashC', 2000, null, 102, 'guid0000000C'),
('https://low-frecency-recent.com/', 'hashD', 10, ${RECENT}, 103, 'guid0000000D'),
('https://low-frecency-old.com/', 'hashE', 10, ${OLD}, 104, 'guid0000000E'),
('https://low-frecency-empty.com/', 'hashF', 10, null, 105, 'guid0000000F'),
('https://already-marked.com/', 'hashG', 10, null, 106, 'guid0000000G')
`);
await db.close();
});
add_task(async function database_is_valid() {
// Trigger migration
Assert.equal(
PlacesUtils.history.databaseStatus,
PlacesUtils.history.DATABASE_STATUS_UPGRADED
);
const db = await PlacesUtils.promiseDBConnection();
Assert.equal(await db.getSchemaVersion(), CURRENT_SCHEMA_VERSION);
// Check results
let rows = await db.execute(`
SELECT id, host, recalc_frecency
FROM moz_origins
WHERE id >= 100
ORDER BY id ASC
`);
// Map results by ID for easy lookup
let results = new Map();
for (let row of rows) {
results.set(
row.getResultByName("id"),
row.getResultByName("recalc_frecency")
);
}
const expectedResults = [
{
id: 100,
shouldRecalc: 1,
desc: "High frecency should be marked for recalc to decay.",
},
{
id: 101,
shouldRecalc: 1,
desc: "High frecency with old visit (<30 days) should be marked for recalc.",
},
{
id: 102,
shouldRecalc: 1,
desc: "High frecency with no visits should be marked for recalc.",
},
{
id: 103,
shouldRecalc: 0,
desc: "Low frecency with recent visit should not be marked for recalc.",
},
{
id: 104,
shouldRecalc: 0,
desc: "Low frecency with old visit should not be marked for recalc.",
},
{
id: 105,
shouldRecalc: 0,
desc: "Low frecency with no visits should not be marked for recalc.",
},
{
id: 106,
shouldRecalc: 1,
desc: "Already marked rows should remain marked.",
},
];
for (let test of expectedResults) {
Assert.equal(
results.get(test.id),
test.shouldRecalc,
`Origin ${test.id}: ${test.desc}`
);
}
});