@@ -236,3 +236,67 @@ fn handle_error(e: ServerError, transaction_id: TransactionId) -> Response {
236236 message : message. into ( ) ,
237237 } )
238238}
239+
240+ #[ cfg( test) ]
241+ mod tests {
242+ use std:: {
243+ net:: { IpAddr , Ipv4Addr , SocketAddr } ,
244+ sync:: Arc ,
245+ } ;
246+
247+ use crate :: { protocol:: utils:: get_connection_id, tracker:: tracker:: TorrentTracker , udp:: handle_connect, Configuration } ;
248+ use aquatic_udp_protocol:: { ConnectRequest , ConnectResponse , Response , TransactionId } ;
249+
250+ fn initialized_tracker ( ) -> Arc < TorrentTracker > {
251+ let config = Arc :: new ( Configuration :: default ( ) ) ;
252+ Arc :: new ( TorrentTracker :: new ( config) . unwrap ( ) )
253+ }
254+
255+ fn sample_remote_addr ( ) -> SocketAddr {
256+ SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: new ( 127 , 0 , 0 , 1 ) ) , 8080 )
257+ }
258+
259+ fn connect_request ( ) -> ConnectRequest {
260+ ConnectRequest {
261+ transaction_id : TransactionId ( 0i32 ) ,
262+ }
263+ }
264+
265+ #[ tokio:: test]
266+ async fn a_connect_response_should_contain_the_same_transaction_id_as_the_connect_request ( ) {
267+ let request = ConnectRequest {
268+ transaction_id : TransactionId ( 0i32 ) ,
269+ } ;
270+
271+ let response = handle_connect ( sample_remote_addr ( ) , & request, initialized_tracker ( ) )
272+ . await
273+ . unwrap ( ) ;
274+
275+ assert_eq ! (
276+ response,
277+ Response :: Connect ( ConnectResponse {
278+ connection_id: get_connection_id( & sample_remote_addr( ) ) ,
279+ transaction_id: request. transaction_id
280+ } )
281+ ) ;
282+ }
283+
284+ #[ tokio:: test]
285+ async fn a_connect_response_should_generate_a_new_connection_id ( ) {
286+ let request = ConnectRequest {
287+ transaction_id : TransactionId ( 0i32 ) ,
288+ } ;
289+
290+ let response = handle_connect ( sample_remote_addr ( ) , & request, initialized_tracker ( ) )
291+ . await
292+ . unwrap ( ) ;
293+
294+ assert_eq ! (
295+ response,
296+ Response :: Connect ( ConnectResponse {
297+ connection_id: get_connection_id( & sample_remote_addr( ) ) ,
298+ transaction_id: request. transaction_id
299+ } )
300+ ) ;
301+ }
302+ }
0 commit comments