83 lines
2.1 KiB
JavaScript
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)
|
|
})
|
|
})
|