| 54 | } |
| 55 | |
| 56 | function cleanup(spy, callback) { |
| 57 | if (typeof spy === 'function') { |
| 58 | callback = spy; |
| 59 | spy = undefined; |
| 60 | } |
| 61 | |
| 62 | if (spy) { |
| 63 | const alreadyDrained = spy.connectionCount() === 0; |
| 64 | const drainedPromise = !alreadyDrained |
| 65 | ? new Promise(resolve => spy.once('drained', () => resolve())) |
| 66 | : Promise.resolve(); |
| 67 | |
| 68 | const cleanupPromise = Promise.all(mockServers.map(server => server.destroy())) |
| 69 | .then(drainedPromise) |
| 70 | .then(() => { |
| 71 | mockServers = []; |
| 72 | }) |
| 73 | .catch(err => { |
| 74 | mockServers = []; |
| 75 | throw err; |
| 76 | }); |
| 77 | |
| 78 | if (typeof callback !== 'function') { |
| 79 | return cleanupPromise; |
| 80 | } |
| 81 | |
| 82 | return cleanupPromise.then(() => callback(null, null)).catch(err => callback(err, null)); |
| 83 | } else { |
| 84 | const cleanupPromise = Promise.all(mockServers.map(server => server.destroy())); |
| 85 | if (typeof callback !== 'function') { |
| 86 | return cleanupPromise; |
| 87 | } |
| 88 | |
| 89 | return cleanupPromise.then(() => callback(null, null)).catch(err => callback(err, null)); |
| 90 | } |
| 91 | } |
| 92 | |
| 93 | module.exports = { |
| 94 | createServer, |