Skip to content

Commit 1fac431

Browse files
captainsafiaMylesBorins
authored andcommitted
test: add tests for clearBuffer state machine
This checks to see that clearBuffer appropriately decrements the correct values in _writableState when clearBuffer is invoked in end. Fixes: #8687 PR-URL: #9922 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Italo A. Casas <me@italoacasas.com>
1 parent 37a3622 commit 1fac431

1 file changed

Lines changed: 57 additions & 0 deletions

File tree

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
'use strict';
2+
3+
constcommon=require('../common');
4+
constassert=require('assert');
5+
conststream=require('stream');
6+
7+
constwritable=newstream.Writable();
8+
9+
writable._writev=common.mustCall((chunks,cb)=>{
10+
assert.equal(chunks.length,2,'two chunks to write');
11+
cb();
12+
},1);
13+
14+
writable._write=common.mustCall((chunk,encoding,cb)=>{
15+
cb();
16+
},1);
17+
18+
// first cork
19+
writable.cork();
20+
assert.strictEqual(writable._writableState.corked,1);
21+
assert.strictEqual(writable._writableState.bufferedRequestCount,0);
22+
23+
// cork again
24+
writable.cork();
25+
assert.strictEqual(writable._writableState.corked,2);
26+
27+
// the first chunk is buffered
28+
writable.write('first chunk');
29+
assert.strictEqual(writable._writableState.bufferedRequestCount,1);
30+
31+
// first uncork does nothing
32+
writable.uncork();
33+
assert.strictEqual(writable._writableState.corked,1);
34+
assert.strictEqual(writable._writableState.bufferedRequestCount,1);
35+
36+
process.nextTick(uncork);
37+
38+
// the second chunk is buffered, because we uncork at the end of tick
39+
writable.write('second chunk');
40+
assert.strictEqual(writable._writableState.corked,1);
41+
assert.strictEqual(writable._writableState.bufferedRequestCount,2);
42+
43+
functionuncork(){
44+
// second uncork flushes the buffer
45+
writable.uncork();
46+
assert.strictEqual(writable._writableState.corked,0);
47+
assert.strictEqual(writable._writableState.bufferedRequestCount,0);
48+
49+
// verify that end() uncorks correctly
50+
writable.cork();
51+
writable.write('third chunk');
52+
writable.end();
53+
54+
// end causes an uncork() as well
55+
assert.strictEqual(writable._writableState.corked,0);
56+
assert.strictEqual(writable._writableState.bufferedRequestCount,0);
57+
}

0 commit comments

Comments
 (0)