OverviewFilesCommitsIssuesDocsReleasesPeers

hyper-proto-peer / test / config-writers.test.js

50 lines · javascript ref:
// config: the WRITERS allowlist (Phase-2 write path). PEER_WRITERS env (comma-string) or a
// file `writers` (array/comma-string) normalize to a lowercased hex list, or null when absent.
// null ⇒ index.js does not register apply-write (secure default).

import test from 'brittle'
import { mkdtempSync, writeFileSync, rmSync } from 'bare-fs'
import { tmpdir } from 'bare-os'
import { join } from 'bare-path'
import { loadConfig } from '../lib/config.js'

function withEnv (overrides, fn) {
  const saved = {}
  for (const k of Object.keys(overrides)) { saved[k] = process.env[k]; if (overrides[k] == null) delete process.env[k]; else process.env[k] = overrides[k] }
  try { return fn() } finally {
    for (const k of Object.keys(overrides)) { if (saved[k] == null) delete process.env[k]; else process.env[k] = saved[k] }
  }
}

test('PEER_WRITERS env → normalized lowercased hex list (trim, drop empties)', (t) => {
  withEnv({ PEER_CONFIG: '/nonexistent/config.json', PEER_WRITERS: 'AABB, ccdd , ,EEFF,' }, () => {
    t.alike(loadConfig().writers, ['aabb', 'ccdd', 'eeff'], 'trimmed, lowercased, empties dropped')
  })
})

test('no writers config → null (apply-write stays off)', (t) => {
  withEnv({ PEER_CONFIG: '/nonexistent/config.json', PEER_WRITERS: null }, () => {
    t.is(loadConfig().writers, null, 'absent → null')
  })
})

test('empty PEER_WRITERS → null (not an empty allowlist)', (t) => {
  withEnv({ PEER_CONFIG: '/nonexistent/config.json', PEER_WRITERS: ' , ,' }, () => {
    t.is(loadConfig().writers, null, 'only-separators → null')
  })
})

test('file `writers` array is honored + env wins over file', (t) => {
  const dir = mkdtempSync(join(tmpdir(), 'hpp-cfg-'))
  const cfgPath = join(dir, 'config.json')
  writeFileSync(cfgPath, JSON.stringify({ handle: 'x.7rnx.net', writers: ['DD11', 'ee22'] }))
  t.teardown(() => rmSync(dir, { recursive: true, force: true }))

  withEnv({ PEER_CONFIG: cfgPath, PEER_WRITERS: null }, () => {
    t.alike(loadConfig().writers, ['dd11', 'ee22'], 'file array → lowercased list')
  })
  withEnv({ PEER_CONFIG: cfgPath, PEER_WRITERS: 'ff99' }, () => {
    t.alike(loadConfig().writers, ['ff99'], 'env PEER_WRITERS overrides the file writers')
  })
})