@@ -900,6 +900,64 @@ fn returning_1xx_response_is_error() {
900
900
core. run ( fut) . unwrap_err ( ) ;
901
901
}
902
902
903
+ #[ test]
904
+ fn parse_errors_send_4xx_response ( ) {
905
+ let mut core = Core :: new ( ) . unwrap ( ) ;
906
+ let listener = TcpListener :: bind ( & "127.0.0.1:0" . parse ( ) . unwrap ( ) , & core. handle ( ) ) . unwrap ( ) ;
907
+ let addr = listener. local_addr ( ) . unwrap ( ) ;
908
+
909
+ thread:: spawn ( move || {
910
+ let mut tcp = connect ( & addr) ;
911
+ tcp. write_all ( b"GE T / HTTP/1.1\r \n \r \n " ) . unwrap ( ) ;
912
+ let mut buf = [ 0 ; 256 ] ;
913
+ tcp. read ( & mut buf) . unwrap ( ) ;
914
+
915
+ let expected = "HTTP/1.1 400 " ;
916
+ assert_eq ! ( s( & buf[ ..expected. len( ) ] ) , expected) ;
917
+ } ) ;
918
+
919
+ let fut = listener. incoming ( )
920
+ . into_future ( )
921
+ . map_err ( |_| unreachable ! ( ) )
922
+ . and_then ( |( item, _incoming) | {
923
+ let ( socket, _) = item. unwrap ( ) ;
924
+ Http :: < hyper:: Chunk > :: new ( )
925
+ . serve_connection ( socket, HelloWorld )
926
+ . map ( |_| ( ) )
927
+ } ) ;
928
+
929
+ core. run ( fut) . unwrap_err ( ) ;
930
+ }
931
+
932
+ #[ test]
933
+ fn illegal_request_length_returns_400_response ( ) {
934
+ let mut core = Core :: new ( ) . unwrap ( ) ;
935
+ let listener = TcpListener :: bind ( & "127.0.0.1:0" . parse ( ) . unwrap ( ) , & core. handle ( ) ) . unwrap ( ) ;
936
+ let addr = listener. local_addr ( ) . unwrap ( ) ;
937
+
938
+ thread:: spawn ( move || {
939
+ let mut tcp = connect ( & addr) ;
940
+ tcp. write_all ( b"POST / HTTP/1.1\r \n Content-Length: foo\r \n \r \n " ) . unwrap ( ) ;
941
+ let mut buf = [ 0 ; 256 ] ;
942
+ tcp. read ( & mut buf) . unwrap ( ) ;
943
+
944
+ let expected = "HTTP/1.1 400 " ;
945
+ assert_eq ! ( s( & buf[ ..expected. len( ) ] ) , expected) ;
946
+ } ) ;
947
+
948
+ let fut = listener. incoming ( )
949
+ . into_future ( )
950
+ . map_err ( |_| unreachable ! ( ) )
951
+ . and_then ( |( item, _incoming) | {
952
+ let ( socket, _) = item. unwrap ( ) ;
953
+ Http :: < hyper:: Chunk > :: new ( )
954
+ . serve_connection ( socket, HelloWorld )
955
+ . map ( |_| ( ) )
956
+ } ) ;
957
+
958
+ core. run ( fut) . unwrap_err ( ) ;
959
+ }
960
+
903
961
#[ test]
904
962
fn remote_addr ( ) {
905
963
let server = serve ( ) ;
0 commit comments