From 6df1437cfc924d2695ec2d77f009996308681444 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Fri, 11 Nov 2016 13:59:01 -0800 Subject: [PATCH] drop md5sum dependency, depend on node.js script --- scripts/md5sum.js | 94 ++++++++++++++++++++++++++++++++++++++++++++++ test/data/Makefile | 5 ++- 2 files changed, 97 insertions(+), 2 deletions(-) create mode 100755 scripts/md5sum.js diff --git a/scripts/md5sum.js b/scripts/md5sum.js new file mode 100755 index 000000000..0f4b729e7 --- /dev/null +++ b/scripts/md5sum.js @@ -0,0 +1,94 @@ +#!/usr/bin/env node + +'use strict' + +var crypto = require('crypto'); +var fs = require('fs'); + +var idx = process.argv.indexOf('-c'); +if (idx > -1) { + var validate_file = process.argv[idx+1]; + if (!process.argv[idx+1]) { + console.error('Please pass arg to -c with a path to the data.md5sum file used to validate'); + process.exit(1); + } + validate(validate_file); +} else { + // we are generating checksums for all filenames passed + var args = process.argv.slice(2); + if (args.length > 0) { + generate(args); + } else { + console.error('Please pass either a list of files to generate an md5sum for or validate with "-c data.md5sum"'); + process.exit(1); + } +} + + +function md5FileSync (filename) { + var BUFFER_SIZE = 8192; + var fd = fs.openSync(filename, 'r'); + var hash = crypto.createHash('md5'); + var buffer = new Buffer(BUFFER_SIZE); + + try { + var bytesRead; + + do { + bytesRead = fs.readSync(fd, buffer, 0, BUFFER_SIZE); + hash.update(buffer.slice(0, bytesRead)); + } while (bytesRead === BUFFER_SIZE) + } finally { + fs.closeSync(fd); + } + + return hash.digest('hex'); +} + +function generate(files) { + files.forEach(function(filename) { + var md5_actual = md5FileSync(filename); + console.log(md5_actual,'',filename); + }) +} + +function validate(validate_file) { + + var sums = {}; + var lines = fs.readFileSync(validate_file). + toString(). + split('\n'). + filter(function(line) { + return line !== ""; + }); + + var error = 0; + + lines.forEach(function(line) { + var parts = line.split(' '); + var filename = parts[1]; + var md5 = parts[0]; + sums[filename] = md5; + var md5_actual = md5FileSync(filename); + if (md5_actual !== md5) { + error++; + console.error(filename + ': FAILED') + } else { + console.log(filename + ': OK'); + } + }) + + if (error > 0) { + console.error('ms5sum.js WARNING: 1 computed checksum did NOT match'); + console.error('\nExpected:') + lines.forEach(function(line) { + var parts = line.split(' '); + var filename = parts[1]; + var md5 = parts[0]; + console.log(md5 + ' ' + filename); + }) + process.exit(1); + } else { + process.exit(0); + } +} diff --git a/test/data/Makefile b/test/data/Makefile index c63680322..d593521e8 100755 --- a/test/data/Makefile +++ b/test/data/Makefile @@ -8,6 +8,7 @@ OSRM_EXTRACT:=$(OSRM_BUILD_DIR)/osrm-extract OSRM_CONTRACT:=$(OSRM_BUILD_DIR)/osrm-contract OSRM_ROUTED:=$(OSRM_BUILD_DIR)/osrm-routed POLY2REQ:=$(SCRIPT_ROOT)/poly2req.js +MD5SUM:=$(SCRIPT_ROOT)/md5sum.js TIMER:=$(SCRIPT_ROOT)/timer.sh PROFILE:=$(PROFILE_ROOT)/car.lua @@ -24,7 +25,7 @@ $(DATA_NAME).poly: $(DATA_NAME).osrm: $(DATA_NAME).osm.pbf $(DATA_NAME).poly $(PROFILE) $(OSRM_EXTRACT) @echo "Verifiyng data file integrity..." - md5sum -c data.md5sum + $(MD5SUM) -c data.md5sum @echo "Running osrm-extract..." $(TIMER) "osrm-extract" $(OSRM_EXTRACT) $(DATA_NAME).osm.pbf -p $(PROFILE) @@ -49,6 +50,6 @@ benchmark: $(DATA_NAME).requests osrm-routed.pid @echo "****************" checksum: - md5sum $(DATA_NAME).osm.pbf $(DATA_NAME).poly > data.md5sum + $(MD5SUM) $(DATA_NAME).osm.pbf $(DATA_NAME).poly > data.md5sum .PHONY: clean checksum benchmark