@@ -21,6 +21,7 @@ import Driver from '../src/driver'
2121import { Bookmarks } from '../src/internal/bookmarks'
2222import { Logger } from '../src/internal/logger'
2323import { ConfiguredCustomResolver } from '../src/internal/resolver'
24+ import { LogLevel } from '../src/types'
2425
2526describe ( 'Driver' , ( ) => {
2627 let driver : Driver | null
@@ -155,6 +156,44 @@ describe('Driver', () => {
155156 expect ( driver . isEncrypted ( ) ) . toEqual ( expectedValue )
156157 } )
157158
159+ it . each ( [
160+ [ { connectionTimeout : 30000 , connectionAcquisitionTimeout : 60000 } , true ] ,
161+ [ { connectionTimeout : null , connectionAcquisitionTimeout : 60000 } , true ] ,
162+ [ { connectionTimeout : 30000 , connectionAcquisitionTimeout : null } , true ] ,
163+ [ { connectionTimeout : null , connectionAcquisitionTimeout : null } , true ] ,
164+ [ { connectionAcquisitionTimeout : 60000 } , true ] ,
165+ [ { connectionTimeout : 30000 } , true ] ,
166+ [ { } , true ] ,
167+ [ { connectionTimeout : 30000 , connectionAcquisitionTimeout : 20000 } , false ] ,
168+ [ { connectionAcquisitionTimeout : 20000 } , false ] ,
169+ [ { connectionTimeout : 70000 } , false ] ,
170+ // No connection timeouts should be considered valid, since it means
171+ // the user doesn't case about the connection timeout at all.
172+ [ { connectionTimeout : 0 , connectionAcquisitionTimeout : 2000 } , true ] ,
173+ [ { connectionTimeout : - 1 , connectionAcquisitionTimeout : 2000 } , true ] ,
174+ ] ) ( 'should emit warning if `connectionAcquisitionTimeout` and `connectionTimeout` are conflicting. [%o} ' , async ( config , valid ) => {
175+ const logging = {
176+ level : 'warn' as LogLevel ,
177+ logger : jest . fn ( )
178+ }
179+
180+ const driver = new Driver ( META_INFO , { ...config , logging } , mockCreateConnectonProvider ( new ConnectionProvider ( ) ) , createSession )
181+
182+ if ( valid ) {
183+ expect ( logging . logger ) . not . toHaveBeenCalled ( )
184+ } else {
185+ expect ( logging . logger ) . toHaveBeenCalledWith (
186+ 'warn' ,
187+ 'Configuration for "connectionAcquisitionTimeout" should be greater than ' +
188+ 'or equal to "connectionTimeout". Otherwise, the connection acquisition ' +
189+ 'timeout will take precedence for over the connection timeout in scenarios ' +
190+ 'where a new connection is created while it is acquired'
191+ )
192+ }
193+
194+ await driver . close ( )
195+ } )
196+
158197 function mockCreateConnectonProvider ( connectionProvider : ConnectionProvider ) {
159198 return (
160199 id : number ,
@@ -172,6 +211,7 @@ describe('Driver', () => {
172211 fetchSize : 1000 ,
173212 maxConnectionLifetime : 3600000 ,
174213 maxConnectionPoolSize : 100 ,
214+ connectionTimeout : 30000 ,
175215 } ,
176216 connectionProvider,
177217 database : '' ,
0 commit comments