Skip to content

Commit

Permalink
test: add tests for clearBuffer state machine
Browse files Browse the repository at this point in the history
This checks to see that clearBuffer appropriately decrements the
correct values in _writableState when clearBuffer is invoked in
end.

Fixes: nodejs#8687
PR-URL: nodejs#9922
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
  • Loading branch information
captainsafia authored and mcollina committed Jan 2, 2017
1 parent 55f5301 commit b0be2ac
Showing 1 changed file with 57 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
'use strict';

const common = require('../common');
const assert = require('assert');
const stream = require('stream');

const writable = new stream.Writable();

writable._writev = common.mustCall((chunks, cb) => {
assert.equal(chunks.length, 2, 'two chunks to write');
cb();
}, 1);

writable._write = common.mustCall((chunk, encoding, cb) => {
cb();
}, 1);

// first cork
writable.cork();
assert.strictEqual(writable._writableState.corked, 1);
assert.strictEqual(writable._writableState.bufferedRequestCount, 0);

// cork again
writable.cork();
assert.strictEqual(writable._writableState.corked, 2);

// the first chunk is buffered
writable.write('first chunk');
assert.strictEqual(writable._writableState.bufferedRequestCount, 1);

// first uncork does nothing
writable.uncork();
assert.strictEqual(writable._writableState.corked, 1);
assert.strictEqual(writable._writableState.bufferedRequestCount, 1);

process.nextTick(uncork);

// the second chunk is buffered, because we uncork at the end of tick
writable.write('second chunk');
assert.strictEqual(writable._writableState.corked, 1);
assert.strictEqual(writable._writableState.bufferedRequestCount, 2);

function uncork() {
// second uncork flushes the buffer
writable.uncork();
assert.strictEqual(writable._writableState.corked, 0);
assert.strictEqual(writable._writableState.bufferedRequestCount, 0);

// verify that end() uncorks correctly
writable.cork();
writable.write('third chunk');
writable.end();

// end causes an uncork() as well
assert.strictEqual(writable._writableState.corked, 0);
assert.strictEqual(writable._writableState.bufferedRequestCount, 0);
}

0 comments on commit b0be2ac

Please sign in to comment.