const ContentCacheManager = require('../../app/js/ContentCacheManager') const fs = require('fs') const crypto = require('crypto') const path = require('path') const os = require('os') const async = require('async') const _createHash = crypto.createHash const files = process.argv.slice(2) function test(hashType, filePath, callback) { // override the default hash in ContentCacheManager crypto.createHash = function (hash) { if (hashType === 'hmac-sha1') { return crypto.createHmac('sha1', 'a secret') } hash = hashType return _createHash(hash) } fs.mkdtemp(path.join(os.tmpdir(), 'pdfcache'), (err, dir) => { if (err) { return callback(err) } const t0 = process.hrtime.bigint() ContentCacheManager.update(dir, filePath, (x) => { const t1 = process.hrtime.bigint() const cold = Number(t1 - t0) / 1e6 ContentCacheManager.update(dir, filePath, (x) => { const t2 = process.hrtime.bigint() const warm = Number(t2 - t1) / 1e6 fs.rmdir(dir, { recursive: true }, (err) => { if (err) { return callback(err) } console.log( filePath, 'hashType', hashType, 'cold-start', cold.toFixed(2), 'ms', 'warm-start', warm.toFixed(2), 'ms' ) callback(null, [hashType, cold, warm]) }) }) }) }) } var jobs = [] files.forEach((file) => { jobs.push((cb) => { test('md5', file, cb) }) jobs.push((cb) => { test('sha1', file, cb) }) jobs.push((cb) => { test('hmac-sha1', file, cb) }) jobs.push((cb) => { test('sha256', file, cb) }) }) async.timesSeries( 10, (n, cb) => { console.log('run', n) async.series(jobs, cb) }, () => { console.log('DONE') } )