Skip to content

Commit

Permalink
Do not handle server errors.
Browse files Browse the repository at this point in the history
  • Loading branch information
Gerhut committed May 30, 2024
1 parent 511eef4 commit 6f9f761
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 76 deletions.
6 changes: 1 addition & 5 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,7 @@ const createAdapter = handler => config => new Promise((resolve, reject) => {
const server = handler instanceof Server ? handler : createServer(handler)
const listening = server.listening

server.on('error', reject);

/** @type {Promise<void>} */ (
;/** @type {Promise<void>} */ (
new Promise(resolve => {
if (listening) {
resolve()
Expand All @@ -71,7 +69,6 @@ const createAdapter = handler => config => new Promise((resolve, reject) => {
}
).then(
(response) => {
server.off('error', reject)
if (listening) {
return response
} else {
Expand All @@ -81,7 +78,6 @@ const createAdapter = handler => config => new Promise((resolve, reject) => {
}
},
(error) => {
server.off('error', reject)
if (listening) {
throw error
} else {
Expand Down
57 changes: 57 additions & 0 deletions test-server.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
const { createServer } = require('http')
const test = require('ava').default
const axiosist = require('.').default

test('should work with unlistened http server', async t => {
const server = createServer((req, res) => res.end('foo'))
const response = await axiosist(server).get('/')

t.is(/** @type {string} */(response.data), 'foo')
t.false(server.listening)
})

test('should work with unlistened http server (client failure)', async t => {
const server = createServer((req, res) => res.end('bar'))

await t.throwsAsync(axiosist(server).get('/', { maxContentLength: 1 }), { message: /maxContentLength/ })
t.false(server.listening)
})

test('should work with unlistened http server (server failure)', async t => {
const server = createServer((req, res) => res.destroy())

await t.throwsAsync(axiosist(server).get('/'), { message: 'socket hang up' })
t.false(server.listening)
})

test('should work with listened http server', async t => {
const server = createServer((req, res) => res.end('bar'))
await new Promise(resolve => server.listen(resolve))

const response = await axiosist(server).get('/')

t.is(/** @type {string} */(response.data), 'bar')
t.true(server.listening)

await new Promise(resolve => server.close(resolve))
})

test('should work with listened http server (client failure)', async t => {
const server = createServer((req, res) => res.end('bar'))
await new Promise(resolve => server.listen(resolve))

await t.throwsAsync(axiosist(server).get('/', { maxContentLength: 1 }), { message: 'maxContentLength size of 1 exceeded' })
t.true(server.listening)

await new Promise(resolve => server.close(resolve))
})

test('should work with listened http server (server failure)', async t => {
const server = createServer((req, res) => res.destroy())
await new Promise(resolve => server.listen(resolve))

await t.throwsAsync(axiosist(server).get('/'), { message: 'socket hang up' })
t.true(server.listening)

await new Promise(resolve => server.close(resolve))
})
80 changes: 9 additions & 71 deletions test.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
const { createServer } = require('http')
const test = require('ava').default
const axiosist = require('.').default

Expand Down Expand Up @@ -98,7 +97,15 @@ test('should response the right body', async t => {
t.is(/** @type {string} */(response.data), 'foo')
})

test('should fail correctly', async t => {
test('should handle server failure', async t => {
await t.throwsAsync(axiosist((req, res) => {
res.destroy()
}).request({
url: '/'
}), { message: 'socket hang up' })
})

test('should handle client failure', async t => {
await t.throwsAsync(axiosist((req, res) => {
res.end('foo')
}).request({
Expand All @@ -117,72 +124,3 @@ test('should response redirect', async t => {
t.is(response.status, 302)
t.is(response.headers.location, 'http://example.com/')
})

test('should work with unlistened http server', async t => {
const server = createServer((req, res) => res.end('foo'))
const response = await axiosist(server).get('/')

t.is(/** @type {string} */(response.data), 'foo')
t.false(server.listening)
})

test('should work with listened http server', async t => {
const server = createServer((req, res) => res.end('bar'))
await new Promise(resolve => server.listen(resolve))

const response = await axiosist(server).get('/')

t.is(/** @type {string} */(response.data), 'bar')
t.true(server.listening)

await new Promise(resolve => server.close(resolve))
})

test('should work with listened http server (failed request)', async t => {
const server = createServer((req, res) => res.end('bar'))
await new Promise(resolve => server.listen(resolve))

await t.throwsAsync(axiosist(server).get('/', { maxContentLength: 1 }))
t.true(server.listening)

await new Promise(resolve => server.close(resolve))
})

test('should fail with client error', async t => {
/** @type {import('http').Server} */
const server = createServer((req, res) => res.destroy())
await t.throwsAsync(axiosist(server).get('/'), { message: 'socket hang up' })
})

test('should not keep error listeners', async t => {
const server = createServer((req, res) => res.end())

await axiosist(server).get('/')
t.is(server.listenerCount('error'), 0)
})

test('should not keep error listeners (client error)', async t => {
const server = createServer((req, res) => res.end('foo'))

await t.throwsAsync(axiosist(server).get('/', { maxContentLength: 1 }))
t.is(server.listenerCount('error'), 0)
})

test('should fail with server error', async t => {
const server = createServer()
server.on('request', (req, res) => {
server.emit('error', new Error('foo'))
res.end()
})
await t.throwsAsync(axiosist(server).get('/'), { message: 'foo' })
})

test('should fail with handled server error', async t => {
const server = createServer()
server.on('request', (req, res) => {
server.emit('error', new Error('foo'))
res.end()
})
server.on('error', (err) => console.error(err))
await t.throwsAsync(axiosist(server).get('/'), { message: 'foo' })
})

0 comments on commit 6f9f761

Please sign in to comment.