UNPKG

peer-emitter

Version:

acknowledgeable events

206 lines (143 loc) 4.32 kB
var test = require('tap').test; var DuplexPair = require('./utils/duplex-pair'); var PeerEmitter = require('..'); function xtest() {} function rand() { return Math.random().toString(); } test('blind streaming', function(t) { var pair = DuplexPair(); var apple = rand(); receiver(pair.a); sender(pair.b); function sender(duplexStream) { var emitter = PeerEmitter(duplexStream); var stream = emitter.WriteStream('apples'); stream.write(apple); } function receiver(duplexStream) { var emitter = PeerEmitter(duplexStream); var stream = emitter.ReadStream('apples'); stream.on('data', function(d) { t.equals(d, apple, 'data is correct'); t.end(); }); } }); test('sender ack stream', function(t) { var pair = DuplexPair(); var apple = rand(); receiver(pair.a); sender(pair.b); function sender(duplexStream) { var emitter = PeerEmitter(duplexStream); var stream = emitter.WriteStream('apples'); var ackStream = stream.AckStream(); var apple = rand(); stream.write(apple); ackStream.on('data', function(d) { t.equals(d, apple, 'ack provides sent objects'); t.end(); }); } function receiver(duplexStream) { var emitter = PeerEmitter(duplexStream); var stream = emitter.ReadStream('apples'); stream.on('data', function(_) { // nothing to do here :/ }); } }); test('sender timeout stream', function(t) { var pair = DuplexPair(); var apple = rand(); sender(pair.b); function sender(duplexStream) { var emitter = PeerEmitter(duplexStream, { timeout: 20 }); var stream = emitter.WriteStream('apples'); var timeoutStream = stream.TimeoutStream(); var apple = rand(); stream.write(apple); timeoutStream.on('data', function(d) { t.equals(d, apple, 'ack provides sent objects'); t.end(); }); } }); test('can only get one ack and on timeout stream per stream', function(t) { var pair = DuplexPair(); var emitter = PeerEmitter(pair.a); var writeStream = emitter.WriteStream('apples'); var readStream = emitter.ReadStream('apples'); writeStream.AckStream(); try { writeStream.AckStream(); t.fail('should have thrown an error'); } catch (e) {} writeStream.TimeoutStream(); try { writeStream.TimeoutStream(); t.fail('should have thrown an error'); } catch (e) {} readStream.AckStream(); try { readStream.AckStream(); t.fail('should have thrown an error'); } catch (e) {} t.end(); }); test('stream specific timeout', function(t) { var pair = DuplexPair(); var emitter = PeerEmitter(pair.a); var stream = emitter.WriteStream('apples'); var timeoutStream = stream.TimeoutStream({ timeout: 20 }); timeoutStream.on('data', function(d) { t.end(); }); stream.write(rand()); setTimeout(function() { t.fail('took too long to timeout'); t.end(); }, 80); }); test('receiver semantic ack stream', function(t) { var pair = DuplexPair(); var ackedApple = rand(); var timeoutApple = rand(); receiver(pair.a); sender(pair.b); function sender(duplexStream) { var emitter = PeerEmitter(duplexStream); var stream = emitter.WriteStream('apples'); var ackStream = stream.AckStream(); var timeoutStream = stream.TimeoutStream({ timeout: 20 }); var acked; stream.write(ackedApple) stream.write(timeoutApple); ackStream.on('data', function(d) { t.equals(d, ackedApple, 'acked correct data'); acked = true; }); timeoutStream.on('data', function(d) { t.ok(acked, 'did ack'); t.equals(d, timeoutApple, 'timedout correct data'); t.end(); }); } function receiver(duplexStream) { var emitter = PeerEmitter(duplexStream); var stream = emitter.ReadStream('apples'); var ackStream = stream.AckStream(); stream.on('data', function(d) { if (d === timeoutApple) return; ackStream.write(d); }); } }); test('receiver throws on unknown object', function(t) { var pair = DuplexPair(); var emitter = PeerEmitter(pair.a); var readStream = emitter.ReadStream('apples'); var ackStream = readStream.AckStream(); try { ackStream.write(rand()); t.fail('should have thrown an error'); } catch (e) {} t.end(); });