You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					544 lines
				
				9.7 KiB
			
		
		
			
		
	
	
					544 lines
				
				9.7 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								'use strict'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const test = require('tap').test
							 | 
						||
| 
								 | 
							
								const boot = require('..')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('boot an app with a plugin', (t) => {
							 | 
						||
| 
								 | 
							
								  t.plan(4)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const app = boot()
							 | 
						||
| 
								 | 
							
								  let last = false
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.use(function (server, opts, done) {
							 | 
						||
| 
								 | 
							
								    app.onClose(() => {
							 | 
						||
| 
								 | 
							
								      t.ok('onClose called')
							 | 
						||
| 
								 | 
							
								      t.notOk(last)
							 | 
						||
| 
								 | 
							
								      last = true
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    done()
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.on('start', () => {
							 | 
						||
| 
								 | 
							
								    app.close(() => {
							 | 
						||
| 
								 | 
							
								      t.ok(last)
							 | 
						||
| 
								 | 
							
								      t.pass('Closed in the correct order')
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('onClose arguments', (t) => {
							 | 
						||
| 
								 | 
							
								  t.plan(5)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const app = boot()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.use(function (server, opts, next) {
							 | 
						||
| 
								 | 
							
								    server.onClose((instance, done) => {
							 | 
						||
| 
								 | 
							
								      t.ok('called')
							 | 
						||
| 
								 | 
							
								      t.equal(server, instance)
							 | 
						||
| 
								 | 
							
								      done()
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    next()
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.use(function (server, opts, next) {
							 | 
						||
| 
								 | 
							
								    server.onClose((instance) => {
							 | 
						||
| 
								 | 
							
								      t.ok('called')
							 | 
						||
| 
								 | 
							
								      t.equal(server, instance)
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    next()
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.on('start', () => {
							 | 
						||
| 
								 | 
							
								    app.close(() => {
							 | 
						||
| 
								 | 
							
								      t.pass('Closed in the correct order')
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('onClose arguments - fastify encapsulation test case', (t) => {
							 | 
						||
| 
								 | 
							
								  t.plan(5)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const server = { my: 'server' }
							 | 
						||
| 
								 | 
							
								  const app = boot(server)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.override = function (s, fn, opts) {
							 | 
						||
| 
								 | 
							
								    s = Object.create(s)
							 | 
						||
| 
								 | 
							
								    return s
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.use(function (instance, opts, next) {
							 | 
						||
| 
								 | 
							
								    instance.test = true
							 | 
						||
| 
								 | 
							
								    instance.onClose((i, done) => {
							 | 
						||
| 
								 | 
							
								      t.ok(i.test)
							 | 
						||
| 
								 | 
							
								      done()
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    next()
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.use(function (instance, opts, next) {
							 | 
						||
| 
								 | 
							
								    t.notOk(instance.test)
							 | 
						||
| 
								 | 
							
								    instance.onClose((i, done) => {
							 | 
						||
| 
								 | 
							
								      t.notOk(i.test)
							 | 
						||
| 
								 | 
							
								      done()
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    next()
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.on('start', () => {
							 | 
						||
| 
								 | 
							
								    t.notOk(app.test)
							 | 
						||
| 
								 | 
							
								    app.close(() => {
							 | 
						||
| 
								 | 
							
								      t.pass('Closed in the correct order')
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('onClose arguments - fastify encapsulation test case / 2', (t) => {
							 | 
						||
| 
								 | 
							
								  t.plan(5)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const server = { my: 'server' }
							 | 
						||
| 
								 | 
							
								  const app = boot(server)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.override = function (s, fn, opts) {
							 | 
						||
| 
								 | 
							
								    s = Object.create(s)
							 | 
						||
| 
								 | 
							
								    return s
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  server.use(function (instance, opts, next) {
							 | 
						||
| 
								 | 
							
								    instance.test = true
							 | 
						||
| 
								 | 
							
								    instance.onClose((i, done) => {
							 | 
						||
| 
								 | 
							
								      t.ok(i.test)
							 | 
						||
| 
								 | 
							
								      done()
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    next()
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  server.use(function (instance, opts, next) {
							 | 
						||
| 
								 | 
							
								    t.notOk(instance.test)
							 | 
						||
| 
								 | 
							
								    instance.onClose((i, done) => {
							 | 
						||
| 
								 | 
							
								      t.notOk(i.test)
							 | 
						||
| 
								 | 
							
								      done()
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    next()
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.on('start', () => {
							 | 
						||
| 
								 | 
							
								    t.notOk(server.test)
							 | 
						||
| 
								 | 
							
								    try {
							 | 
						||
| 
								 | 
							
								      server.close()
							 | 
						||
| 
								 | 
							
								      t.pass()
							 | 
						||
| 
								 | 
							
								    } catch (err) {
							 | 
						||
| 
								 | 
							
								      t.fail(err)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('onClose arguments - encapsulation test case no server', (t) => {
							 | 
						||
| 
								 | 
							
								  t.plan(5)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const app = boot()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.override = function (s, fn, opts) {
							 | 
						||
| 
								 | 
							
								    s = Object.create(s)
							 | 
						||
| 
								 | 
							
								    return s
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.use(function (instance, opts, next) {
							 | 
						||
| 
								 | 
							
								    instance.test = true
							 | 
						||
| 
								 | 
							
								    instance.onClose((i, done) => {
							 | 
						||
| 
								 | 
							
								      t.notOk(i.test)
							 | 
						||
| 
								 | 
							
								      done()
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    next()
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.use(function (instance, opts, next) {
							 | 
						||
| 
								 | 
							
								    t.notOk(instance.test)
							 | 
						||
| 
								 | 
							
								    instance.onClose((i) => {
							 | 
						||
| 
								 | 
							
								      t.notOk(i.test)
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    next()
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.on('start', () => {
							 | 
						||
| 
								 | 
							
								    t.notOk(app.test)
							 | 
						||
| 
								 | 
							
								    app.close(() => {
							 | 
						||
| 
								 | 
							
								      t.pass('Closed in the correct order')
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('onClose should handle errors', (t) => {
							 | 
						||
| 
								 | 
							
								  t.plan(3)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const app = boot()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.use(function (server, opts, done) {
							 | 
						||
| 
								 | 
							
								    app.onClose((instance, done) => {
							 | 
						||
| 
								 | 
							
								      t.ok('called')
							 | 
						||
| 
								 | 
							
								      done(new Error('some error'))
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    done()
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.on('start', () => {
							 | 
						||
| 
								 | 
							
								    app.close(err => {
							 | 
						||
| 
								 | 
							
								      t.equal(err.message, 'some error')
							 | 
						||
| 
								 | 
							
								      t.pass('Closed in the correct order')
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('#54 close handlers should receive same parameters when queue is not empty', (t) => {
							 | 
						||
| 
								 | 
							
								  t.plan(6)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const context = { test: true }
							 | 
						||
| 
								 | 
							
								  const app = boot(context)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.use(function (server, opts, done) {
							 | 
						||
| 
								 | 
							
								    done()
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  app.on('start', () => {
							 | 
						||
| 
								 | 
							
								    app.close((err, done) => {
							 | 
						||
| 
								 | 
							
								      t.equal(err, null)
							 | 
						||
| 
								 | 
							
								      t.pass('Closed in the correct order')
							 | 
						||
| 
								 | 
							
								      setImmediate(done)
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    app.close(err => {
							 | 
						||
| 
								 | 
							
								      t.equal(err, null)
							 | 
						||
| 
								 | 
							
								      t.pass('Closed in the correct order')
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    app.close(err => {
							 | 
						||
| 
								 | 
							
								      t.equal(err, null)
							 | 
						||
| 
								 | 
							
								      t.pass('Closed in the correct order')
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('onClose should handle errors / 2', (t) => {
							 | 
						||
| 
								 | 
							
								  t.plan(4)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const app = boot()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.onClose((instance, done) => {
							 | 
						||
| 
								 | 
							
								    t.ok('called')
							 | 
						||
| 
								 | 
							
								    done(new Error('some error'))
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.use(function (server, opts, done) {
							 | 
						||
| 
								 | 
							
								    app.onClose((instance, done) => {
							 | 
						||
| 
								 | 
							
								      t.ok('called')
							 | 
						||
| 
								 | 
							
								      done()
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    done()
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.on('start', () => {
							 | 
						||
| 
								 | 
							
								    app.close(err => {
							 | 
						||
| 
								 | 
							
								      t.equal(err.message, 'some error')
							 | 
						||
| 
								 | 
							
								      t.pass('Closed in the correct order')
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('close arguments', (t) => {
							 | 
						||
| 
								 | 
							
								  t.plan(4)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const app = boot()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.use(function (server, opts, done) {
							 | 
						||
| 
								 | 
							
								    app.onClose((instance, done) => {
							 | 
						||
| 
								 | 
							
								      t.ok('called')
							 | 
						||
| 
								 | 
							
								      done()
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    done()
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.on('start', () => {
							 | 
						||
| 
								 | 
							
								    app.close((err, instance, done) => {
							 | 
						||
| 
								 | 
							
								      t.error(err)
							 | 
						||
| 
								 | 
							
								      t.equal(instance, app)
							 | 
						||
| 
								 | 
							
								      done()
							 | 
						||
| 
								 | 
							
								      t.pass('Closed in the correct order')
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('close event', (t) => {
							 | 
						||
| 
								 | 
							
								  t.plan(3)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const app = boot()
							 | 
						||
| 
								 | 
							
								  let last = false
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.on('start', () => {
							 | 
						||
| 
								 | 
							
								    app.close(() => {
							 | 
						||
| 
								 | 
							
								      t.notOk(last)
							 | 
						||
| 
								 | 
							
								      last = true
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.on('close', () => {
							 | 
						||
| 
								 | 
							
								    t.ok(last)
							 | 
						||
| 
								 | 
							
								    t.pass('event fired')
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('close order', (t) => {
							 | 
						||
| 
								 | 
							
								  t.plan(5)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const app = boot()
							 | 
						||
| 
								 | 
							
								  const order = [1, 2, 3, 4]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.use(function (server, opts, done) {
							 | 
						||
| 
								 | 
							
								    app.onClose(() => {
							 | 
						||
| 
								 | 
							
								      t.equal(order.shift(), 3)
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    app.use(function (server, opts, done) {
							 | 
						||
| 
								 | 
							
								      app.onClose(() => {
							 | 
						||
| 
								 | 
							
								        t.equal(order.shift(), 2)
							 | 
						||
| 
								 | 
							
								      })
							 | 
						||
| 
								 | 
							
								      done()
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    done()
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.use(function (server, opts, done) {
							 | 
						||
| 
								 | 
							
								    app.onClose(() => {
							 | 
						||
| 
								 | 
							
								      t.equal(order.shift(), 1)
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    done()
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.on('start', () => {
							 | 
						||
| 
								 | 
							
								    app.close(() => {
							 | 
						||
| 
								 | 
							
								      t.equal(order.shift(), 4)
							 | 
						||
| 
								 | 
							
								      t.pass('Closed in the correct order')
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('close without a cb', (t) => {
							 | 
						||
| 
								 | 
							
								  t.plan(1)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const app = boot()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.onClose((instance, done) => {
							 | 
						||
| 
								 | 
							
								    t.ok('called')
							 | 
						||
| 
								 | 
							
								    done()
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.close()
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('onClose with 0 parameters', (t) => {
							 | 
						||
| 
								 | 
							
								  t.plan(4)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const server = { my: 'server' }
							 | 
						||
| 
								 | 
							
								  const app = boot(server)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.use(function (instance, opts, next) {
							 | 
						||
| 
								 | 
							
								    instance.onClose(function () {
							 | 
						||
| 
								 | 
							
								      t.ok('called')
							 | 
						||
| 
								 | 
							
								      t.equal(arguments.length, 0)
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    next()
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.close(err => {
							 | 
						||
| 
								 | 
							
								    t.error(err)
							 | 
						||
| 
								 | 
							
								    t.pass('Closed')
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('onClose with 1 parameter', (t) => {
							 | 
						||
| 
								 | 
							
								  t.plan(3)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const server = { my: 'server' }
							 | 
						||
| 
								 | 
							
								  const app = boot(server)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.use(function (instance, opts, next) {
							 | 
						||
| 
								 | 
							
								    instance.onClose(function (context) {
							 | 
						||
| 
								 | 
							
								      t.equal(arguments.length, 1)
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    next()
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.close(err => {
							 | 
						||
| 
								 | 
							
								    t.error(err)
							 | 
						||
| 
								 | 
							
								    t.pass('Closed')
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('close passing not a function', (t) => {
							 | 
						||
| 
								 | 
							
								  t.plan(1)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const app = boot()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.onClose((instance, done) => {
							 | 
						||
| 
								 | 
							
								    t.ok('called')
							 | 
						||
| 
								 | 
							
								    done()
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  t.throws(() => app.close({}), { message: 'not a function' })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('close passing not a function', (t) => {
							 | 
						||
| 
								 | 
							
								  t.plan(1)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const app = boot()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.onClose((instance, done) => {
							 | 
						||
| 
								 | 
							
								    t.ok('called')
							 | 
						||
| 
								 | 
							
								    done()
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  t.throws(() => app.close({}), { message: 'not a function' })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('close passing not a function when wrapping', (t) => {
							 | 
						||
| 
								 | 
							
								  t.plan(1)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const app = {}
							 | 
						||
| 
								 | 
							
								  boot(app)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.onClose((instance, done) => {
							 | 
						||
| 
								 | 
							
								    t.ok('called')
							 | 
						||
| 
								 | 
							
								    done()
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  t.throws(() => app.close({}), { message: 'not a function' })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('close should trigger ready()', (t) => {
							 | 
						||
| 
								 | 
							
								  t.plan(2)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const app = boot(null, {
							 | 
						||
| 
								 | 
							
								    autostart: false
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.on('start', () => {
							 | 
						||
| 
								 | 
							
								    // this will be emitted after the
							 | 
						||
| 
								 | 
							
								    // callback in close() is fired
							 | 
						||
| 
								 | 
							
								    t.pass('started')
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.close(() => {
							 | 
						||
| 
								 | 
							
								    t.pass('closed')
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('close without a cb returns a promise', (t) => {
							 | 
						||
| 
								 | 
							
								  t.plan(1)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const app = boot()
							 | 
						||
| 
								 | 
							
								  app.close().then(() => {
							 | 
						||
| 
								 | 
							
								    t.pass('promise resolves')
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('close without a cb returns a promise when attaching to a server', (t) => {
							 | 
						||
| 
								 | 
							
								  t.plan(1)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const server = {}
							 | 
						||
| 
								 | 
							
								  boot(server)
							 | 
						||
| 
								 | 
							
								  server.close().then(() => {
							 | 
						||
| 
								 | 
							
								    t.pass('promise resolves')
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('close with async onClose handlers', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(7)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const app = boot()
							 | 
						||
| 
								 | 
							
								  const order = [1, 2, 3, 4, 5, 6]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.onClose(() => {
							 | 
						||
| 
								 | 
							
								    return new Promise(resolve => setTimeout(resolve, 500)).then(() => {
							 | 
						||
| 
								 | 
							
								      t.equal(order.shift(), 5)
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.onClose(() => {
							 | 
						||
| 
								 | 
							
								    t.equal(order.shift(), 4)
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.onClose(instance => {
							 | 
						||
| 
								 | 
							
								    return new Promise(resolve => setTimeout(resolve, 500)).then(() => {
							 | 
						||
| 
								 | 
							
								      t.equal(order.shift(), 3)
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.onClose(async instance => {
							 | 
						||
| 
								 | 
							
								    return new Promise(resolve => setTimeout(resolve, 500)).then(() => {
							 | 
						||
| 
								 | 
							
								      t.equal(order.shift(), 2)
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.onClose(async () => {
							 | 
						||
| 
								 | 
							
								    return new Promise(resolve => setTimeout(resolve, 500)).then(() => {
							 | 
						||
| 
								 | 
							
								      t.equal(order.shift(), 1)
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.on('start', () => {
							 | 
						||
| 
								 | 
							
								    app.close(() => {
							 | 
						||
| 
								 | 
							
								      t.equal(order.shift(), 6)
							 | 
						||
| 
								 | 
							
								      t.pass('Closed in the correct order')
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('onClose callback must be a function', (t) => {
							 | 
						||
| 
								 | 
							
								  t.plan(1)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const app = boot()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.use(function (server, opts, done) {
							 | 
						||
| 
								 | 
							
								    t.throws(() => app.onClose({}), { message: 'not a function' })
							 | 
						||
| 
								 | 
							
								    done()
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('close custom server with async onClose handlers', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(7)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const server = {}
							 | 
						||
| 
								 | 
							
								  const app = boot(server)
							 | 
						||
| 
								 | 
							
								  const order = [1, 2, 3, 4, 5, 6]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  server.onClose(() => {
							 | 
						||
| 
								 | 
							
								    return new Promise(resolve => setTimeout(resolve, 500)).then(() => {
							 | 
						||
| 
								 | 
							
								      t.equal(order.shift(), 5)
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  server.onClose(() => {
							 | 
						||
| 
								 | 
							
								    t.equal(order.shift(), 4)
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  server.onClose(instance => {
							 | 
						||
| 
								 | 
							
								    return new Promise(resolve => setTimeout(resolve, 500)).then(() => {
							 | 
						||
| 
								 | 
							
								      t.equal(order.shift(), 3)
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  server.onClose(async instance => {
							 | 
						||
| 
								 | 
							
								    return new Promise(resolve => setTimeout(resolve, 500)).then(() => {
							 | 
						||
| 
								 | 
							
								      t.equal(order.shift(), 2)
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  server.onClose(async () => {
							 | 
						||
| 
								 | 
							
								    return new Promise(resolve => setTimeout(resolve, 500)).then(() => {
							 | 
						||
| 
								 | 
							
								      t.equal(order.shift(), 1)
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  app.on('start', () => {
							 | 
						||
| 
								 | 
							
								    app.close(() => {
							 | 
						||
| 
								 | 
							
								      t.equal(order.shift(), 6)
							 | 
						||
| 
								 | 
							
								      t.pass('Closed in the correct order')
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 |