@@ -1198,6 +1198,108 @@ module.exports = (sql, driver) => {
11981198 } )
11991199 } ,
12001200
1201+ 'per-request timeout overrides pool default' ( done , driver , message ) {
1202+ const config = readConfig ( )
1203+ config . driver = driver
1204+ config . requestTimeout = 15000
1205+
1206+ new sql . ConnectionPool ( config ) . connect ( ) . then ( conn => {
1207+ const req = new sql . Request ( conn , { requestTimeout : 1000 } )
1208+ req . query ( 'waitfor delay \'00:00:05\';select 1' ) . catch ( err => {
1209+ assert . ok ( ( message ? ( message . exec ( err . message ) != null ) : ( err instanceof sql . RequestError ) ) )
1210+
1211+ conn . close ( )
1212+ done ( )
1213+ } )
1214+ } ) . catch ( done )
1215+ } ,
1216+
1217+ 'per-request timeout does not affect other requests' ( done , driver , message ) {
1218+ const config = readConfig ( )
1219+ config . driver = driver
1220+ config . requestTimeout = 15000
1221+
1222+ new sql . ConnectionPool ( config ) . connect ( ) . then ( conn => {
1223+ const reqFast = new sql . Request ( conn , { requestTimeout : 1000 } )
1224+ const reqNormal = new sql . Request ( conn )
1225+
1226+ Promise . allSettled ( [
1227+ reqFast . query ( 'waitfor delay \'00:00:05\';select 1' ) ,
1228+ reqNormal . query ( 'waitfor delay \'00:00:02\';select 1' )
1229+ ] ) . then ( ( [ fastResult , normalResult ] ) => {
1230+ assert . strictEqual ( fastResult . status , 'rejected' )
1231+ assert . ok ( ( message ? ( message . exec ( fastResult . reason . message ) != null ) : ( fastResult . reason instanceof sql . RequestError ) ) )
1232+ assert . strictEqual ( normalResult . status , 'fulfilled' )
1233+
1234+ conn . close ( )
1235+ done ( )
1236+ } )
1237+ } ) . catch ( done )
1238+ } ,
1239+
1240+ 'per-request timeout in transaction' ( done , driver , message ) {
1241+ const config = readConfig ( )
1242+ config . driver = driver
1243+ config . requestTimeout = 15000
1244+
1245+ new sql . ConnectionPool ( config ) . connect ( ) . then ( conn => {
1246+ const tx = new sql . Transaction ( conn , { requestTimeout : 1000 } )
1247+ tx . begin ( ) . then ( ( ) => {
1248+ const req = tx . request ( )
1249+ req . query ( 'waitfor delay \'00:00:05\';select 1' ) . catch ( err => {
1250+ assert . ok ( ( message ? ( message . exec ( err . message ) != null ) : ( err instanceof sql . RequestError ) ) )
1251+
1252+ tx . rollback ( ) . then ( ( ) => {
1253+ conn . close ( )
1254+ done ( )
1255+ } ) . catch ( ( ) => {
1256+ conn . close ( )
1257+ done ( )
1258+ } )
1259+ } )
1260+ } )
1261+ } ) . catch ( done )
1262+ } ,
1263+
1264+ 'per-request timeout on stored procedure' ( done , driver , message ) {
1265+ const config = readConfig ( )
1266+ config . driver = driver
1267+ config . requestTimeout = 15000
1268+
1269+ new sql . ConnectionPool ( config ) . connect ( ) . then ( conn => {
1270+ const req = new sql . Request ( conn , { requestTimeout : 1000 } )
1271+ req . execute ( '__testDelay' ) . catch ( err => {
1272+ assert . ok ( ( message ? ( message . exec ( err . message ) != null ) : ( err instanceof sql . RequestError ) ) )
1273+
1274+ conn . close ( )
1275+ done ( )
1276+ } )
1277+ } ) . catch ( done )
1278+ } ,
1279+
1280+ 'per-request timeout on prepared statement' ( done , driver , message ) {
1281+ const config = readConfig ( )
1282+ config . driver = driver
1283+ config . requestTimeout = 15000
1284+
1285+ new sql . ConnectionPool ( config ) . connect ( ) . then ( conn => {
1286+ const ps = new sql . PreparedStatement ( conn , { requestTimeout : 1000 } )
1287+ ps . prepare ( 'waitfor delay \'00:00:05\';select 1' ) . then ( ( ) => {
1288+ ps . execute ( ) . catch ( err => {
1289+ assert . ok ( ( message ? ( message . exec ( err . message ) != null ) : ( err instanceof sql . RequestError ) ) )
1290+
1291+ ps . unprepare ( ) . then ( ( ) => {
1292+ conn . close ( )
1293+ done ( )
1294+ } ) . catch ( ( ) => {
1295+ conn . close ( )
1296+ done ( )
1297+ } )
1298+ } )
1299+ } )
1300+ } ) . catch ( done )
1301+ } ,
1302+
12011303 'type validation' ( mode , done ) {
12021304 const req = new TestRequest ( )
12031305 req . input ( 'image' , sql . VarBinary , 'asdf' )
0 commit comments