Skip to content

Commit

Permalink
move to tape tests for better debugging
Browse files Browse the repository at this point in the history
  • Loading branch information
mafintosh committed Sep 23, 2019
1 parent 9f811e0 commit 25b2425
Show file tree
Hide file tree
Showing 3 changed files with 143 additions and 109 deletions.
4 changes: 2 additions & 2 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ var eos = function(stream, opts, callback) {
};

var onclose = function() {
if (readable && !(rs && rs.ended)) return callback.call(stream, new Error('premature close'));
if (writable && !(ws && ws.ended)) return callback.call(stream, new Error('premature close'));
if (stream.destroyed || (readable && !(rs && rs.ended))) return callback.call(stream, new Error('premature close'));
if (stream.destroyed || (writable && !(ws && ws.ended))) return callback.call(stream, new Error('premature close'));
};

var onrequest = function() {
Expand Down
5 changes: 4 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,8 @@
"homepage": "https://github.com/mafintosh/end-of-stream",
"main": "index.js",
"author": "Mathias Buus <mathiasbuus@gmail.com>",
"license": "MIT"
"license": "MIT",
"devDependencies": {
"tape": "^4.11.0"
}
}
243 changes: 137 additions & 106 deletions test.js
Original file line number Diff line number Diff line change
@@ -1,108 +1,139 @@
var assert = require('assert');
var eos = require('./index');

var expected = 10;
var fs = require('fs');
var cp = require('child_process');
var net = require('net');
var http = require('http');

var ws = fs.createWriteStream('/dev/null');
eos(ws, function(err) {
expected--;
assert(!!err);
assert(this === ws);
if (!expected) process.exit(0);
});
ws.destroy();

var rs1 = fs.createReadStream('/dev/urandom');
eos(rs1, function(err) {
expected--;
assert(!!err);
assert(this === rs1);
if (!expected) process.exit(0);
});
rs1.destroy();

var rs2 = fs.createReadStream(__filename);
eos(rs2, function(err) {
expected--;
assert.ifError(err);
assert(this === rs2);
if (!expected) process.exit(0);
});
rs2.pipe(fs.createWriteStream('/dev/null'));

var rs3 = fs.createReadStream(__filename);
eos(rs3, function(err) {
assert.ifError(err);
assert(this === rs);
throw new Error('no go');
})();
rs3.pipe(fs.createWriteStream('/dev/null'));

var exec = cp.exec('echo hello world');
eos(exec, function(err) {
expected--;
assert.ifError(err);
assert(this === exec);
if (!expected) process.exit(0);
});

var spawn = cp.spawn('echo', ['hello world']);
eos(spawn, function(err) {
expected--;
assert.ifError(err);
assert(this === spawn);
if (!expected) process.exit(0);
});

var socket = net.connect(50000);
eos(socket, function(err) {
expected--;
assert(!!err);
assert(this === socket);
if (!expected) process.exit(0);
});

var server = net.createServer(function(socket) {
eos(socket, function(err) {
expected--;
assert(!!err);
assert(this === socket);
if (!expected) process.exit(0);
});
socket.destroy();
}).listen(30000, function() {
var socket = net.connect(30000);
var tape = require('tape')
var eos = require('./index')

var fs = require('fs')
var cp = require('child_process')
var net = require('net')
var http = require('http')
var stream = require('stream')

tape('fs writestream destory', function (t) {
var ws = fs.createWriteStream('/dev/null');

eos(ws, function(err) {
t.ok(!!err)
t.ok(this === ws)
t.end()
})

ws.destroy();
})

tape('fs readstream destroy', function (t) {
var rs1 = fs.createReadStream('/dev/urandom');

eos(rs1, function(err) {
t.ok(!!err)
t.ok(this === rs1)
t.end()
})

rs1.destroy()
})

tape('fs readstream pipe', function (t) {
var rs2 = fs.createReadStream(__filename)

eos(rs2, function(err) {
t.ifError(err)
t.ok(this === rs2)
t.end()
})

rs2.pipe(fs.createWriteStream('/dev/null'))
})

tape('fs readstream cancel', function (t) {
var rs3 = fs.createReadStream(__filename)

eos(rs3, function(err) {
t.fail('should not enter')
})()

rs3.pipe(fs.createWriteStream('/dev/null'))
rs3.on('end', function () {
t.end()
})
})

tape('exec', function (t) {
var exec = cp.exec('echo hello world')

eos(exec, function (err) {
t.ifError(err)
t.ok(this === exec)
t.end()
})
})

tape('spawn', function (t) {
var spawn = cp.spawn('echo', ['hello world']);
eos(spawn, function (err) {
t.ifError(err)
t.ok(this === spawn)
t.end()
})
})

tape('tcp socket', function (t) {
t.plan(5)

var socket = net.connect(50000)

eos(socket, function(err) {
expected--;
assert.ifError(err);
assert(this === socket);
if (!expected) process.exit(0);
});
});

var server2 = http.createServer(function(req, res) {
eos(res, function(err) {
expected--;
assert.ifError(err);
});
res.end();
}).listen(function() {
var port = server2.address().port;
http.get('http://localhost:' + port, function(res) {
t.ok(!!err)
t.ok(this === socket)
})

var server = net.createServer(function (socket) {
eos(socket, function(err) {
t.ok(!!err)
t.ok(this === socket)
})
socket.destroy()
}).listen(30000, function () {
var socket = net.connect(30000)
eos(socket, function() {
t.ok(this === socket)
server.close()
})
})
})

tape('http', function (t) {
t.plan(2)

var server2 = http.createServer(function(req, res) {
eos(res, function(err) {
expected--;
assert.ifError(err);
server2.close();
});
res.resume();
});
});

setTimeout(function() {
assert(expected === 0);
process.exit(0);
}, 1000);
t.ifError(err)
})
res.end()
}).listen(function() {
var port = server2.address().port
http.get('http://localhost:' + port, function(res) {
eos(res, function(err) {
t.ifError(err)
server2.close()
})
res.resume()
})
})
})

tape('end() and emit(close)', function (t) {
if (!stream.Writable) return t.end()
var ws = new stream.Writable()

ws._write = function (data, enc, cb) {
process.nextTick(cb)
}

eos(ws, function (err) {
t.error(err, 'no error')
t.end()
})

ws.write('hi')
ws.end()
ws.emit('close')
})

0 comments on commit 25b2425

Please sign in to comment.