@@ -701,10 +701,12 @@ fn test_transactional(
701701fn _test_sender_auto_detect_protocol_version (
702702 supported_versions : Option < Vec < u16 > > ,
703703 expect_version : ProtocolVersion ,
704+ max_name_len : usize ,
705+ expect_max_name_len : usize ,
704706) -> TestResult {
705707 let supported_versions1 = supported_versions. clone ( ) ;
706708 let mut server = MockServer :: new ( ) ?
707- . configure_settings_response ( supported_versions. as_deref ( ) . unwrap_or ( & [ ] ) ) ;
709+ . configure_settings_response ( supported_versions. as_deref ( ) . unwrap_or ( & [ ] ) , max_name_len ) ;
708710 let sender_builder = server. lsb_http ( ) ;
709711
710712 let server_thread = std:: thread:: spawn ( move || -> io:: Result < MockServer > {
@@ -735,6 +737,7 @@ fn _test_sender_auto_detect_protocol_version(
735737
736738 let mut sender = sender_builder. build ( ) ?;
737739 assert_eq ! ( sender. protocol_version( ) , expect_version) ;
740+ assert_eq ! ( sender. max_name_len( ) , expect_max_name_len) ;
738741 let mut buffer = sender. new_buffer ( ) ;
739742 buffer
740743 . table ( "test" ) ?
@@ -749,32 +752,32 @@ fn _test_sender_auto_detect_protocol_version(
749752
750753#[ test]
751754fn test_sender_auto_protocol_version_basic ( ) -> TestResult {
752- _test_sender_auto_detect_protocol_version ( Some ( vec ! [ 1 , 2 ] ) , ProtocolVersion :: V2 )
755+ _test_sender_auto_detect_protocol_version ( Some ( vec ! [ 1 , 2 ] ) , ProtocolVersion :: V2 , 130 , 130 )
753756}
754757
755758#[ test]
756759fn test_sender_auto_protocol_version_old_server1 ( ) -> TestResult {
757- _test_sender_auto_detect_protocol_version ( Some ( vec ! [ ] ) , ProtocolVersion :: V1 )
760+ _test_sender_auto_detect_protocol_version ( Some ( vec ! [ ] ) , ProtocolVersion :: V1 , 0 , 127 )
758761}
759762
760763#[ test]
761764fn test_sender_auto_protocol_version_old_server2 ( ) -> TestResult {
762- _test_sender_auto_detect_protocol_version ( None , ProtocolVersion :: V1 )
765+ _test_sender_auto_detect_protocol_version ( None , ProtocolVersion :: V1 , 0 , 127 )
763766}
764767
765768#[ test]
766769fn test_sender_auto_protocol_version_only_v1 ( ) -> TestResult {
767- _test_sender_auto_detect_protocol_version ( Some ( vec ! [ 1 ] ) , ProtocolVersion :: V1 )
770+ _test_sender_auto_detect_protocol_version ( Some ( vec ! [ 1 ] ) , ProtocolVersion :: V1 , 127 , 127 )
768771}
769772
770773#[ test]
771774fn test_sender_auto_protocol_version_only_v2 ( ) -> TestResult {
772- _test_sender_auto_detect_protocol_version ( Some ( vec ! [ 2 ] ) , ProtocolVersion :: V2 )
775+ _test_sender_auto_detect_protocol_version ( Some ( vec ! [ 2 ] ) , ProtocolVersion :: V2 , 127 , 127 )
773776}
774777
775778#[ test]
776779fn test_sender_auto_protocol_version_unsupported_client ( ) -> TestResult {
777- let mut server = MockServer :: new ( ) ?. configure_settings_response ( & [ 3 , 4 ] ) ;
780+ let mut server = MockServer :: new ( ) ?. configure_settings_response ( & [ 3 , 4 ] , 127 ) ;
778781 let sender_builder = server. lsb_http ( ) ;
779782 let server_thread = std:: thread:: spawn ( move || -> io:: Result < MockServer > {
780783 server. accept ( ) ?;
@@ -792,6 +795,76 @@ fn test_sender_auto_protocol_version_unsupported_client() -> TestResult {
792795 Ok ( ( ) )
793796}
794797
798+ #[ test]
799+ fn test_sender_short_max_name_len ( ) -> TestResult {
800+ _test_sender_max_name_len ( 4 , 4 , 0 )
801+ }
802+
803+ #[ test]
804+ fn test_sender_specify_max_name_len_with_response ( ) -> TestResult {
805+ _test_sender_max_name_len ( 4 , 4 , 127 )
806+ }
807+
808+ #[ test]
809+ fn test_sender_long_max_name_len ( ) -> TestResult {
810+ _test_sender_max_name_len ( 130 , 130 , 0 )
811+ }
812+
813+ #[ test]
814+ fn test_sender_specify_max_name_len_without_response ( ) -> TestResult {
815+ _test_sender_max_name_len ( 0 , 16 , 16 )
816+ }
817+
818+ #[ test]
819+ fn test_sender_default_max_name_len ( ) -> TestResult {
820+ _test_sender_max_name_len ( 0 , 127 , 0 )
821+ }
822+
823+ fn _test_sender_max_name_len (
824+ response_max_name_len : usize ,
825+ expect_max_name_len : usize ,
826+ sender_specify_max_name_len : usize ,
827+ ) -> TestResult {
828+ let mut server = MockServer :: new ( ) ?;
829+ if response_max_name_len != 0 {
830+ server = server. configure_settings_response ( & [ 1 , 2 ] , response_max_name_len) ;
831+ }
832+
833+ let mut sender_builder = server. lsb_http ( ) ;
834+ if sender_specify_max_name_len != 0 {
835+ sender_builder = sender_builder. max_name_len ( sender_specify_max_name_len) ?;
836+ }
837+ let server_thread = std:: thread:: spawn ( move || -> io:: Result < MockServer > {
838+ server. accept ( ) ?;
839+ match response_max_name_len {
840+ 0 => server. send_http_response_q (
841+ HttpResponse :: empty ( )
842+ . with_status ( 404 , "Not Found" )
843+ . with_header ( "content-type" , "text/plain" )
844+ . with_body_str ( "Not Found" ) ,
845+ ) ?,
846+ _ => server. send_settings_response ( ) ?,
847+ }
848+ Ok ( server)
849+ } ) ;
850+ let sender = sender_builder. build ( ) ?;
851+ assert_eq ! ( sender. max_name_len( ) , expect_max_name_len) ;
852+ let mut buffer = sender. new_buffer ( ) ;
853+ let name = "a name too long" ;
854+ if expect_max_name_len < name. len ( ) {
855+ assert_err_contains (
856+ buffer. table ( name) ,
857+ ErrorCode :: InvalidName ,
858+ r#"Bad name: "a name too long": Too long (max 4 characters)"# ,
859+ ) ;
860+ } else {
861+ assert ! ( buffer. table( name) . is_ok( ) ) ;
862+ }
863+ // We keep the server around til the end of the test to ensure that the response is fully received.
864+ _ = server_thread. join ( ) . unwrap ( ) ?;
865+ Ok ( ( ) )
866+ }
867+
795868#[ test]
796869fn test_buffer_protocol_version1_not_support_array ( ) -> TestResult {
797870 let mut buffer = Buffer :: new ( ProtocolVersion :: V1 ) ;
0 commit comments