react / react-0.13.3 / examples / basic-commonjs / node_modules / browserify / node_modules / deps-sort / node_modules / JSONStream / test / gen.js
80744 viewsreturn // dont run this test for now since tape is weird and broken on 0.1012var fs = require('fs')3var JSONStream = require('../')4var file = process.argv[2] || '/tmp/JSONStream-test-large.json'5var size = Number(process.argv[3] || 100000)6var tape = require('tape')7// if (process.title !== 'browser') {8tape('out of mem', function (t) {9t.plan(1)10//////////////////////////////////////////////////////11// Produces a random number between arg1 and arg212//////////////////////////////////////////////////////13var randomNumber = function (min, max) {14var number = Math.floor(Math.random() * (max - min + 1) + min);15return number;16};1718//////////////////////////////////////////////////////19// Produces a random string of a length between arg1 and arg220//////////////////////////////////////////////////////21var randomString = function (min, max) {2223// add several spaces to increase chanses of creating 'words'24var chars = ' 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';25var result = '';2627var randomLength = randomNumber(min, max);2829for (var i = randomLength; i > 0; --i) {30result += chars[Math.round(Math.random() * (chars.length - 1))];31}32return result;33};3435//////////////////////////////////////////////////////36// Produces a random JSON document, as a string37//////////////////////////////////////////////////////38var randomJsonDoc = function () {3940var doc = {41"CrashOccurenceID": randomNumber(10000, 50000),42"CrashID": randomNumber(1000, 10000),43"SiteName": randomString(10, 25),44"MachineName": randomString(10, 25),45"Date": randomString(26, 26),46"ProcessDuration": randomString(18, 18),47"ThreadIdentityName": null,48"WindowsIdentityName": randomString(15, 40),49"OperatingSystemName": randomString(35, 65),50"DetailedExceptionInformation": randomString(100, 800)51};5253doc = JSON.stringify(doc);54doc = doc.replace(/\,/g, ',\n'); // add new lines after each attribute55return doc;56};5758//////////////////////////////////////////////////////59// generates test data60//////////////////////////////////////////////////////61var generateTestData = function (cb) {6263console.log('generating large data file...');6465var stream = fs.createWriteStream(file, {66encoding: 'utf8'67});6869var i = 0;70var max = size;71var writing = false72var split = ',\n';73var doc = randomJsonDoc();74stream.write('[');7576function write () {77if(writing) return78writing = true79while(++i < max) {80if(Math.random() < 0.001)81console.log('generate..', i + ' / ' + size)82if(!stream.write(doc + split)) {83writing = false84return stream.once('drain', write)85}86}87stream.write(doc + ']')88stream.end();89console.log('END')90}91write()92stream.on('close', cb)93};9495//////////////////////////////////////////////////////96// Shows that parsing 100000 instances using JSONStream fails97//98// After several seconds, you will get this crash99// FATAL ERROR: JS Allocation failed - process out of memory100//////////////////////////////////////////////////////101var testJSONStreamParse_causesOutOfMem = function (done) {102var items = 0103console.log('parsing data files using JSONStream...');104105var parser = JSONStream.parse([true]);106var stream = fs.createReadStream(file);107stream.pipe(parser);108109parser.on('data', function (data) {110items++111if(Math.random() < 0.01) console.log(items, '...')112});113114parser.on('end', function () {115t.equal(items, size)116});117118};119120//////////////////////////////////////////////////////121// main122//////////////////////////////////////////////////////123124fs.stat(file, function (err, stat) {125console.log(stat)126if(err)127generateTestData(testJSONStreamParse_causesOutOfMem);128else129testJSONStreamParse_causesOutOfMem()130})131132})133134// }135136137