Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: os == 'android'
- This test runs only with pattern: !condprof
- Manifest: toolkit/components/places/tests/migration/xpcshell.toml
/* 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
`);
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}`
);
}
});