OverviewFilesCommitsIssuesDocsReleasesPeers

wirecore / test / p2p-connection.test.js

102 lines · javascript ref:
#!/usr/bin/env node
/**
 * Test P2P Connection with Trystero
 * Simulates two peers connecting to verify TURN server works
 */

import { joinRoom } from 'trystero/torrent'
import wrtc from '@roamhq/wrtc'

console.log('🧪 Testing P2P connection with TURN server...\n')

const config = {
  appId: 'wirecore-v1',
  password: 'wirecore-p2p-2026',
  rtcConfig: {
    iceServers: [
      { urls: 'stun:stun.l.google.com:19302' },
      { urls: 'stun:stun.cloudflare.com:3478' },
      {
        urls: 'turn:142.93.23.112:3478',
        username: 'wirecore',
        credential: 'wirecore8261a6a559ce533c'
      }
    ]
  },
  wrtc // Use Node.js WebRTC implementation
}

let peer1Connected = false
let peer2Connected = false

// Peer 1
console.log('Creating Peer 1...')
const room1 = joinRoom(config, 'wirecorev1-test')

room1.onPeerJoin(peerId => {
  console.log('✅ Peer 1: Connected to peer:', peerId.substring(0, 8) + '...')
  peer1Connected = true
  checkComplete()
})

room1.onPeerLeave(peerId => {
  console.log('❌ Peer 1: Peer left:', peerId.substring(0, 8) + '...')
})

// Peer 2
console.log('Creating Peer 2...')
const room2 = joinRoom(config, 'wirecorev1-test')

room2.onPeerJoin(peerId => {
  console.log('✅ Peer 2: Connected to peer:', peerId.substring(0, 8) + '...')
  peer2Connected = true
  checkComplete()
})

room2.onPeerLeave(peerId => {
  console.log('❌ Peer 2: Peer left:', peerId.substring(0, 8) + '...')
})

console.log('\n⏳ Waiting for peers to connect (60 seconds timeout)...\n')

let checkCount = 0
function checkComplete() {
  if (peer1Connected && peer2Connected) {
    console.log('\n🎉 SUCCESS! Both peers connected via P2P!')
    console.log('✅ TURN server is working correctly\n')
    process.exit(0)
  }
}

// Check periodically
const interval = setInterval(() => {
  checkCount++
  if (checkCount % 5 === 0) {
    console.log(`Still waiting... (${checkCount}s elapsed)`)
    console.log(`  Peer 1 connected: ${peer1Connected}`)
    console.log(`  Peer 2 connected: ${peer2Connected}`)
  }
}, 1000)

// Timeout after 60 seconds
setTimeout(() => {
  clearInterval(interval)
  console.log('\n⏱️  Timeout reached (60 seconds)')
  console.log(`  Peer 1 connected: ${peer1Connected}`)
  console.log(`  Peer 2 connected: ${peer2Connected}`)

  if (!peer1Connected || !peer2Connected) {
    console.log('\n❌ FAILED: Peers did not connect')
    console.log('Check TURN server logs for errors')
    process.exit(1)
  }
}, 60000)

// Handle cleanup
process.on('SIGINT', () => {
  console.log('\n\n🛑 Test interrupted')
  room1.leave()
  room2.leave()
  process.exit(1)
})