start working on slopstore class analogous to checkcache class
This commit is contained in:
@@ -3,11 +3,7 @@ import { openDB, deleteDB } from "../scripts/idb/index.js"
|
|||||||
|
|
||||||
const MAX_TIMESTAMP_DIFFERENCE = 3
|
const MAX_TIMESTAMP_DIFFERENCE = 3
|
||||||
|
|
||||||
xdescribe("sanity check", () => {
|
let mock_clock = jasmine.clock().install()
|
||||||
it("works", () => {
|
|
||||||
expect(true).toBeTrue()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe("SlopDB", () => {
|
describe("SlopDB", () => {
|
||||||
|
|
||||||
@@ -38,11 +34,8 @@ describe("SlopDB", () => {
|
|||||||
describe("version 2", () => {
|
describe("version 2", () => {
|
||||||
|
|
||||||
let slopdb
|
let slopdb
|
||||||
let mock_clock
|
|
||||||
|
|
||||||
beforeAll(() => {
|
beforeAll(() => {
|
||||||
const j_clock = jasmine.clock()
|
|
||||||
mock_clock = j_clock.install()
|
|
||||||
mock_clock.mockDate(new Date(2020, 1, 1))
|
mock_clock.mockDate(new Date(2020, 1, 1))
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -61,60 +54,106 @@ describe("SlopDB", () => {
|
|||||||
// slopdb_v2.db.close()
|
// slopdb_v2.db.close()
|
||||||
})
|
})
|
||||||
|
|
||||||
it("caches a checked url", async () => {
|
|
||||||
const cache = slopdb.check_cache
|
|
||||||
expect(cache).toBeInstanceOf(CheckCache)
|
|
||||||
|
|
||||||
const slop_url = new URL("https://sloppy-slop.com/sloparticle")
|
|
||||||
|
|
||||||
const new_item = await cache.store(slop_url.toString())
|
|
||||||
const store_time = Date.now()
|
|
||||||
|
|
||||||
mock_clock.tick(1000)
|
|
||||||
const cached_item = await cache.get(slop_url.toString())
|
|
||||||
|
|
||||||
expect(cached_item.url).toEqual(slop_url.toString())
|
|
||||||
expect(new_item.check_timestamp).toBeCloseTo(store_time)
|
|
||||||
expect(new_item.check_timestamp).toBeGreaterThan(store_time - MAX_TIMESTAMP_DIFFERENCE)
|
|
||||||
})
|
|
||||||
|
|
||||||
it("updates a cached url's timestamp when it is accessed", async () => {
|
|
||||||
|
|
||||||
|
|
||||||
const cache = slopdb.check_cache
|
|
||||||
|
|
||||||
const slop_url = new URL("https://sloppy-slop.com/sloparticle")
|
|
||||||
await cache.store(slop_url.toString())
|
|
||||||
const store_time = Date.now()
|
|
||||||
|
|
||||||
mock_clock.tick(1000 * 30)
|
|
||||||
|
|
||||||
const cached_item = await cache.get(slop_url.toString())
|
|
||||||
expect(cached_item.check_timestamp).toBeGreaterThan(store_time + 10)
|
|
||||||
})
|
|
||||||
|
|
||||||
it("evicts the least recently accessed URL when an item is added to a full cache", async () => {
|
|
||||||
const cache = slopdb.check_cache
|
|
||||||
cache.cache_capacity = 2
|
|
||||||
|
|
||||||
const slop_url = new URL("https://sloppy-slop.com/sloparticle")
|
|
||||||
await cache.store(slop_url.toString())
|
|
||||||
|
|
||||||
mock_clock.tick(1000)
|
|
||||||
|
|
||||||
const slop_url2 = new URL("https://sloppy-slop.com/sloparticle2")
|
|
||||||
await cache.store(slop_url2.toString())
|
|
||||||
|
|
||||||
mock_clock.tick(1000)
|
|
||||||
|
|
||||||
const slop_url3 = new URL("https://sloppy-slop.com/sloparticle3")
|
|
||||||
await cache.store(slop_url3.toString())
|
|
||||||
|
|
||||||
const get_slop1 = await cache.get(slop_url.toString())
|
|
||||||
expect(get_slop1).toBeUndefined()
|
|
||||||
expect(cache.size).toEqual(2)
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe("CheckCache", () => {
|
||||||
|
let db
|
||||||
|
let slopdb
|
||||||
|
|
||||||
|
beforeAll(() => {
|
||||||
|
mock_clock.mockDate(new Date(2020, 1, 1))
|
||||||
|
})
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
await deleteDB("SlopDB")
|
||||||
|
slopdb = new SlopDB(2)
|
||||||
|
await slopdb.db_opened()
|
||||||
|
db = slopdb.db
|
||||||
|
})
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
db.close()
|
||||||
|
})
|
||||||
|
|
||||||
|
it("caches a checked url", async () => {
|
||||||
|
const cache = slopdb.check_cache
|
||||||
|
expect(cache).toBeInstanceOf(CheckCache)
|
||||||
|
|
||||||
|
const slop_url = new URL("https://sloppy-slop.com/sloparticle")
|
||||||
|
|
||||||
|
const new_item = await cache.store(slop_url.toString())
|
||||||
|
const store_time = Date.now()
|
||||||
|
|
||||||
|
mock_clock.tick(1000)
|
||||||
|
const cached_item = await cache.get(slop_url.toString())
|
||||||
|
|
||||||
|
expect(cached_item.url).toEqual(slop_url.toString())
|
||||||
|
expect(new_item.check_timestamp).toBeCloseTo(store_time)
|
||||||
|
expect(new_item.check_timestamp).toBeGreaterThan(store_time - MAX_TIMESTAMP_DIFFERENCE)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("updates a cached url's timestamp when it is accessed", async () => {
|
||||||
|
|
||||||
|
|
||||||
|
const cache = slopdb.check_cache
|
||||||
|
|
||||||
|
const slop_url = new URL("https://sloppy-slop.com/sloparticle")
|
||||||
|
await cache.store(slop_url.toString())
|
||||||
|
const store_time = Date.now()
|
||||||
|
|
||||||
|
mock_clock.tick(1000 * 30)
|
||||||
|
|
||||||
|
const cached_item = await cache.get(slop_url.toString())
|
||||||
|
expect(cached_item.check_timestamp).toBeGreaterThan(store_time + 10)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("evicts the least recently accessed URL when an item is added to a full cache", async () => {
|
||||||
|
const cache = slopdb.check_cache
|
||||||
|
cache.cache_capacity = 2
|
||||||
|
|
||||||
|
const slop_url = new URL("https://sloppy-slop.com/sloparticle")
|
||||||
|
await cache.store(slop_url.toString())
|
||||||
|
|
||||||
|
mock_clock.tick(1000)
|
||||||
|
|
||||||
|
const slop_url2 = new URL("https://sloppy-slop.com/sloparticle2")
|
||||||
|
await cache.store(slop_url2.toString())
|
||||||
|
|
||||||
|
mock_clock.tick(1000)
|
||||||
|
|
||||||
|
const slop_url3 = new URL("https://sloppy-slop.com/sloparticle3")
|
||||||
|
await cache.store(slop_url3.toString())
|
||||||
|
|
||||||
|
const get_slop1 = await cache.get(slop_url.toString())
|
||||||
|
expect(get_slop1).toBeUndefined()
|
||||||
|
expect(cache.size).toEqual(2)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe("SlopStore", () => {
|
||||||
|
let db
|
||||||
|
let slopdb
|
||||||
|
|
||||||
|
beforeAll(() => {
|
||||||
|
mock_clock.mockDate(new Date(2020, 1, 1))
|
||||||
|
})
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
await deleteDB("SlopDB")
|
||||||
|
slopdb = new SlopDB(2)
|
||||||
|
await slopdb.db_opened()
|
||||||
|
db = slopdb.db
|
||||||
|
})
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
db.close()
|
||||||
|
})
|
||||||
|
|
||||||
|
it("passes", () => {
|
||||||
|
expect(true).toBeTrue()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|||||||
@@ -55,6 +55,14 @@ export class SlopStore {
|
|||||||
constructor(slopdb: IDBPDatabase) {
|
constructor(slopdb: IDBPDatabase) {
|
||||||
this.slopdb = slopdb
|
this.slopdb = slopdb
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async store(domain: string, path: string) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async get(url: string) {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class SlopDB {
|
export class SlopDB {
|
||||||
|
|||||||
Reference in New Issue
Block a user