it('should production env stdout message include "Egg started"', done => { mm.env('prod'); mm.consoleLevel('NONE'); mm.home(utils.getFilepath('apps/mock-production-app/config')); app = utils.cluster('apps/mock-production-app', { coverage: true }); app.expect('stdout', /Egg started/).ready(done); });
before(() => { mm.env('local'); app = utils.cluster('apps/reload-worker'); app.debug(); app.coverage(false); return app.ready(); });
before(() => { mm.env('local'); app = mm.cluster({ baseDir: 'custom', }); app.debug(); return app.ready(); });
before(() => { mm.env('local'); mm.consoleLevel('NONE'); app = mm.app({ baseDir: 'onerror-ctx-error', }); return app.ready(); });
it('should use exists keys', async () => { mm.env('unittest'); app = utils.app('apps/keys-exists'); await app.ready(); assert(app.keys); assert(app.keys); assert(app.config.keys === 'my keys'); await app.close(); });
it('should set EGG_LOG level on local env', async () => { mm.env('local'); mm(process.env, 'EGG_LOG', 'ERROR'); app = utils.app('apps/mock-dev-app'); await app.ready(); assert(app.logger.get('file').options.level === Logger.INFO); assert(app.logger.get('console').options.level === Logger.ERROR); assert(app.coreLogger.get('file').options.level === Logger.INFO); assert(app.coreLogger.get('console').options.level === Logger.ERROR); assert(app.config.logger.disableConsoleAfterReady === false); });
it('should got right config on unittest env', async () => { mm.env('unittest'); mm(process.env, 'EGG_LOG', ''); app = utils.app('apps/mock-dev-app'); await app.ready(); assert(app.logger.get('file').options.level === Logger.INFO); assert(app.logger.get('console').options.level === Logger.WARN); assert(app.coreLogger.get('file').options.level === Logger.INFO); assert(app.coreLogger.get('console').options.level === Logger.WARN); assert(app.config.logger.disableConsoleAfterReady === false); });
it('should still output to console after app ready on local env', done => { mm.env('local'); app = utils.cluster('apps/logger'); app // .debug() .coverage(false) .expect('stdout', /agent info/) .expect('stdout', /app info/) .expect('stdout', /app info after ready/) .expect('stderr', /nodejs.Error: agent error/) .expect('stderr', /nodejs.Error: app error/) .end(done); });
it('dont output to console after app ready', done => { mm.env('default'); app = utils.cluster('apps/logger'); app .debug(false) .coverage(false) .expect('stdout', /agent info/) .expect('stdout', /app info/) .notExpect('stdout', /app info after ready/) .expect('stderr', /nodejs.Error: agent error/) .expect('stderr', /nodejs.Error: app error/) .end(done); });
it('should got right level on prod env when set allowDebugAtProd to false', async () => { mm.env('prod'); mm(process.env, 'EGG_LOG', ''); mm(process.env, 'HOME', utils.getFilepath('apps/mock-production-app-do-not-force/config')); app = utils.app('apps/mock-production-app-do-not-force'); await app.ready(); assert(app.config.logger.allowDebugAtProd === false); assert(app.logger.get('file').options.level === Logger.DEBUG); assert(app.logger.get('console').options.level === Logger.INFO); assert(app.coreLogger.get('file').options.level === Logger.DEBUG); assert(app.coreLogger.get('console').options.level === Logger.INFO); });
it('should got right default config on prod env', async () => { mm.env('prod'); mm(process.env, 'EGG_LOG', ''); mm(process.env, 'HOME', utils.getFilepath('apps/mock-production-app/config')); app = utils.app('apps/mock-production-app'); await app.ready(); // 生产环境默认 _level = info assert(app.logger.get('file').options.level === Logger.INFO); // stdout 默认 INFO assert(app.logger.get('console').options.level === Logger.INFO); assert(app.coreLogger.get('file').options.level === Logger.INFO); assert(app.coreLogger.get('console').options.level === Logger.INFO); assert(app.config.logger.disableConsoleAfterReady === true); });
it('output .json format log', async () => { mm(process.env, 'EGG_LOG', 'none'); mm.env('local'); app = utils.app('apps/logger-output-json'); await app.ready(); const ctx = app.mockContext(); const logfile = path.join(app.config.logger.dir, 'logger-output-json-web.json.log'); ctx.logger.info('json format'); await sleep(1000); assert(fs.existsSync(logfile)); assert(fs.readFileSync(logfile, 'utf8').includes('"message":"json format"')); });
it('should throw when config.keys missing on local env', async () => { mm.env('local'); app = utils.app('apps/keys-missing'); await app.ready(); mm(app.config, 'keys', null); try { app.keys; throw new Error('should not run this'); } catch (err) { assert(err.message === 'Please set config.keys first'); } // make sure app close await app.close(); });
it('log buffer enable cache on non-local and non-unittest env', async () => { mm(process.env, 'EGG_LOG', 'none'); mm.env('prod'); mm(process.env, 'HOME', utils.getFilepath('apps/mock-production-app/config')); app = utils.app('apps/mock-production-app'); await app.ready(); assert(app.config.logger.disableConsoleAfterReady === true); const ctx = app.mockContext(); const logfile = path.join(app.config.logger.dir, 'common-error.log'); // app.config.logger.buffer.should.equal(true); ctx.logger.error(new Error('mock enable buffer error')); await sleep(1000); assert(fs.readFileSync(logfile, 'utf8').includes('')); });
it('agent and app error should output to common-error.log', done => { const baseDir = utils.getFilepath('apps/logger'); mm.env('default'); mm(process.env, 'EGG_LOG', 'none'); mm(process.env, 'EGG_HOME', baseDir); app = utils.cluster('apps/logger'); app // .debug() .coverage(false) .end(err => { assert(!err); const content = fs.readFileSync(path.join(baseDir, 'logs/logger/common-error.log'), 'utf8'); assert(content.includes('nodejs.Error: agent error')); assert(content.includes('nodejs.Error: app error')); done(); }); });
before(() => { mm.env('local'); mm(process.env, 'EGG_LOG', 'none'); app = utils.app('apps/development'); return app.ready(); });
before(() => { mm.env('prod'); mm.home(utils.getFilepath('apps/custom-env-app')); app = utils.cluster('apps/custom-env-app'); return app.ready(); });
before(() => { mm.env('default'); app = utils.cluster('apps/app-die'); app.coverage(false); return app.ready(); });
before(() => { mock.env('local'); app = mock.app(); return app.ready(); });