UNPKG

bbqpool-stratum

Version:

High performance Stratum poolserver in Node.js. Optimized to build with GCC 10 and O3 / bugfixes

154 lines (136 loc) 5.53 kB
/* * * Peer (Updated) * */ const Peer = require('../main/peer'); const poolConfig = { 'p2p': { 'enabled': true, 'host': '127.0.0.1', 'port': '8332', }, 'settings': { 'verack': false, 'validConnectionConfig': true, 'testnet': false, }, 'primary': { 'coin': { 'mainnet': { 'peerMagic': 'f9beb4d9', }, 'testnet': { 'peerMagic': '0b110907', }, }, }, }; //////////////////////////////////////////////////////////////////////////////// describe('Test peer functionality', () => { let configCopy, output1, output2; beforeEach(() => { configCopy = JSON.parse(JSON.stringify(poolConfig)); }); test('Test initialization of peer socket', () => { const peer = new Peer(configCopy); const client = peer.setupPeer(); expect(typeof client).toBe('object'); expect(Object.keys(client._events).length).toBe(5); }); test('Test peer magic functionality', () => { configCopy.settings.testnet = true; const peer = new Peer(configCopy); expect(peer.magic).toEqual(Buffer.from(configCopy.primary.coin.testnet.peerMagic, 'hex')); }); test('Test peer socket events [1]', () => { configCopy.settings.verack = true; const peer = new Peer(configCopy); peer.on('disconnected', () => output1 = 'Disconnected'); const client = peer.setupPeer(); client.emit('close'); expect(output1).toBe('Disconnected'); }); test('Test peer socket events [2]', () => { configCopy.settings.validConnectionConfig = true; const peer = new Peer(configCopy); peer.on('connectionRejected', () => output1 = 'Connection Rejected'); const client = peer.setupPeer(); client.emit('close'); expect(output1).toBe('Connection Rejected'); }); test('Test peer socket events [3]', () => { const peer = new Peer(configCopy); peer.on('connectionFailed', () => output1 = 'Connection Failed'); const client = peer.setupPeer(); client.emit('error', { code: 'ECONNREFUSED' }); expect(output1).toBe('Connection Failed'); }); test('Test peer socket events [4]', () => { const peer = new Peer(configCopy); peer.on('socketError', () => output1 = 'Socket Error'); const client = peer.setupPeer(); client.emit('error', {}); expect(output1).toBe('Socket Error'); }); test('Test peer socket inventory', () => { const peer = new Peer(configCopy); peer.on('blockFound', () => output1 = 'Block Found'); peer.handleInventory(Buffer.from('0100000000', 'hex')); peer.handleInventory(Buffer.from('0101000000', 'hex')); peer.handleInventory(Buffer.from('0102000000', 'hex')); expect(output1).toBe('Block Found'); }); test('Test peer socket messaging [1]', () => { const peer = new Peer(configCopy); const inv = Buffer.from('696e76000000000000000000', 'hex'); const payload = Buffer.from('0102000000', 'hex'); peer.on('peerMessage', (message) => output1 = message); peer.on('blockFound', () => output2 = 'Block Found'); peer.handleMessage(inv.toString(), payload); expect(output1.command).toStrictEqual(inv.toString()); expect(output1.payload).toStrictEqual(payload); expect(output2).toBe('Block Found'); }); test('Test peer socket messaging [2]', () => { configCopy.settings.verack = false; const peer = new Peer(configCopy); const verack = Buffer.from('76657261636b000000000000', 'hex'); const payload = Buffer.from('0100000000', 'hex'); peer.on('peerMessage', (message) => output1 = message); peer.on('connected', () => output2 = 'Connected'); peer.handleMessage(verack.toString(), payload); expect(output1.command).toStrictEqual(verack.toString()); expect(output1.payload).toStrictEqual(payload); expect(output2).toBe('Connected'); }); test('Test peer socket messaging [3]', () => { const peer = new Peer(configCopy); const version = Buffer.from('76657273696f6e0000000000', 'hex'); const payload = Buffer.from('0100000000', 'hex'); peer.on('peerMessage', (message) => output1 = message); peer.on('sentMessage', (message) => output2 = message); peer.handleMessage(version.toString(), payload); expect(output1.command).toStrictEqual(version.toString()); expect(output1.payload).toStrictEqual(payload); expect(output2).toStrictEqual(Buffer.from('f9beb4d976657261636b000000000000000000005df6e0e2', 'hex')); }); test('Test peer socket messaging [4]', () => { const peer = new Peer(configCopy); const other = Buffer.from('00', 'hex'); const payload = Buffer.from('0100000000', 'hex'); peer.on('peerMessage', (message) => output1 = message); peer.handleMessage(other.toString(), payload); expect(output1.command).toStrictEqual(other.toString()); expect(output1.payload).toStrictEqual(payload); }); test('Test peer version messaging', () => { const peer = new Peer(configCopy); peer.on('sentMessage', (message) => output1 = message); peer.sendVersion(); expect(output1.slice(0, 20)).toStrictEqual(Buffer.from('f9beb4d976657273696f6e000000000064000000', 'hex')); expect(output1.slice(24, 36)).toStrictEqual(Buffer.from('000000000100000000000000', 'hex')); expect(output1.slice(40, 96)).toStrictEqual(Buffer.from('00000000010000000000000000000000000000000000ffff000000000000010000000000000000000000000000000000ffff000000000000', 'hex')); expect(output1.slice(104)).toStrictEqual(Buffer.from('0e2f6e6f64652d7374726174756d2f0000000000', 'hex')); }); });