summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorFedor Indutny <fedor@indutny.com>2016-10-12 20:39:37 +0000
committerFedor Indutny <fedor@indutny.com>2016-10-14 13:38:56 +0000
commit31196eaa936e38a1a2bc189f4fcd5f633d814c13 (patch)
tree4fc979d0d8cd465b9e8e08f78ac00e20fee913b9 /test
parent0ed633801671af95c0dad1d1320b230ecbef6483 (diff)
downloadandroid-node-v8-31196eaa936e38a1a2bc189f4fcd5f633d814c13.tar.gz
android-node-v8-31196eaa936e38a1a2bc189f4fcd5f633d814c13.tar.bz2
android-node-v8-31196eaa936e38a1a2bc189f4fcd5f633d814c13.zip
net: fix ambiguity in EOF handling
`end` MUST always be emitted **before** `close`. However, if a handle will invoke `uv_close_cb` immediately, or in the same JS tick - `close` may be emitted first. PR-URL: https://github.com/nodejs/node/pull/9066 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Ilkka Myller <ilkka.myller@nodefield.com>
Diffstat (limited to 'test')
-rw-r--r--test/parallel/test-net-end-close.js26
1 files changed, 26 insertions, 0 deletions
diff --git a/test/parallel/test-net-end-close.js b/test/parallel/test-net-end-close.js
new file mode 100644
index 0000000000..d9f33fd7d8
--- /dev/null
+++ b/test/parallel/test-net-end-close.js
@@ -0,0 +1,26 @@
+'use strict';
+require('../common');
+const assert = require('assert');
+const net = require('net');
+
+const uv = process.binding('uv');
+
+const s = new net.Socket({
+ handle: {
+ readStart: function() {
+ process.nextTick(() => this.onread(uv.UV_EOF, null));
+ },
+ close: (cb) => process.nextTick(cb)
+ },
+ writable: false
+});
+s.resume();
+
+const events = [];
+
+s.on('end', () => events.push('end'));
+s.on('close', () => events.push('close'));
+
+process.on('exit', () => {
+ assert.deepStrictEqual(events, [ 'end', 'close' ]);
+});