From 8b3ed473c19bcb8e71f1b16882b45d61117e8788 Mon Sep 17 00:00:00 2001 From: Brendan Dahl Date: Fri, 3 Aug 2018 17:24:24 -0700 Subject: [PATCH] Utility script to add a reference test. --- test/add_test.js | 68 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 test/add_test.js diff --git a/test/add_test.js b/test/add_test.js new file mode 100644 index 0000000000000..abbdafa92f036 --- /dev/null +++ b/test/add_test.js @@ -0,0 +1,68 @@ +const fs = require('fs'); +const crypto = require('crypto'); +const execSync = require('child_process').execSync; + +const testManifest = 'test/test_manifest.json'; +const pdfFolder = 'test/pdfs/'; +const gitIgnore = 'test/pdfs/.gitignore'; + +if (process.argv.length < 3) { + console.log('\nUsage: node add_test.js FILE\n'); + console.log(' Add a PDF as a reference test. FILE must be located in ' + + `${pdfFolder}`); + process.exit(1); +} + +let file = process.argv[2]; +if (!file.startsWith(pdfFolder)) { + throw new Error(`PDF file must be in '${pdfFolder}' directory.`); +} +if (!fs.existsSync(file)) { + throw new Error(`PDF file does not exist '${file}'.`); +} + +function calculateMD5(file, callback) { + var hash = crypto.createHash('md5'); + var stream = fs.createReadStream(file); + stream.on('data', function (data) { + hash.update(data); + }); + stream.on('error', function (err) { + callback(err); + }); + stream.on('end', function() { + var result = hash.digest('hex'); + callback(null, result); + }); +} + +function getRandomArbitrary(min, max) { + return Math.floor(Math.random() * (max - min) + min); +} + +calculateMD5(file, (err, md5) => { + if (err) { + throw new Error(err); + } + let contents = fs.readFileSync(gitIgnore, 'utf8').split('\n'); + let randomLine = getRandomArbitrary(10, contents.length - 2); + contents.splice(randomLine, 0, '!' + file.substr(file.lastIndexOf('/') + 1)); + fs.writeFileSync('test/pdfs/.gitignore', contents.join('\n')); + + contents = fs.readFileSync(testManifest, 'utf8'); + let pdf = file.substring(file.lastIndexOf('/') + 1, file.length - 4); + let randomPoint = getRandomArbitrary(100, contents.length - 20); + let bracket = contents.indexOf('},\n', randomPoint); + let out = contents.substr(0, bracket) + + '},\n' + + ` { "id": "${pdf}",\n` + + ` "file": "pdfs/${pdf}.pdf",\n` + + ` "md5": "${md5}",\n` + + ' "rounds": 1,\n' + + ' "type": "eq"\n' + + ' ' + + contents.substr(bracket); + fs.writeFileSync('test/test_manifest.json', out); + execSync(`git add ${testManifest} ${gitIgnore}`); + execSync(`git add ${file}`); +});