Finished implementation

This commit is contained in:
Daniel Gonzalez
2021-05-04 16:08:44 -04:00
parent 6207c6c3d5
commit 608f435bf4
7 changed files with 216 additions and 93 deletions
+4
View File
@@ -15,6 +15,7 @@ process.env.SVC_ENV = 'test'
// Local libraries
const config = require('../../../config')
const AuthRPC = require('../../../src/rpc/auth')
const RateLimit = require('../../../src/rpc/rate-limit')
const UserLib = require('../../../src/lib/users')
const userLib = new UserLib()
@@ -48,6 +49,7 @@ describe('#AuthRPC', () => {
sandbox = sinon.createSandbox()
uut = new AuthRPC()
uut.rateLimit = new RateLimit({ max: 100 })
})
afterEach(() => sandbox.restore())
@@ -71,6 +73,7 @@ describe('#AuthRPC', () => {
const authCall = jsonrpc.request(id, 'auth', { endpoint: 'authUser' })
const jsonStr = JSON.stringify(authCall, null, 2)
const rpcData = jsonrpc.parse(jsonStr)
rpcData.from = 'Origin request'
const result = await uut.authRouter(rpcData)
@@ -87,6 +90,7 @@ describe('#AuthRPC', () => {
const authCall = jsonrpc.request(id, 'auth', { endpoint: 'authUser' })
const jsonStr = JSON.stringify(authCall, null, 2)
const rpcData = jsonrpc.parse(jsonStr)
rpcData.from = 'Origin request'
const result = await uut.authRouter(rpcData)
+9 -2
View File
@@ -15,6 +15,7 @@ process.env.SVC_ENV = 'test'
// Local libraries
const config = require('../../../config')
const UserRPC = require('../../../src/rpc/users')
const RateLimit = require('../../../src/rpc/rate-limit')
const UserModel = require('../../../src/models/users')
describe('#UserRPC', () => {
@@ -40,6 +41,7 @@ describe('#UserRPC', () => {
sandbox = sinon.createSandbox()
uut = new UserRPC()
uut.rateLimit = new RateLimit({ max: 100 })
})
afterEach(() => sandbox.restore())
@@ -120,6 +122,7 @@ describe('#UserRPC', () => {
const userCall = jsonrpc.request(id, 'users', { endpoint: 'createUser' })
const jsonStr = JSON.stringify(userCall, null, 2)
const rpcData = jsonrpc.parse(jsonStr)
rpcData.from = 'Origin request'
const result = await uut.userRouter(rpcData)
@@ -139,9 +142,10 @@ describe('#UserRPC', () => {
})
const jsonStr = JSON.stringify(userCall, null, 2)
const rpcData = jsonrpc.parse(jsonStr)
rpcData.from = 'Origin request'
const result = await uut.userRouter(rpcData)
console.log('result', result)
assert.equal(result, true)
})
@@ -159,6 +163,7 @@ describe('#UserRPC', () => {
})
const jsonStr = JSON.stringify(userCall, null, 2)
const rpcData = jsonrpc.parse(jsonStr)
rpcData.from = 'Origin request'
const result = await uut.userRouter(rpcData)
// console.log('result: ', result)
@@ -179,7 +184,7 @@ describe('#UserRPC', () => {
})
const jsonStr = JSON.stringify(userCall, null, 2)
const rpcData = jsonrpc.parse(jsonStr)
rpcData.from = 'Origin request'
const result = await uut.userRouter(rpcData)
assert.equal(result, true)
@@ -199,6 +204,7 @@ describe('#UserRPC', () => {
})
const jsonStr = JSON.stringify(userCall, null, 2)
const rpcData = jsonrpc.parse(jsonStr)
rpcData.from = 'Origin request'
const result = await uut.userRouter(rpcData)
// console.log('result: ', result)
@@ -216,6 +222,7 @@ describe('#UserRPC', () => {
const userCall = jsonrpc.request(id, 'users', { endpoint: 'createUser' })
const jsonStr = JSON.stringify(userCall, null, 2)
const rpcData = jsonrpc.parse(jsonStr)
rpcData.from = 'Origin request'
const result = await uut.userRouter(rpcData)
// console.log('result: ', result)
+64
View File
@@ -0,0 +1,64 @@
/*
Unit tests for the JSON RPC validator middleware.
TODO: ensureTargetUserOrAdmin: it should exit quietly if user is an admin.
*/
// Public npm libraries
const sinon = require('sinon')
const assert = require('chai').assert
// Set the environment variable to signal this is a test.
process.env.SVC_ENV = 'test'
// Local libraries
const RateLimit = require('../../../src/rpc/rate-limit')
describe('#rate-limit', () => {
let uut
let sandbox
beforeEach(() => {
sandbox = sinon.createSandbox()
uut = new RateLimit()
})
afterEach(() => sandbox.restore())
describe('#onLimitReached', () => {
it('should throw error', async () => {
try {
uut.onLimitReached()
assert.fail('unexpected error')
} catch (error) {
assert.equal(error.status, 429)
assert.include(error.message, 'Too many requests, please try again later.')
}
})
})
describe('#limiter', () => {
it('should throw error if "from" input is not provider', async () => {
try {
await uut.limiter()
assert.fail('unexpected error')
} catch (error) {
assert.include(error.message, 'from must be a string')
}
})
it('should throw error 429', async () => {
try {
const _uut = new RateLimit({ max: 1 })
const from = 'Origin request'
const firtsRequest = await _uut.limiter(from)
assert.isTrue(firtsRequest)
await _uut.limiter(from)
assert.fail('unexpected error')
} catch (error) {
assert.include(error.message, 'Too many requests, please try again later.')
}
})
})
})