init commit
This commit is contained in:
parent
ae639426d0
commit
7a491681cc
257 changed files with 95524 additions and 80 deletions
76
integration_test/db/aliases.js
Normal file
76
integration_test/db/aliases.js
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
const assert = require('assert');
|
||||
const AliasesDB = require('../../lib/db/aliases').AliasesDB;
|
||||
const testDB = require('../testutil/db').testDB;
|
||||
|
||||
const aliasesDB = new AliasesDB(testDB);
|
||||
const testIPs = ['111.111.111.111', '111.111.111.222'];
|
||||
const testNames = ['itest1', 'itest2'];
|
||||
|
||||
function cleanup() {
|
||||
return testDB.knex.table('aliases')
|
||||
.where('ip', 'in', testIPs)
|
||||
.del()
|
||||
.then(() => {
|
||||
return testDB.knex.table('aliases')
|
||||
.where('name', 'in', testNames)
|
||||
.del();
|
||||
});
|
||||
}
|
||||
|
||||
function addSomeAliases() {
|
||||
return cleanup().then(() => {
|
||||
return testDB.knex.table('aliases')
|
||||
.insert([
|
||||
{ ip: testIPs[0], name: testNames[0], time: Date.now() },
|
||||
{ ip: testIPs[0], name: testNames[1], time: Date.now() },
|
||||
{ ip: testIPs[1], name: testNames[1], time: Date.now() }
|
||||
]);
|
||||
});
|
||||
}
|
||||
|
||||
describe('AliasesDB', () => {
|
||||
describe('#addAlias', () => {
|
||||
beforeEach(cleanup);
|
||||
afterEach(cleanup);
|
||||
|
||||
it('adds a new alias', () => {
|
||||
return aliasesDB.addAlias(testIPs[0], testNames[0])
|
||||
.then(() => {
|
||||
return testDB.knex.table('aliases')
|
||||
.where({ ip: testIPs[0], name: testNames[0] })
|
||||
.select()
|
||||
.then(rows => {
|
||||
assert.strictEqual(rows.length, 1, 'expected 1 row');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('#getAliasesByIP', () => {
|
||||
beforeEach(addSomeAliases);
|
||||
afterEach(cleanup);
|
||||
|
||||
it('retrieves aliases by IP', () => {
|
||||
return aliasesDB.getAliasesByIP(testIPs[0])
|
||||
.then(names => assert.deepStrictEqual(
|
||||
names.sort(), testNames.sort()));
|
||||
});
|
||||
|
||||
it('retrieves aliases by partial IP', () => {
|
||||
return aliasesDB.getAliasesByIP(testIPs[0].substring(4))
|
||||
.then(names => assert.deepStrictEqual(
|
||||
names.sort(), testNames.sort()));
|
||||
});
|
||||
});
|
||||
|
||||
describe('#getIPsByName', () => {
|
||||
beforeEach(addSomeAliases);
|
||||
afterEach(cleanup);
|
||||
|
||||
it('retrieves IPs by name', () => {
|
||||
return aliasesDB.getIPsByName(testNames[1])
|
||||
.then(ips => assert.deepStrictEqual(
|
||||
ips.sort(), testIPs.sort()));
|
||||
});
|
||||
});
|
||||
});
|
||||
92
integration_test/db/globalban.js
Normal file
92
integration_test/db/globalban.js
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
const assert = require('assert');
|
||||
const GlobalBanDB = require('../../lib/db/globalban').GlobalBanDB;
|
||||
const testDB = require('../testutil/db').testDB;
|
||||
const { o } = require('../testutil/o');
|
||||
|
||||
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'
|
||||
}], bans.map(o));
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
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');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
144
integration_test/db/password-reset.js
Normal file
144
integration_test/db/password-reset.js
Normal file
|
|
@ -0,0 +1,144 @@
|
|||
const assert = require('assert');
|
||||
const PasswordResetDB = require('../../lib/db/password-reset').PasswordResetDB;
|
||||
const testDB = require('../testutil/db').testDB;
|
||||
const { o } = require('../testutil/o');
|
||||
|
||||
const passwordResetDB = new PasswordResetDB(testDB);
|
||||
|
||||
function cleanup() {
|
||||
return testDB.knex.table('password_reset').del();
|
||||
}
|
||||
|
||||
describe('PasswordResetDB', () => {
|
||||
describe('#insert', () => {
|
||||
beforeEach(cleanup);
|
||||
|
||||
const params = {
|
||||
ip: '1.2.3.4',
|
||||
name: 'testing',
|
||||
email: 'test@example.com',
|
||||
hash: 'abcdef',
|
||||
expire: 5678
|
||||
};
|
||||
|
||||
it('adds a new password reset', () => {
|
||||
return passwordResetDB.insert(params).then(() => {
|
||||
return testDB.knex.table('password_reset')
|
||||
.where({ name: 'testing' })
|
||||
.select();
|
||||
}).then(rows => {
|
||||
assert.strictEqual(rows.length, 1);
|
||||
assert.deepStrictEqual(o(rows[0]), params);
|
||||
});
|
||||
});
|
||||
|
||||
it('overwrites an existing reset for the same name', () => {
|
||||
return passwordResetDB.insert(params).then(() => {
|
||||
params.ip = '5.6.7.8';
|
||||
params.email = 'somethingelse@example.com';
|
||||
params.hash = 'qwertyuiop';
|
||||
params.expire = 9999;
|
||||
|
||||
return passwordResetDB.insert(params);
|
||||
}).then(() => {
|
||||
return testDB.knex.table('password_reset')
|
||||
.where({ name: 'testing' })
|
||||
.select();
|
||||
}).then(rows => {
|
||||
assert.strictEqual(rows.length, 1);
|
||||
assert.deepStrictEqual(o(rows[0]), params);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('#get', () => {
|
||||
const reset = {
|
||||
ip: '1.2.3.4',
|
||||
name: 'testing',
|
||||
email: 'test@example.com',
|
||||
hash: 'abcdef',
|
||||
expire: 5678
|
||||
};
|
||||
|
||||
beforeEach(() => cleanup().then(() => {
|
||||
return testDB.knex.table('password_reset').insert(reset);
|
||||
}));
|
||||
|
||||
it('gets a password reset by hash', () => {
|
||||
return passwordResetDB.get(reset.hash).then(result => {
|
||||
assert.deepStrictEqual(o(result), reset);
|
||||
});
|
||||
});
|
||||
|
||||
it('throws when no reset exists for the input', () => {
|
||||
return passwordResetDB.get('lalala').then(() => {
|
||||
assert.fail('Expected not found error');
|
||||
}).catch(error => {
|
||||
assert.strictEqual(
|
||||
error.message,
|
||||
'No password reset found for hash lalala'
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('#delete', () => {
|
||||
const reset = {
|
||||
ip: '1.2.3.4',
|
||||
name: 'testing',
|
||||
email: 'test@example.com',
|
||||
hash: 'abcdef',
|
||||
expire: 5678
|
||||
};
|
||||
|
||||
beforeEach(() => cleanup().then(() => {
|
||||
return testDB.knex.table('password_reset').insert(reset);
|
||||
}));
|
||||
|
||||
it('deletes a password reset by hash', () => {
|
||||
return passwordResetDB.delete(reset.hash).then(() => {
|
||||
return testDB.knex.table('password_reset')
|
||||
.where({ name: 'testing' })
|
||||
.select();
|
||||
}).then(rows => {
|
||||
assert.strictEqual(rows.length, 0);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('#cleanup', () => {
|
||||
const now = Date.now();
|
||||
|
||||
const reset1 = {
|
||||
ip: '1.2.3.4',
|
||||
name: 'testing',
|
||||
email: 'test@example.com',
|
||||
hash: 'abcdef',
|
||||
expire: now - 25 * 60 * 60 * 1000
|
||||
};
|
||||
|
||||
const reset2 = {
|
||||
ip: '5.6.7.8',
|
||||
name: 'testing2',
|
||||
email: 'test@example.com',
|
||||
hash: 'abcdef',
|
||||
expire: now
|
||||
};
|
||||
|
||||
beforeEach(() => cleanup().then(() => {
|
||||
return testDB.knex.table('password_reset')
|
||||
.insert([reset1, reset2]);
|
||||
}));
|
||||
|
||||
it('cleans up old password resets', () => {
|
||||
return passwordResetDB.cleanup().then(() => {
|
||||
return testDB.knex.table('password_reset')
|
||||
.whereIn('name', ['testing1', 'testing2'])
|
||||
.select();
|
||||
}).then(rows => {
|
||||
assert.strictEqual(rows.length, 1);
|
||||
assert.deepStrictEqual(o(rows[0]), reset2);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue