Files
peardata/test/peer-cache.test.js
T
Raven Scott a7648dc090
CI / test (push) Successful in 1m1s
Release rolling / release (push) Successful in 6m59s
Updates
2026-07-18 20:32:05 -04:00

83 lines
2.1 KiB
JavaScript

import test from 'brittle'
import fs from 'fs'
import os from 'os'
import path from 'path'
import {
normalizePeerEntry,
parsePeersPayload,
loadPeers,
savePeers,
upsertPeer,
removePeer,
getLastActivePeerId,
setLastActivePeerId,
getPeersCachePath,
} from '../client/peerCache.js'
function withHome(fn) {
const prev = process.env.PEARDATA_HOME
const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'peardata-peers-'))
process.env.PEARDATA_HOME = tmp
try {
return fn(tmp)
} finally {
if (prev === undefined) delete process.env.PEARDATA_HOME
else process.env.PEARDATA_HOME = prev
try {
fs.rmSync(tmp, { recursive: true, force: true })
} catch {
// ignore
}
}
}
test('normalizePeerEntry accepts hex keys', (t) => {
const hex = 'a'.repeat(64)
const e = normalizePeerEntry({ publicKeyHex: hex, alias: 'prod' })
t.is(e.publicKeyHex, hex)
t.is(e.alias, 'prod')
t.absent(normalizePeerEntry({ publicKeyHex: 'nope' }))
})
test('parsePeersPayload reads envelope + bookmarks legacy', (t) => {
const hex = 'b'.repeat(64)
const fromEnv = parsePeersPayload({
version: 1,
peers: { [hex]: { publicKeyHex: hex, alias: 'x' } },
})
t.ok(fromEnv[hex])
const fromBm = parsePeersPayload({
bookmarks: [{ publicKeyHex: hex, alias: 'y' }],
})
t.is(fromBm[hex].alias, 'y')
})
test('upsertPeer + active id round-trip', (t) => {
withHome(() => {
const hex = 'c'.repeat(64)
upsertPeer({ publicKeyHex: hex, alias: 'lab' }, { makeActive: true })
const peers = loadPeers()
t.is(peers[hex].alias, 'lab')
t.is(getLastActivePeerId(), hex)
t.ok(fs.existsSync(getPeersCachePath()))
setLastActivePeerId(null)
t.absent(getLastActivePeerId())
removePeer(hex)
t.absent(loadPeers()[hex])
})
})
test('savePeers refuses accidental wipe', (t) => {
withHome(() => {
const hex = 'd'.repeat(64)
upsertPeer({ publicKeyHex: hex }, { makeActive: true })
const ok = savePeers({})
t.is(ok, false)
t.ok(loadPeers()[hex], 'peer still present after refused wipe')
savePeers({}, { force: true, activePeerId: null })
t.is(Object.keys(loadPeers()).length, 0)
})
})