diff --git a/services/clsi/test/bench/hashbench.js b/services/clsi/test/bench/hashbench.js new file mode 100644 index 0000000000..9bb79c9089 --- /dev/null +++ b/services/clsi/test/bench/hashbench.js @@ -0,0 +1,71 @@ +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.series(jobs, () => { + console.log('DONE') +})