@@ -701,10 +701,12 @@ fn test_transactional(
701
701
fn _test_sender_auto_detect_protocol_version (
702
702
supported_versions : Option < Vec < u16 > > ,
703
703
expect_version : ProtocolVersion ,
704
+ max_name_len : usize ,
705
+ expect_max_name_len : usize ,
704
706
) -> TestResult {
705
707
let supported_versions1 = supported_versions. clone ( ) ;
706
708
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 ) ;
708
710
let sender_builder = server. lsb_http ( ) ;
709
711
710
712
let server_thread = std:: thread:: spawn ( move || -> io:: Result < MockServer > {
@@ -735,6 +737,7 @@ fn _test_sender_auto_detect_protocol_version(
735
737
736
738
let mut sender = sender_builder. build ( ) ?;
737
739
assert_eq ! ( sender. protocol_version( ) , expect_version) ;
740
+ assert_eq ! ( sender. max_name_len( ) , expect_max_name_len) ;
738
741
let mut buffer = sender. new_buffer ( ) ;
739
742
buffer
740
743
. table ( "test" ) ?
@@ -749,32 +752,32 @@ fn _test_sender_auto_detect_protocol_version(
749
752
750
753
#[ test]
751
754
fn 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 )
753
756
}
754
757
755
758
#[ test]
756
759
fn 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 )
758
761
}
759
762
760
763
#[ test]
761
764
fn 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 )
763
766
}
764
767
765
768
#[ test]
766
769
fn 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 )
768
771
}
769
772
770
773
#[ test]
771
774
fn 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 )
773
776
}
774
777
775
778
#[ test]
776
779
fn 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 ) ;
778
781
let sender_builder = server. lsb_http ( ) ;
779
782
let server_thread = std:: thread:: spawn ( move || -> io:: Result < MockServer > {
780
783
server. accept ( ) ?;
@@ -792,6 +795,76 @@ fn test_sender_auto_protocol_version_unsupported_client() -> TestResult {
792
795
Ok ( ( ) )
793
796
}
794
797
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
+
795
868
#[ test]
796
869
fn test_buffer_protocol_version1_not_support_array ( ) -> TestResult {
797
870
let mut buffer = Buffer :: new ( ProtocolVersion :: V1 ) ;
0 commit comments