diff --git a/packages/redis/src/manager.ts b/packages/redis/src/manager.ts index 3bd531aa419..07d3c956ad4 100644 --- a/packages/redis/src/manager.ts +++ b/packages/redis/src/manager.ts @@ -74,12 +74,15 @@ export class RedisServiceFactory extends ServiceFactory { client = new Redis(config); } - client.on('connect', () => { - this.logger.info('[midway:redis] client connect success'); - }); - client.on('error', err => { - this.logger.error('[midway:redis] client error: %s', err); - this.logger.error(err); + await new Promise((resolve, reject) => { + client.on('connect', () => { + this.logger.info('[midway:redis] client connect success'); + resolve(); + }); + client.on('error', err => { + this.logger.error('[midway:redis] client error: %s', err); + reject(err); + }); }); return client; diff --git a/packages/redis/test/fixtures/base-app-bad-client/package.json b/packages/redis/test/fixtures/base-app-bad-client/package.json new file mode 100644 index 00000000000..08ff86d16f7 --- /dev/null +++ b/packages/redis/test/fixtures/base-app-bad-client/package.json @@ -0,0 +1,6 @@ +{ + "name": "base-app", + "version": "1.0.0", + "dependencies": { + } +} diff --git a/packages/redis/test/fixtures/base-app-bad-client/src/config.default.ts b/packages/redis/test/fixtures/base-app-bad-client/src/config.default.ts new file mode 100644 index 00000000000..8c28919f945 --- /dev/null +++ b/packages/redis/test/fixtures/base-app-bad-client/src/config.default.ts @@ -0,0 +1,10 @@ +export const redis = { + client: { + host: '128.0.0.2', + port: 6379, + password: '', + db: '0', + connectTimeout: 2e3, + retryStrategy: () => null + }, +}; diff --git a/packages/redis/test/fixtures/base-app-bad-client/src/configuration.ts b/packages/redis/test/fixtures/base-app-bad-client/src/configuration.ts new file mode 100644 index 00000000000..e3274d20e24 --- /dev/null +++ b/packages/redis/test/fixtures/base-app-bad-client/src/configuration.ts @@ -0,0 +1,14 @@ +import { Configuration } from '@midwayjs/decorator'; +import { join } from 'path'; + +@Configuration({ + imports: [ + require('../../../../src') + ], + importConfigs: [ + join(__dirname, './config.default'), + ] +}) +export class AutoConfiguration { + +} diff --git a/packages/redis/test/index.test.ts b/packages/redis/test/index.test.ts index 0de955a0bd2..b6da7b2d099 100644 --- a/packages/redis/test/index.test.ts +++ b/packages/redis/test/index.test.ts @@ -58,4 +58,10 @@ describe('/test/index.test.ts', () => { await close(app); }); + it('should fail when unable to connect redis', async () => { + await expect(createLightApp(join(__dirname, './fixtures/base-app-bad-client'))) + .rejects + .toThrow('connect ETIMEDOUT'); + }); + });