@@ -641,12 +641,14 @@ describe('morgan()', function () {
641
641
. expect ( 200 , cb )
642
642
} )
643
643
644
- it ( 'should not include response latency ' , function ( done ) {
644
+ it ( 'should not include response write time ' , function ( done ) {
645
645
var cb = after ( 2 , function ( err , res , line ) {
646
646
if ( err ) return done ( err )
647
+ var end = Date . now ( )
647
648
var ms = parseFloat ( line )
648
- assert . ok ( ms > 0 , 'positive milliseconds' )
649
- assert . ok ( ms < end - start + 1 , 'response time expected to be < ' + ( end - start + 1 ) + ', but was ' + ms )
649
+ assert ( ms > 0 )
650
+ assert ( ms < end - start + 1 )
651
+ assert ( ms < write - start + 1 )
650
652
done ( )
651
653
} )
652
654
@@ -656,15 +658,15 @@ describe('morgan()', function () {
656
658
657
659
var server = createServer ( ':response-time' , { stream : stream } , function ( req , res ) {
658
660
res . write ( 'hello, ' )
659
- end = Date . now ( )
661
+ write = Date . now ( )
660
662
661
663
setTimeout ( function ( ) {
662
664
res . end ( 'world!' )
663
665
} , 50 )
664
666
} )
665
667
666
- var end
667
668
var start = Date . now ( )
669
+ var write = null
668
670
669
671
request ( server )
670
672
. get ( '/' )
@@ -796,6 +798,180 @@ describe('morgan()', function () {
796
798
} )
797
799
} )
798
800
801
+ describe ( ':total-time' , function ( ) {
802
+ it ( 'should be in milliseconds' , function ( done ) {
803
+ var cb = after ( 2 , function ( err , res , line ) {
804
+ if ( err ) return done ( err )
805
+ var end = Date . now ( )
806
+ var ms = parseFloat ( line )
807
+ assert ( ms > 0 )
808
+ assert ( ms < end - start + 1 )
809
+ done ( )
810
+ } )
811
+
812
+ var stream = createLineStream ( function ( line ) {
813
+ cb ( null , null , line )
814
+ } )
815
+
816
+ var start = Date . now ( )
817
+
818
+ request ( createServer ( ':total-time' , { stream : stream } ) )
819
+ . get ( '/' )
820
+ . expect ( 200 , cb )
821
+ } )
822
+
823
+ it ( 'should have three digits by default' , function ( done ) {
824
+ var cb = after ( 2 , function ( err , res , line ) {
825
+ if ( err ) return done ( err )
826
+ assert . ok ( / ^ [ 0 - 9 ] + \. [ 0 - 9 ] { 3 } $ / . test ( line ) )
827
+ done ( )
828
+ } )
829
+
830
+ var stream = createLineStream ( function ( line ) {
831
+ cb ( null , null , line )
832
+ } )
833
+
834
+ request ( createServer ( ':total-time' , { stream : stream } ) )
835
+ . get ( '/' )
836
+ . expect ( 200 , cb )
837
+ } )
838
+
839
+ it ( 'should have five digits with argument "5"' , function ( done ) {
840
+ var cb = after ( 2 , function ( err , res , line ) {
841
+ if ( err ) return done ( err )
842
+ assert . ok ( / ^ [ 0 - 9 ] + \. [ 0 - 9 ] { 5 } $ / . test ( line ) )
843
+ done ( )
844
+ } )
845
+
846
+ var stream = createLineStream ( function ( line ) {
847
+ cb ( null , null , line )
848
+ } )
849
+
850
+ request ( createServer ( ':total-time[5]' , { stream : stream } ) )
851
+ . get ( '/' )
852
+ . expect ( 200 , cb )
853
+ } )
854
+
855
+ it ( 'should have no digits with argument "0"' , function ( done ) {
856
+ var cb = after ( 2 , function ( err , res , line ) {
857
+ if ( err ) return done ( err )
858
+ assert . ok ( / ^ [ 0 - 9 ] + $ / . test ( line ) )
859
+ done ( )
860
+ } )
861
+
862
+ var stream = createLineStream ( function ( line ) {
863
+ cb ( null , null , line )
864
+ } )
865
+
866
+ request ( createServer ( ':total-time[0]' , { stream : stream } ) )
867
+ . get ( '/' )
868
+ . expect ( 200 , cb )
869
+ } )
870
+
871
+ it ( 'should include response write time' , function ( done ) {
872
+ var cb = after ( 2 , function ( err , res , line ) {
873
+ if ( err ) return done ( err )
874
+ var end = Date . now ( )
875
+ var ms = parseFloat ( line )
876
+ assert ( ms > 0 )
877
+ assert ( ms > write - start - 1 )
878
+ assert ( ms < end - start + 1 )
879
+ done ( )
880
+ } )
881
+
882
+ var stream = createLineStream ( function ( line ) {
883
+ cb ( null , null , line )
884
+ } )
885
+
886
+ var server = createServer ( ':total-time' , { stream : stream } , function ( req , res ) {
887
+ res . write ( 'hello, ' )
888
+ write = Date . now ( )
889
+
890
+ setTimeout ( function ( ) {
891
+ res . end ( 'world!' )
892
+ } , 50 )
893
+ } )
894
+
895
+ var start = Date . now ( )
896
+ var write = null
897
+
898
+ request ( server )
899
+ . get ( '/' )
900
+ . expect ( 200 , cb )
901
+ } )
902
+
903
+ it ( 'should be empty without hidden property' , function ( done ) {
904
+ var cb = after ( 2 , function ( err , res , line ) {
905
+ if ( err ) return done ( err )
906
+ assert . strictEqual ( line , '-' )
907
+ done ( )
908
+ } )
909
+
910
+ var stream = createLineStream ( function ( line ) {
911
+ cb ( null , null , line )
912
+ } )
913
+
914
+ var server = createServer ( ':total-time' , { stream : stream } , function ( req , res , next ) {
915
+ delete req . _startAt
916
+ next ( )
917
+ } )
918
+
919
+ request ( server )
920
+ . get ( '/' )
921
+ . expect ( 200 , cb )
922
+ } )
923
+
924
+ it ( 'should be empty before response' , function ( done ) {
925
+ var cb = after ( 2 , function ( err , res , line ) {
926
+ if ( err ) return done ( err )
927
+ assert . strictEqual ( line , '-' )
928
+ done ( )
929
+ } )
930
+
931
+ var stream = createLineStream ( function ( line ) {
932
+ cb ( null , null , line )
933
+ } )
934
+
935
+ var server = createServer ( ':total-time' , {
936
+ immediate : true ,
937
+ stream : stream
938
+ } )
939
+
940
+ request ( server )
941
+ . get ( '/' )
942
+ . expect ( 200 , cb )
943
+ } )
944
+
945
+ it ( 'should be empty if morgan invoked after response sent' , function ( done ) {
946
+ var cb = after ( 3 , function ( err , res , line ) {
947
+ if ( err ) return done ( err )
948
+ assert . strictEqual ( line , '-' )
949
+ done ( )
950
+ } )
951
+
952
+ var stream = createLineStream ( function ( line ) {
953
+ cb ( null , null , line )
954
+ } )
955
+
956
+ var logger = morgan ( ':total-time' , {
957
+ immediate : true ,
958
+ stream : stream
959
+ } )
960
+
961
+ var server = http . createServer ( function ( req , res ) {
962
+ setTimeout ( function ( ) {
963
+ logger ( req , res , cb )
964
+ } , 10 )
965
+
966
+ res . end ( )
967
+ } )
968
+
969
+ request ( server )
970
+ . get ( '/' )
971
+ . expect ( 200 , cb )
972
+ } )
973
+ } )
974
+
799
975
describe ( ':url' , function ( ) {
800
976
it ( 'should get request URL' , function ( done ) {
801
977
var cb = after ( 2 , function ( err , res , line ) {
0 commit comments