michael@0: var path = require('path'); michael@0: var fs = require('fs'); michael@0: var spawn = require('child_process').spawn; michael@0: michael@0: function noop() {} michael@0: exports.noop = noop; michael@0: michael@0: if (process.env.HTTP2_LOG) { michael@0: var logOutput = process.stderr; michael@0: if (process.stderr.isTTY) { michael@0: var bin = path.resolve(path.dirname(require.resolve('bunyan')), '..', 'bin', 'bunyan'); michael@0: if(bin && fs.existsSync(bin)) { michael@0: logOutput = spawn(bin, ['-o', 'short'], { michael@0: stdio: [null, process.stderr, process.stderr] michael@0: }).stdin; michael@0: } michael@0: } michael@0: exports.createLogger = function(name) { michael@0: return require('bunyan').createLogger({ michael@0: name: name, michael@0: stream: logOutput, michael@0: level: process.env.HTTP2_LOG, michael@0: serializers: require('../lib/http').serializers michael@0: }); michael@0: }; michael@0: exports.log = exports.createLogger('test'); michael@0: } else { michael@0: exports.createLogger = function() { michael@0: return exports.log; michael@0: }; michael@0: exports.log = { michael@0: fatal: noop, michael@0: error: noop, michael@0: warn : noop, michael@0: info : noop, michael@0: debug: noop, michael@0: trace: noop, michael@0: michael@0: child: function() { return this; } michael@0: }; michael@0: } michael@0: michael@0: exports.callNTimes = function callNTimes(limit, done) { michael@0: if (limit === 0) { michael@0: done(); michael@0: } else { michael@0: var i = 0; michael@0: return function() { michael@0: i += 1; michael@0: if (i === limit) { michael@0: done(); michael@0: } michael@0: }; michael@0: } michael@0: }; michael@0: michael@0: // Concatenate an array of buffers into a new buffer michael@0: exports.concat = function concat(buffers) { michael@0: var size = 0; michael@0: for (var i = 0; i < buffers.length; i++) { michael@0: size += buffers[i].length; michael@0: } michael@0: michael@0: var concatenated = new Buffer(size); michael@0: for (var cursor = 0, j = 0; j < buffers.length; cursor += buffers[j].length, j++) { michael@0: buffers[j].copy(concatenated, cursor); michael@0: } michael@0: michael@0: return concatenated; michael@0: }; michael@0: michael@0: exports.random = function random(min, max) { michael@0: return min + Math.floor(Math.random() * (max - min + 1)); michael@0: }; michael@0: michael@0: // Concatenate an array of buffers and then cut them into random size buffers michael@0: exports.shuffleBuffers = function shuffleBuffers(buffers) { michael@0: var concatenated = exports.concat(buffers), output = [], written = 0; michael@0: michael@0: while (written < concatenated.length) { michael@0: var chunk_size = Math.min(concatenated.length - written, Math.ceil(Math.random()*20)); michael@0: output.push(concatenated.slice(written, written + chunk_size)); michael@0: written += chunk_size; michael@0: } michael@0: michael@0: return output; michael@0: }