OverviewFilesCommitsIssuesDocsReleasesPeers

p2p-bridge / test-connect.js

79 lines · javascript ref:
#!/usr/bin/env node
'use strict'

// Minimal same-machine Hyperswarm connectivity test
// Tests the fix: testnet + flushed()

const Hyperswarm = require('hyperswarm')
const createTestnet = require('@hyperswarm/testnet')
const crypto = require('hypercore-crypto')
const b4a = require('b4a')

async function test () {
  console.log('Creating testnet with 3 DHT bootstrap nodes...')
  const testnet = await createTestnet(3)
  console.log('Testnet ready:', testnet.bootstrap.map(n => n.host + ':' + n.port))

  const topic = crypto.hash(b4a.from('atomspace-bridge-test'))

  // Server swarm
  const server = new Hyperswarm({ bootstrap: testnet.bootstrap })
  server.on('connection', (conn, info) => {
    console.log('[server] Got connection from', b4a.toString(info.publicKey, 'hex').slice(0, 12))
    conn.on('data', d => console.log('[server] Received:', d.toString()))
    conn.write('hello from server')
    conn.on('error', () => {})
  })

  // Client swarm
  const client = new Hyperswarm({ bootstrap: testnet.bootstrap })
  client.on('connection', (conn, info) => {
    console.log('[client] Got connection to', b4a.toString(info.publicKey, 'hex').slice(0, 12))
    conn.on('data', d => console.log('[client] Received:', d.toString()))
    conn.write('hello from client')
    conn.on('error', () => {})
  })

  // Server: join + wait for DHT announce
  console.log('\nServer joining topic...')
  const t0 = Date.now()
  const discovery = server.join(topic, { server: true, client: false })
  await discovery.flushed()
  console.log('Server announced on DHT (' + (Date.now() - t0) + 'ms)')

  // Client: join + lookup
  console.log('Client joining topic...')
  const t1 = Date.now()
  client.join(topic, { server: false, client: true })
  await client.flush()
  console.log('Client connected (' + (Date.now() - t1) + 'ms)')

  // Wait a beat for both connection events to fire
  await new Promise(r => setTimeout(r, 500))

  console.log('\nServer connections:', server.connections.size)
  console.log('Client connections:', client.connections.size)

  if (server.connections.size > 0 && client.connections.size > 0) {
    console.log('\n✓ SUCCESS — peers connected!')
  } else {
    console.log('\n✗ FAILED — no connections')
  }

  // Give time for data exchange
  await new Promise(r => setTimeout(r, 500))

  // Cleanup
  await server.destroy()
  await client.destroy()
  await testnet.destroy()

  console.log('\nDone.')
  process.exit(0)
}

test().catch(err => {
  console.error('Test failed:', err)
  process.exit(1)
})