UNPKG

datoms-protocol

Version:

An integrated implementation of hypercore protocol with both stream and state machine

111 lines (95 loc) 2.94 kB
const { Stream, Protocol, createProtocolStream } = require('./index') const assert = require('assert') const b4a = require('b4a') // Test Stream implementation function testStream() { console.log('Testing Stream implementation...') const streamA = createProtocolStream(true) const streamB = createProtocolStream(false) let received = false const key = b4a.from('deadbeefdeadbeefdeadbeefdeadbeef', 'hex') const channel = streamA.open(key) streamB.open(key, { ondata(message) { received = true assert.strictEqual(message.value.toString(), '{ block: 42 }') console.log('✓ Stream test passed') } }) channel.data({ index: 1, value: Buffer.from('{ block: 42 }') }) // Connect the streams streamA.pipe(streamB).pipe(streamA) return new Promise(resolve => { setTimeout(() => { assert(received, 'Should have received data') resolve() }, 2000) // 增加超时时间到 2 秒 }) } // Test Protocol implementation function testProtocol() { console.log('Testing Protocol implementation...') let received = false let handshakeCompleted = false const protocolA = new Protocol(true, { onhandshake() { console.log('Protocol A handshake completed') handshakeCompleted = true }, send(data) { console.log('Protocol A sending data:', data.length, 'bytes') protocolB.recv(data) } }) const protocolB = new Protocol(false, { onhandshake() { console.log('Protocol B handshake completed') }, onrequest(channel, message) { received = true console.log('Protocol B received request on channel', channel, ':', message) assert.strictEqual(message.index, 42) console.log('✓ Protocol test passed') }, send(data) { console.log('Protocol B sending data:', data.length, 'bytes') protocolA.recv(data) } }) // 等待握手完成后再发送请求 return new Promise(resolve => { // 检查握手是否完成的函数 function checkHandshake() { if (handshakeCompleted) { console.log('Handshake completed, sending test request') // 发送测试请求 protocolA.request(10, { index: 42 }) // 等待接收请求 setTimeout(() => { assert(received, 'Should have received request') console.log('Test completed successfully!') resolve() }, 1000) // 增加等待时间到 1 秒 } else { console.log('Waiting for handshake to complete...') setTimeout(checkHandshake, 500) // 每 500ms 检查一次 } } // 开始检查握手 setTimeout(checkHandshake, 500) }) } // Run tests async function runTests() { try { await testProtocol() await testStream() console.log('All tests passed!') } catch (err) { console.error('Test failed:', err) process.exit(1) } } runTests()