Просмотр исходного кода

add benchmark script for hashing

Brian Gough 5 лет назад
Родитель
Сommit
7b6434ef81
1 измененных файлов с 71 добавлено и 0 удалено
  1. 71 0
      services/clsi/test/bench/hashbench.js

+ 71 - 0
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')
+})