@@ -33,12 +33,21 @@ struct Test {
3333}
3434
3535impl Test {
36- fn new ( cfg : & Config ) -> Test {
37- let mut test = Test {
36+ fn new ( ) -> Test {
37+ Test {
3838 master_addr : UNSPECIFIED . into ( ) ,
3939 server_addr : UNSPECIFIED . into ( ) ,
40- } ;
40+ }
41+ }
42+
43+ fn with_master ( cfg : & Config ) -> Test {
44+ let mut test = Self :: new ( ) ;
4145 test. create_master ( cfg) ;
46+ test
47+ }
48+
49+ fn with_master_and_server ( cfg : & Config ) -> Test {
50+ let mut test = Self :: with_master ( cfg) ;
4251 test. add_server ( cfg) ;
4352 test
4453 }
@@ -87,7 +96,7 @@ fn server_add() {
8796 log:: set_max_level ( log:: LevelFilter :: Trace ) ;
8897
8998 let cfg = Config :: default ( ) ;
90- let test = Test :: new ( & cfg) ;
99+ let test = Test :: with_master_and_server ( & cfg) ;
91100 let mut buf = [ 0 ; 1024 ] ;
92101 let sock = UdpSocket :: bind ( UNSPECIFIED ) . unwrap ( ) ;
93102 let game_key = Some ( 0xbeefdead ) ;
@@ -115,6 +124,30 @@ fn server_add() {
115124 assert_eq ! ( servers[ 0 ] . port( ) , test. server_addr. port( ) ) ;
116125}
117126
127+ #[ test]
128+ fn server_reuse_challenge ( ) {
129+ log:: set_logger ( & LOGGER ) . ok ( ) ;
130+ log:: set_max_level ( log:: LevelFilter :: Trace ) ;
131+
132+ let test = Test :: with_master ( & Config :: default ( ) ) ;
133+ let sock = UdpSocket :: bind ( UNSPECIFIED ) . unwrap ( ) ;
134+ let mut challenges = [ 0 ; 3 ] ;
135+ for ( i, j) in challenges. iter_mut ( ) . enumerate ( ) {
136+ let challenge = Some ( i as u32 ) ;
137+ let packet = server:: Challenge :: new ( challenge) ;
138+ let mut buf = [ 0 ; 512 ] ;
139+ let p = packet. encode ( & mut buf) . unwrap ( ) ;
140+ sock. send_to ( p, test. master_addr ) . unwrap ( ) ;
141+
142+ let ( len, _) = sock. recv_from ( & mut buf) . unwrap ( ) ;
143+ let resp = master:: ChallengeResponse :: decode ( & buf[ ..len] ) . unwrap ( ) ;
144+ assert_eq ! ( resp. server_challenge, challenge) ;
145+ * j = resp. master_challenge ;
146+ }
147+
148+ assert ! ( challenges. iter( ) . all( |i| * i == challenges[ 0 ] ) ) ;
149+ }
150+
118151#[ test]
119152fn client_rate_limit ( ) {
120153 log:: set_logger ( & LOGGER ) . ok ( ) ;
@@ -124,7 +157,7 @@ fn client_rate_limit() {
124157 cfg. master . server . client_rate_limit = 10 ;
125158 info ! ( "client rate limit {}" , cfg. master. server. client_rate_limit) ;
126159
127- let test = Test :: new ( & cfg) ;
160+ let test = Test :: with_master_and_server ( & cfg) ;
128161 let sock = UdpSocket :: bind ( UNSPECIFIED ) . unwrap ( ) ;
129162 sock. set_read_timeout ( Some ( Duration :: from_millis ( 100 ) ) )
130163 . unwrap ( ) ;
0 commit comments