@@ -387,5 +387,134 @@ void main() {
387387 expect (result.applicationName, equals ('' ));
388388 });
389389 });
390+
391+ group ('Query timeout and pool parameters' , () {
392+ test ('query_timeout parameter' , () {
393+ final result = parseConnectionString (
394+ 'postgresql://localhost/test?query_timeout=45' ,
395+ );
396+ expect (result.queryTimeout, equals (Duration (seconds: 45 )));
397+ });
398+
399+ test ('query_timeout validation' , () {
400+ expect (
401+ () => parseConnectionString (
402+ 'postgresql://localhost/test?query_timeout=invalid' ,
403+ ),
404+ throwsA (
405+ isA <ArgumentError >().having (
406+ (e) => e.message,
407+ 'message' ,
408+ contains ('Invalid query_timeout' ),
409+ ),
410+ ),
411+ );
412+ expect (
413+ () => parseConnectionString (
414+ 'postgresql://localhost/test?query_timeout=0' ,
415+ ),
416+ throwsA (
417+ isA <ArgumentError >().having (
418+ (e) => e.message,
419+ 'message' ,
420+ contains ('Invalid query_timeout' ),
421+ ),
422+ ),
423+ );
424+ });
425+
426+ test ('pool parameters with enablePoolSettings' , () {
427+ final result = parseConnectionString (
428+ 'postgresql://localhost/test?max_connection_age=3600&max_connection_count=10&max_session_use=7200&max_query_count=1000' ,
429+ enablePoolSettings: true ,
430+ );
431+ expect (result.maxConnectionAge, equals (Duration (seconds: 3600 )));
432+ expect (result.maxConnectionCount, equals (10 ));
433+ expect (result.maxSessionUse, equals (Duration (seconds: 7200 )));
434+ expect (result.maxQueryCount, equals (1000 ));
435+ });
436+
437+ test ('pool parameters rejected without enablePoolSettings' , () {
438+ expect (
439+ () => parseConnectionString (
440+ 'postgresql://localhost/test?max_connection_age=3600' ,
441+ ),
442+ throwsA (
443+ isA <ArgumentError >().having (
444+ (e) => e.message,
445+ 'message' ,
446+ contains ('Unrecognized connection parameter' ),
447+ ),
448+ ),
449+ );
450+ });
451+
452+ test ('pool parameter validation' , () {
453+ expect (
454+ () => parseConnectionString (
455+ 'postgresql://localhost/test?max_connection_age=0' ,
456+ enablePoolSettings: true ,
457+ ),
458+ throwsA (
459+ isA <ArgumentError >().having (
460+ (e) => e.message,
461+ 'message' ,
462+ contains ('Invalid max_connection_age' ),
463+ ),
464+ ),
465+ );
466+ expect (
467+ () => parseConnectionString (
468+ 'postgresql://localhost/test?max_connection_count=invalid' ,
469+ enablePoolSettings: true ,
470+ ),
471+ throwsA (
472+ isA <ArgumentError >().having (
473+ (e) => e.message,
474+ 'message' ,
475+ contains ('Invalid max_connection_count' ),
476+ ),
477+ ),
478+ );
479+ expect (
480+ () => parseConnectionString (
481+ 'postgresql://localhost/test?max_session_use=-5' ,
482+ enablePoolSettings: true ,
483+ ),
484+ throwsA (
485+ isA <ArgumentError >().having (
486+ (e) => e.message,
487+ 'message' ,
488+ contains ('Invalid max_session_use' ),
489+ ),
490+ ),
491+ );
492+ expect (
493+ () => parseConnectionString (
494+ 'postgresql://localhost/test?max_query_count=0' ,
495+ enablePoolSettings: true ,
496+ ),
497+ throwsA (
498+ isA <ArgumentError >().having (
499+ (e) => e.message,
500+ 'message' ,
501+ contains ('Invalid max_query_count' ),
502+ ),
503+ ),
504+ );
505+ });
506+
507+ test ('all timeout and pool parameters combined' , () {
508+ final result = parseConnectionString (
509+ 'postgresql://localhost/test?query_timeout=30&max_connection_age=3600&max_connection_count=20&max_session_use=7200&max_query_count=500' ,
510+ enablePoolSettings: true ,
511+ );
512+ expect (result.queryTimeout, equals (Duration (seconds: 30 )));
513+ expect (result.maxConnectionAge, equals (Duration (seconds: 3600 )));
514+ expect (result.maxConnectionCount, equals (20 ));
515+ expect (result.maxSessionUse, equals (Duration (seconds: 7200 )));
516+ expect (result.maxQueryCount, equals (500 ));
517+ });
518+ });
390519 });
391520}
0 commit comments