openhim-mediator-file-queue
Version:
An async file queue for OpenHIM mediators
163 lines (146 loc) • 5.3 kB
JavaScript
;
var fs = require('graceful-fs');
var tap = require('tap');
var rewire = require('rewire');
var testUtils = require('./utils');
var worker = rewire('../lib/worker');
// ************************************************
// tests for worker.js
// ************************************************
function setupTestFiles(bodyFile, metaFile) {
fs.mkdirSync('test/from');
fs.mkdirSync('test/to');
if (bodyFile) {
fs.writeFileSync('test/from/xb58d4327b141ebffe6e990c.txt', 'Test123');
}
if (metaFile) {
fs.writeFileSync('test/from/xb58d4327b141ebffe6e990c-metadata.json', JSON.stringify({'test': 'obj'}));
}
}
function cleanupTestFiles() {
try { fs.unlinkSync('test/from/xb58d4327b141ebffe6e990c.txt');
} catch(e) { /* delete if exist */ }
try { fs.unlinkSync('test/from/xb58d4327b141ebffe6e990c-metadata.json');
} catch(e) { /* delete if exist */ }
try { fs.unlinkSync('test/to/xb58d4327b141ebffe6e990c.txt');
} catch(e) { /* delete if exist */ }
try { fs.unlinkSync('test/to/xb58d4327b141ebffe6e990c-metadata.json');
} catch(e) { /* delete if exist */ }
try { fs.rmdirSync('test/from');
} catch(e) { /* delete if exist */ }
try { fs.rmdirSync('test/to');
} catch(e) { /* delete if exist */ }
}
// In case there are leftovers from previously failed tests
cleanupTestFiles();
tap.test('moveTx - should move both body and metadata files', function(t) {
setupTestFiles(true, true);
var moveTx = worker.__get__('moveTx');
moveTx('xb58d4327b141ebffe6e990c.txt', 'test/from', 'test/to', true, function(err) {
t.notOk(err);
t.ok(fs.statSync('test/to/xb58d4327b141ebffe6e990c.txt'));
t.ok(fs.statSync('test/to/xb58d4327b141ebffe6e990c-metadata.json'));
t.end();
});
t.tearDown(cleanupTestFiles);
});
tap.test('moveTx - should move just body if forward metadata is false', function(t) {
setupTestFiles(true, false);
var moveTx = worker.__get__('moveTx');
moveTx('xb58d4327b141ebffe6e990c.txt', 'test/from', 'test/to', false, function(err) {
t.notOk(err);
t.ok(fs.statSync('test/to/xb58d4327b141ebffe6e990c.txt'));
t.end();
});
t.tearDown(cleanupTestFiles);
});
tap.test('moveTx - should throw an error if metadata file doesnt exist', function(t) {
setupTestFiles(true, false);
var moveTx = worker.__get__('moveTx');
moveTx('xb58d4327b141ebffe6e990c.txt', 'test/from', 'test/to', true, function(err) {
t.ok(err);
t.end();
});
t.tearDown(cleanupTestFiles);
});
tap.test('moveTx - should throw an error if body file doesnt exist', function(t) {
var moveTx = worker.__get__('moveTx');
moveTx('xb58d4327b141ebffe6e990c.txt', 'test/from', 'test/to', false, function(err) {
t.ok(err);
t.end();
});
});
tap.test('delTx - should delete both files', function(t) {
t.plan(3);
setupTestFiles(true, true);
var delTx = worker.__get__('delTx');
delTx('xb58d4327b141ebffe6e990c.txt', 'test/from', true, function(err) {
t.notOk(err);
fs.stat('test/from/xb58d4327b141ebffe6e990c.txt', function(err) {
t.ok(err);
});
fs.stat('test/from/xb58d4327b141ebffe6e990c-metadata.json', function(err) {
t.ok(err);
});
});
t.tearDown(cleanupTestFiles);
});
tap.test('delTx - should just body file when not forwarding metadata', function(t) {
t.plan(3);
setupTestFiles(true, true);
var delTx = worker.__get__('delTx');
delTx('xb58d4327b141ebffe6e990c.txt', 'test/from', false, function(err) {
t.notOk(err);
fs.stat('test/from/xb58d4327b141ebffe6e990c.txt', function(err) {
t.ok(err);
});
fs.stat('test/from/xb58d4327b141ebffe6e990c-metadata.json', function(err) {
t.notOk(err);
});
});
t.tearDown(cleanupTestFiles);
});
tap.test('delTx - should throw an error if metadata file doesnt exist', function(t) {
setupTestFiles(true, false);
var delTx = worker.__get__('delTx');
delTx('xb58d4327b141ebffe6e990c.txt', 'test/from', true, function(err) {
t.ok(err);
t.end();
});
t.tearDown(cleanupTestFiles);
});
tap.test('delTx - should throw an error if body file doesnt exist', function(t) {
var delTx = worker.__get__('delTx');
delTx('xb58d4327b141ebffe6e990c.txt', 'test/from', false, function(err) {
t.ok(err);
t.end();
});
});
tap.test('should update worker config', function(t){
testUtils.setupWorker(function(workerObj){
workerObj.updateWorker(testUtils.validConf, function(err){
t.notOk(err, 'There were no errors');
});
t.same(workerObj.getOptions(), testUtils.validConf, 'The worker\'s config was successfully updated');
t.end();
});
});
tap.test('should fail to update worker config: no url', function(t){
testUtils.setupWorker(function(workerObj){
workerObj.updateWorker(testUtils.noUrlConf, function(err){
t.ok(err, 'There were errors');
});
t.notSame(workerObj.getOptions(), testUtils.noUrlConf, 'The worker\'s config failed to be updated');
t.end();
});
});
tap.test('should fail to update worker config: undefined config', function(t){
testUtils.setupWorker(function(workerObj){
var newConf;
workerObj.updateWorker(newConf, function(err){
t.ok(err, 'There were errors');
});
t.notSame(workerObj.getOptions(), newConf, 'The worker\'s config failed to be updated');
t.end();
});
});