OverviewFilesCommitsIssuesDocsReleasesPeers

hyper-orgs / test / record-meta.test.js

48 lines · javascript ref:
import test from 'brittle'
import Corestore from 'corestore'
import { mkdtempSync } from 'fs'
import { join } from 'path'
import { tmpdir } from 'os'
import { HyperOrgs } from '../index.js'

function tmpStore () {
  const dir = mkdtempSync(join(tmpdir(), 'hyper-orgs-meta-'))
  return new Corestore(dir)
}

async function makeOrgs (t, namespace = 'meta') {
  const store = tmpStore()
  const orgs = new HyperOrgs(store, { namespace })
  await orgs.ready()
  t.teardown(async () => {
    try { await orgs.close() } catch {}
    try { await store.close() } catch {}
  })
  return orgs
}

// setMeta/getMeta/listMeta back the org-scoped peer-coordinate announce: a
// writer publishes meta:peer:<serverKey> -> { serverKey, repoEventLog } into
// the org autobase so every org peer can boot a reverse RepoPuller toward it.
test('setMeta / getMeta / listMeta — peer coordinates round-trip', async (t) => {
  const orgs = await makeOrgs(t, 'meta-1')
  await orgs.create('house', 'group')

  const coordsA = { serverKey: 'a'.repeat(64), repoEventLog: 'c'.repeat(64) }
  const coordsB = { serverKey: 'b'.repeat(64), repoEventLog: 'd'.repeat(64) }
  await orgs.setMeta('house', 'peer:' + coordsA.serverKey, coordsA)
  await orgs.setMeta('house', 'peer:' + coordsB.serverKey, coordsB)
  // a non-peer meta entry must NOT show up under the 'peer:' prefix scan
  await orgs.setMeta('house', 'schema-version', 2)

  t.alike(await orgs.getMeta('house', 'peer:' + coordsA.serverKey), coordsA, 'getMeta returns the stored value')
  t.is(await orgs.getMeta('house', 'nope'), null, 'missing meta → null')

  const peers = await orgs.listMeta('house', 'peer:')
  t.is(peers.length, 2, 'listMeta returns only the peer: entries (schema-version excluded)')
  const byServer = new Map(peers.map(p => [p.value.serverKey, p.value]))
  t.alike(byServer.get('a'.repeat(64)), coordsA, 'peer A coords intact')
  t.alike(byServer.get('b'.repeat(64)), coordsB, 'peer B coords intact')
  t.ok(peers.every(p => p.key.startsWith('peer:')), 'meta: view-prefix stripped, peer: retained')
})