|
|
var assert = require('assert'), Form = require('multiparty').Form, boundary = '-----------------------------168072824752491622650073', mb = 100, buffer = createMultipartBuffer(boundary, mb * 1024 * 1024), callbacks = { partBegin: -1, partEnd: -1, headerField: -1, headerValue: -1, partData: -1, end: -1, };
var form = new Form({ boundary: boundary });
hijack('onParseHeaderField', function() { callbacks.headerField++; });
hijack('onParseHeaderValue', function() { callbacks.headerValue++; });
hijack('onParsePartBegin', function() { callbacks.partBegin++; });
hijack('onParsePartData', function() { callbacks.partData++; });
hijack('onParsePartEnd', function() { callbacks.partEnd++; });
form.on('finish', function() { callbacks.end++; });
var start = new Date(); form.write(buffer, function(err) { var duration = new Date() - start; assert.ifError(err); var mbPerSec = (mb / (duration / 1000)).toFixed(2); console.log(mbPerSec+' mb/sec'); });
//assert.equal(nparsed, buffer.length);
function createMultipartBuffer(boundary, size) { var head = '--'+boundary+'\r\n' + 'content-disposition: form-data; name="field1"\r\n' + '\r\n' , tail = '\r\n--'+boundary+'--\r\n' , buffer = Buffer.allocUnsafe(size);
buffer.write(head, 'ascii', 0); buffer.write(tail, 'ascii', buffer.length - tail.length); return buffer; }
process.on('exit', function() { /*for (var k in callbacks) { assert.equal(0, callbacks[k], k+' count off by '+callbacks[k]); }*/ });
function hijack(name, fn) { var oldFn = form[name]; form[name] = function() { fn(); return oldFn.apply(this, arguments); }; }
|