Minor refactor of tests and eltro
Some checks failed
continuous-integration/appveyor/branch AppVeyor build failed
Some checks failed
continuous-integration/appveyor/branch AppVeyor build failed
This commit is contained in:
parent
d5459cbcb9
commit
8db66f416a
5 changed files with 133 additions and 98 deletions
|
@ -5,17 +5,14 @@
|
||||||
"main": "flaska.mjs",
|
"main": "flaska.mjs",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "eltro",
|
"test": "eltro",
|
||||||
"test:watch": "npm-watch test"
|
"test:watch": "eltro -r dot -w test"
|
||||||
},
|
},
|
||||||
"watch": {
|
"watch": {
|
||||||
"test": {
|
"test": {
|
||||||
"patterns": [
|
"patterns": [
|
||||||
"test/*",
|
"./"
|
||||||
"flaska.mjs"
|
|
||||||
],
|
],
|
||||||
"extensions": "mjs",
|
"extensions": "mjs"
|
||||||
"quiet": true,
|
|
||||||
"inherit": true
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|
128
test/http.body.json.test.mjs
Normal file
128
test/http.body.json.test.mjs
Normal file
|
@ -0,0 +1,128 @@
|
||||||
|
import { Eltro as t, assert, stub } from 'eltro'
|
||||||
|
import { setTimeout } from 'timers/promises'
|
||||||
|
import { Flaska, JsonHandler } from '../flaska.mjs'
|
||||||
|
import Client from './client.mjs'
|
||||||
|
|
||||||
|
const port = 51024
|
||||||
|
const log = {
|
||||||
|
fatal: stub(),
|
||||||
|
error: stub(),
|
||||||
|
warn: stub(),
|
||||||
|
info: stub(),
|
||||||
|
debug: stub(),
|
||||||
|
trace: stub(),
|
||||||
|
log: stub(),
|
||||||
|
}
|
||||||
|
const flaska = new Flaska({ log })
|
||||||
|
const client = new Client(port)
|
||||||
|
|
||||||
|
let reqBody = null
|
||||||
|
|
||||||
|
flaska.after(function(ctx) {
|
||||||
|
if (ctx.aborted) return
|
||||||
|
ctx.log.info(ctx.status)
|
||||||
|
})
|
||||||
|
|
||||||
|
flaska.post('/json', JsonHandler(), function(ctx) {
|
||||||
|
ctx.body = { success: true }
|
||||||
|
reqBody = ctx.req.body
|
||||||
|
})
|
||||||
|
flaska.post('/json/slow', JsonHandler(), async function(ctx) {
|
||||||
|
await setTimeout(300)
|
||||||
|
ctx.body = { success: true }
|
||||||
|
ctx.status = 201
|
||||||
|
reqBody = ctx.req.body
|
||||||
|
})
|
||||||
|
|
||||||
|
function reset() {
|
||||||
|
log.fatal.reset()
|
||||||
|
log.error.reset()
|
||||||
|
log.warn.reset()
|
||||||
|
log.info.reset()
|
||||||
|
log.debug.reset()
|
||||||
|
log.trace.reset()
|
||||||
|
log.log.reset()
|
||||||
|
}
|
||||||
|
|
||||||
|
t.before(function() {
|
||||||
|
return flaska.listenAsync(port)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.describe('/json', function() {
|
||||||
|
t.beforeEach(function() {
|
||||||
|
log.info.reset()
|
||||||
|
})
|
||||||
|
t.test('should return success and store body', async function() {
|
||||||
|
const assertBody = { a: '' }
|
||||||
|
for (let i = 0; i < 1010; i++) {
|
||||||
|
assertBody.a += 'aaaaaaaaaa'
|
||||||
|
}
|
||||||
|
reqBody = null
|
||||||
|
let body = await client.post('/json', assertBody)
|
||||||
|
assert.deepEqual(body, { success: true })
|
||||||
|
assert.deepStrictEqual(reqBody, assertBody)
|
||||||
|
assert.strictEqual(log.info.callCount, 1)
|
||||||
|
assert.strictEqual(log.info.firstCall[0], 200)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.test('should return and log correctly', async function() {
|
||||||
|
const assertBody = { a: '' }
|
||||||
|
for (let i = 0; i < 1010; i++) {
|
||||||
|
assertBody.a += 'aaaaaaaaaa'
|
||||||
|
}
|
||||||
|
reqBody = null
|
||||||
|
let body = await client.post('/json/slow', assertBody)
|
||||||
|
assert.deepEqual(body, { success: true })
|
||||||
|
assert.deepStrictEqual(reqBody, assertBody)
|
||||||
|
assert.strictEqual(log.info.callCount, 1)
|
||||||
|
assert.strictEqual(log.info.firstCall[0], 201)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.test('should fail if body is too big', async function() {
|
||||||
|
reset()
|
||||||
|
|
||||||
|
const assertBody = { a: '' }
|
||||||
|
for (let i = 0; i < 10300; i++) {
|
||||||
|
assertBody.a += 'aaaaaaaaaa'
|
||||||
|
}
|
||||||
|
|
||||||
|
let err = await assert.isRejected(client.post('/json', assertBody))
|
||||||
|
|
||||||
|
assert.strictEqual(err.body.status, 413)
|
||||||
|
assert.ok(log.error.called)
|
||||||
|
assert.match(log.error.firstCall[0].message, /10240/)
|
||||||
|
assert.strictEqual(log.error.firstCall[0].status, 413)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.test('should fail if not a valid json', async function() {
|
||||||
|
reset()
|
||||||
|
|
||||||
|
let err = await assert.isRejected(client.customRequest('POST', '/json', 'XXXXX'))
|
||||||
|
|
||||||
|
assert.strictEqual(err.body.status, 400)
|
||||||
|
assert.match(err.body.message, /invalid json/i)
|
||||||
|
assert.match(err.body.message, /token[^X]+X/i)
|
||||||
|
assert.strictEqual(err.body.request, 'XXXXX')
|
||||||
|
assert.strictEqual(log.error.callCount, 1)
|
||||||
|
assert.match(log.error.firstCall[0].message, /invalid json/i)
|
||||||
|
assert.match(log.error.firstCall[0].message, /token[^X]+X/i)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.test('should handle incomplete requests correctly', async function() {
|
||||||
|
reset()
|
||||||
|
|
||||||
|
let req = await client.customRequest('POST', '/json', 'aaaa', { returnRequest: true })
|
||||||
|
|
||||||
|
req.write('part1')
|
||||||
|
|
||||||
|
await setTimeout(20)
|
||||||
|
|
||||||
|
req.destroy()
|
||||||
|
|
||||||
|
await setTimeout(20)
|
||||||
|
|
||||||
|
assert.strictEqual(log.error.callCount, 0)
|
||||||
|
assert.strictEqual(log.info.callCount, 0)
|
||||||
|
// assert.strictEqual(log.info.firstCall[0].message, 'aborted')
|
||||||
|
})
|
||||||
|
})
|
|
@ -4,7 +4,7 @@ import fs from 'fs/promises'
|
||||||
import formidable from 'formidable'
|
import formidable from 'formidable'
|
||||||
import { Eltro as t, assert, stub } from 'eltro'
|
import { Eltro as t, assert, stub } from 'eltro'
|
||||||
import { setTimeout } from 'timers/promises'
|
import { setTimeout } from 'timers/promises'
|
||||||
import { Flaska, JsonHandler, FormidableHandler, FileResponse } from '../flaska.mjs'
|
import { Flaska, FormidableHandler, FileResponse } from '../flaska.mjs'
|
||||||
import Client from './client.mjs'
|
import Client from './client.mjs'
|
||||||
|
|
||||||
const port = 51024
|
const port = 51024
|
||||||
|
@ -20,7 +20,6 @@ const log = {
|
||||||
const flaska = new Flaska({ log })
|
const flaska = new Flaska({ log })
|
||||||
const client = new Client(port)
|
const client = new Client(port)
|
||||||
|
|
||||||
let reqBody = null
|
|
||||||
let file = null
|
let file = null
|
||||||
let uploaded = []
|
let uploaded = []
|
||||||
|
|
||||||
|
@ -32,16 +31,6 @@ flaska.after(function(ctx) {
|
||||||
flaska.get('/', function(ctx) {
|
flaska.get('/', function(ctx) {
|
||||||
ctx.body = { status: true }
|
ctx.body = { status: true }
|
||||||
})
|
})
|
||||||
flaska.post('/json', JsonHandler(), function(ctx) {
|
|
||||||
ctx.body = { success: true }
|
|
||||||
reqBody = ctx.req.body
|
|
||||||
})
|
|
||||||
flaska.post('/json/slow', JsonHandler(), async function(ctx) {
|
|
||||||
await setTimeout(300)
|
|
||||||
ctx.body = { success: true }
|
|
||||||
ctx.status = 201
|
|
||||||
reqBody = ctx.req.body
|
|
||||||
})
|
|
||||||
flaska.get('/timeout', function(ctx) {
|
flaska.get('/timeout', function(ctx) {
|
||||||
return new Promise(function() {})
|
return new Promise(function() {})
|
||||||
})
|
})
|
||||||
|
@ -96,90 +85,11 @@ t.describe('/', function() {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
t.describe('/json', function() {
|
|
||||||
t.beforeEach(function() {
|
|
||||||
log.info.reset()
|
|
||||||
})
|
|
||||||
t.test('should return success and store body', async function() {
|
|
||||||
const assertBody = { a: '' }
|
|
||||||
for (let i = 0; i < 1010; i++) {
|
|
||||||
assertBody.a += 'aaaaaaaaaa'
|
|
||||||
}
|
|
||||||
reqBody = null
|
|
||||||
let body = await client.post('/json', assertBody)
|
|
||||||
assert.deepEqual(body, { success: true })
|
|
||||||
assert.deepStrictEqual(reqBody, assertBody)
|
|
||||||
assert.strictEqual(log.info.callCount, 1)
|
|
||||||
assert.strictEqual(log.info.firstCall[0], 200)
|
|
||||||
})
|
|
||||||
|
|
||||||
t.test('should return and log correctly', async function() {
|
|
||||||
const assertBody = { a: '' }
|
|
||||||
for (let i = 0; i < 1010; i++) {
|
|
||||||
assertBody.a += 'aaaaaaaaaa'
|
|
||||||
}
|
|
||||||
reqBody = null
|
|
||||||
let body = await client.post('/json/slow', assertBody)
|
|
||||||
assert.deepEqual(body, { success: true })
|
|
||||||
assert.deepStrictEqual(reqBody, assertBody)
|
|
||||||
assert.strictEqual(log.info.callCount, 1)
|
|
||||||
assert.strictEqual(log.info.firstCall[0], 201)
|
|
||||||
})
|
|
||||||
|
|
||||||
t.test('should fail if body is too big', async function() {
|
|
||||||
reset()
|
|
||||||
|
|
||||||
const assertBody = { a: '' }
|
|
||||||
for (let i = 0; i < 10300; i++) {
|
|
||||||
assertBody.a += 'aaaaaaaaaa'
|
|
||||||
}
|
|
||||||
|
|
||||||
let err = await assert.isRejected(client.post('/json', assertBody))
|
|
||||||
|
|
||||||
assert.strictEqual(err.body.status, 413)
|
|
||||||
assert.ok(log.error.called)
|
|
||||||
assert.match(log.error.firstCall[0].message, /10240/)
|
|
||||||
assert.strictEqual(log.error.firstCall[0].status, 413)
|
|
||||||
})
|
|
||||||
|
|
||||||
t.test('should fail if not a valid json', async function() {
|
|
||||||
reset()
|
|
||||||
|
|
||||||
let err = await assert.isRejected(client.customRequest('POST', '/json', 'XXXXX'))
|
|
||||||
|
|
||||||
assert.strictEqual(err.body.status, 400)
|
|
||||||
assert.match(err.body.message, /invalid json/i)
|
|
||||||
assert.match(err.body.message, /token[^X]+X/i)
|
|
||||||
assert.strictEqual(err.body.request, 'XXXXX')
|
|
||||||
assert.strictEqual(log.error.callCount, 1)
|
|
||||||
assert.match(log.error.firstCall[0].message, /invalid json/i)
|
|
||||||
assert.match(log.error.firstCall[0].message, /token[^X]+X/i)
|
|
||||||
})
|
|
||||||
|
|
||||||
t.test('should handle incomplete requests correctly', async function() {
|
|
||||||
reset()
|
|
||||||
|
|
||||||
let req = await client.customRequest('POST', '/json', 'aaaa', { returnRequest: true })
|
|
||||||
|
|
||||||
req.write('part1')
|
|
||||||
|
|
||||||
await setTimeout(20)
|
|
||||||
|
|
||||||
req.destroy()
|
|
||||||
|
|
||||||
await setTimeout(20)
|
|
||||||
|
|
||||||
assert.strictEqual(log.error.callCount, 0)
|
|
||||||
assert.strictEqual(log.info.callCount, 0)
|
|
||||||
// assert.strictEqual(log.info.firstCall[0].message, 'aborted')
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
t.describe('/timeout', function() {
|
t.describe('/timeout', function() {
|
||||||
t.test('server should handle timeout', async function() {
|
t.test('server should handle timeout', async function() {
|
||||||
reset()
|
reset()
|
||||||
|
|
||||||
let err = await assert.isRejected(client.customRequest('GET', '/timeout', JSON.stringify({}), { timeout: 20 }))
|
let err = await assert.isRejected(client.customRequest('GET', '/timeout', null, { timeout: 20 }))
|
||||||
|
|
||||||
assert.match(err.message, /timed out/)
|
assert.match(err.message, /timed out/)
|
||||||
assert.notOk(log.error.called)
|
assert.notOk(log.error.called)
|
||||||
|
|
Loading…
Reference in a new issue