unit testing
This commit is contained in:
+9
-5
@@ -16,14 +16,16 @@ module.exports = (config) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const fetchList = (cb) => {
|
const fetchList = (cb) => {
|
||||||
|
const file = fs.createWriteStream(config['robots']['list_file']);
|
||||||
https.get(config['robots']['list_url'], (res) => {
|
https.get(config['robots']['list_url'], (res) => {
|
||||||
const file = fs.createWriteStream(config['robots']['list_file']);
|
|
||||||
res.pipe(file);
|
res.pipe(file);
|
||||||
file.on('finish', () => {
|
file.on('finish', () => {
|
||||||
file.close(cb);
|
file.close(cb);
|
||||||
});
|
});
|
||||||
}).on('error', (err) => {
|
}).on('error', (err) => {
|
||||||
cb(err.message);
|
file.close(() => {
|
||||||
|
cb(err.message);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -45,9 +47,11 @@ module.exports = (config) => {
|
|||||||
fetchList((err) => {
|
fetchList((err) => {
|
||||||
cb(err ? _this.status.FETCH_ERROR : _this.status.FETCH_OK, err);
|
cb(err ? _this.status.FETCH_ERROR : _this.status.FETCH_OK, err);
|
||||||
readFile((err, data) => {
|
readFile((err, data) => {
|
||||||
_this.count = data.length;
|
if (!err) {
|
||||||
_this.regex = new RegExp('(' + data.filter(v => v['pattern']).map(v => v['pattern'])
|
_this.count = data.length;
|
||||||
.join('|') + ')');
|
_this.regex = new RegExp('(' + data.filter(v => v['pattern']).map(v => v['pattern'])
|
||||||
|
.join('|') + ')');
|
||||||
|
}
|
||||||
cb(err ? _this.status.READ_ERROR : _this.status.READ_OK, err);
|
cb(err ? _this.status.READ_ERROR : _this.status.READ_OK, err);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -0,0 +1,71 @@
|
|||||||
|
const fs = require('fs');
|
||||||
|
const utils = require('./test_utils');
|
||||||
|
|
||||||
|
const dataDir = 'test_data';
|
||||||
|
|
||||||
|
const config = {
|
||||||
|
robots: {
|
||||||
|
list_url: 'https://raw.githubusercontent.com/atmire/COUNTER-Robots/master/COUNTER_Robots_list.json',
|
||||||
|
list_file: `${dataDir}/robots_list.json`,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
beforeAll(() => {
|
||||||
|
utils.deleteFolderSync(dataDir);
|
||||||
|
fs.mkdirSync(dataDir);
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(() => {
|
||||||
|
if (fs.existsSync(dataDir)) {
|
||||||
|
utils.deleteFolderSync(dataDir);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const botDetector = require('../src/bot_detector')(config);
|
||||||
|
|
||||||
|
test('load()', (done) => {
|
||||||
|
let count = 0;
|
||||||
|
botDetector.load((status, err) => {
|
||||||
|
expect(err).not.toBeDefined();
|
||||||
|
expect(status).toBe(count === 0 ? botDetector.status.FETCH_OK : botDetector.status.READ_OK);
|
||||||
|
if (count > 0) {
|
||||||
|
done();
|
||||||
|
}
|
||||||
|
count++;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('handle()', () => {
|
||||||
|
beforeAll((done) => {
|
||||||
|
botDetector.load((status) => {
|
||||||
|
if (status === botDetector.status.READ_OK) {
|
||||||
|
done();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test('not bot', (done) => {
|
||||||
|
const req = {
|
||||||
|
headers: {
|
||||||
|
'user-agent': 'my user agent',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
botDetector.handle(req, null, () => {
|
||||||
|
expect(req.isRobot).toBeFalsy();
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test('bot', (done) => {
|
||||||
|
const req = {
|
||||||
|
headers: {
|
||||||
|
'user-agent': 'bot',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
botDetector.handle(req, null, () => {
|
||||||
|
expect(req.isRobot).toBeTruthy();
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user