2017-06-06 05:45:14 +00:00
|
|
|
const assert = require('assert');
|
|
|
|
const GlobalBanDB = require('../../lib/db/globalban').GlobalBanDB;
|
|
|
|
const testDB = require('../testutil/db').testDB;
|
2020-08-22 03:31:54 +00:00
|
|
|
const { o } = require('../testutil/o');
|
2017-06-06 05:45:14 +00:00
|
|
|
|
|
|
|
const globalBanDB = new GlobalBanDB(testDB);
|
|
|
|
const testBan = { ip: '8.8.8.8', reason: 'test' };
|
|
|
|
|
|
|
|
function cleanupTestBan() {
|
|
|
|
return testDB.knex.table('global_bans')
|
|
|
|
.where({ ip: testBan.ip })
|
|
|
|
.del();
|
|
|
|
}
|
|
|
|
|
|
|
|
function setupTestBan() {
|
|
|
|
return testDB.knex.table('global_bans')
|
|
|
|
.insert(testBan)
|
|
|
|
.catch(error => {
|
|
|
|
if (error.code === 'ER_DUP_ENTRY') {
|
|
|
|
return testDB.knex.table('global_bans')
|
|
|
|
.where({ ip: testBan.ip })
|
|
|
|
.update({ reason: testBan.reason });
|
|
|
|
}
|
|
|
|
|
|
|
|
throw error;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
describe('GlobalBanDB', () => {
|
|
|
|
describe('#listGlobalBans', () => {
|
|
|
|
beforeEach(setupTestBan);
|
|
|
|
afterEach(cleanupTestBan);
|
|
|
|
|
|
|
|
it('lists existing IP bans', () => {
|
|
|
|
return globalBanDB.listGlobalBans().then(bans => {
|
|
|
|
assert.deepStrictEqual([{
|
|
|
|
ip: '8.8.8.8',
|
|
|
|
reason: 'test'
|
2020-08-22 03:31:54 +00:00
|
|
|
}], bans.map(o));
|
2017-06-06 05:45:14 +00:00
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('#addGlobalIPBan', () => {
|
|
|
|
beforeEach(cleanupTestBan);
|
|
|
|
afterEach(cleanupTestBan);
|
|
|
|
|
|
|
|
it('adds a new ban', () => {
|
|
|
|
return globalBanDB.addGlobalIPBan('8.8.8.8', 'test').then(() => {
|
|
|
|
return testDB.knex.table('global_bans')
|
|
|
|
.where({ ip: '8.8.8.8' })
|
|
|
|
.select()
|
|
|
|
.then(rows => {
|
|
|
|
assert.strictEqual(rows.length, 1, 'Expected 1 row');
|
|
|
|
assert.strictEqual(rows[0].ip, '8.8.8.8');
|
|
|
|
assert.strictEqual(rows[0].reason, 'test');
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
it('updates the reason on an existing ban', () => {
|
|
|
|
return globalBanDB.addGlobalIPBan('8.8.8.8', 'test').then(() => {
|
|
|
|
return globalBanDB.addGlobalIPBan('8.8.8.8', 'different').then(() => {
|
|
|
|
return testDB.knex.table('global_bans')
|
|
|
|
.where({ ip: '8.8.8.8' })
|
|
|
|
.select()
|
|
|
|
.then(rows => {
|
|
|
|
assert.strictEqual(rows.length, 1, 'Expected 1 row');
|
|
|
|
assert.strictEqual(rows[0].ip, '8.8.8.8');
|
|
|
|
assert.strictEqual(rows[0].reason, 'different');
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('#removeGlobalIPBan', () => {
|
|
|
|
beforeEach(setupTestBan);
|
|
|
|
afterEach(cleanupTestBan);
|
|
|
|
|
|
|
|
it('removes a ban', () => {
|
|
|
|
return globalBanDB.removeGlobalIPBan('8.8.8.8').then(() => {
|
|
|
|
return testDB.knex.table('global_bans')
|
|
|
|
.where({ ip: '8.8.8.8' })
|
|
|
|
.select()
|
|
|
|
.then(rows => {
|
|
|
|
assert.strictEqual(rows.length, 0, 'Expected 0 rows');
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|