UNPKG

htcp-purge

Version:
127 lines (116 loc) 2.95 kB
'use strict'; const HTCPPurger = require( '../index' ); const assert = require( 'assert' ); const dgram = require( 'dgram' ); describe( 'Protocol tests', () => { const referenceBuffer = Buffer.from( [ 0, 44, 0, 0, 0, 38, 4, 0, 0, 0, 0, 1, 0, 0, 0, 4, 72, 69, 65, 68, 0, 8, 116, 101, 115, 116, 46, 99, 111, 109, 0, 8, 72, 84, 84, 80, 47, 49, 46, 48, 0, 0, 0, 2 ] ); const referenceBuffer2 = Buffer.from( [ 0, 44, 0, 0, 0, 38, 4, 0, 0, 0, 0, 2, 0, 0, 0, 4, 72, 69, 65, 68, 0, 8, 116, 101, 115, 116, 46, 99, 111, 109, 0, 8, 72, 84, 84, 80, 47, 49, 46, 48, 0, 0, 0, 2 ] ); it( 'should construct correct datagram', () => { const purger = new HTCPPurger( { routes: [ { host: 'default', port: 4827 } ] } ); const resultDatagram = purger._constructHTCPRequest( 'test.com' ); assert.deepEqual( referenceBuffer, resultDatagram ); } ); it( 'should lookup route by regex', () => { const purger = new HTCPPurger( { routes: [ { rule: '/https?:\\/\\/test\\.com/', host: '123.123.123.123', port: 1234 }, { host: 'default', port: 1234 } ] } ); const route = purger._lookupRoute( 'http://test.com' ); assert.deepEqual( '123.123.123.123', route.host ); assert.deepEqual( 1234, route.port ); const route2 = purger._lookupRoute( 'http://test2.com' ); assert.deepEqual( 'default', route2.host ); assert.deepEqual( 1234, route2.port ); } ); it( 'should send datagrams', function ( done ) { this.timeout( 5000 ); const purger = new HTCPPurger( { routes: [ { host: 'localhost', port: 12345 } ] } ); const server = dgram.createSocket( 'udp4' ); server.on( 'message', ( msg ) => { assert.deepEqual( referenceBuffer, msg ); done(); } ); server.bind( 12345 ); purger .bind() .then( () => purger.purge( [ 'test.com' ] ) ) .delay( 100 ) .finally( () => { purger.close(); server.close(); } ); } ); it( 'should increase seq num of datagrams', ( done ) => { const purger = new HTCPPurger( { routes: [ { host: 'localhost', port: 12346 } ] } ); const server = dgram.createSocket( 'udp4' ); let msgIdx = 1; server.on( 'message', ( msg ) => { if ( msgIdx === 1 ) { assert.deepEqual( referenceBuffer, msg ); msgIdx++; } else { assert.deepEqual( referenceBuffer2, msg ); done(); } } ); server.bind( 12346 ); purger.bind() .then( () => purger.purge( [ 'test.com' ] ) ) .delay( 100 ) .then( () => purger.purge( [ 'test.com' ] ) ) .delay( 100 ) .then( () => { purger.close(); server.close(); } ); } ); it( 'should reset seqReqId after max 32-int is reached', () => { const purger = new HTCPPurger( { routes: [ { host: 'localhost', port: 999 } ] } ); purger.seqReqId = 0xFFFFFFFF + 1; purger._constructHTCPRequest( 'test.com' ); assert.equal( purger.seqReqId, 1 ); } ); } );