Skip to main content

datex_native/com_interfaces/websocket/
mod.rs

1pub mod websocket_client;
2pub mod websocket_server;
3
4// TODO: move to integration tests once this is a separate crate
5#[cfg(test)]
6mod tests {
7    use ntest_timeout::timeout;
8    use tokio::join;
9    use crate::com_interfaces::tests::{test_client_server_interfaces, test_client_server_sockets};
10    use datex_core::network::com_interfaces::com_interface::factory::{ComInterfaceAsyncFactory};
11
12    use datex_core::network::com_interfaces::default_setup_data::websocket::websocket_server::WebSocketServerInterfaceSetupData;
13    use crate::com_interfaces::websocket::websocket_server::WebSocketServerInterfaceSetupDataNative;
14    use datex_core::network::com_interfaces::default_setup_data::websocket::websocket_client::WebSocketClientInterfaceSetupData;
15    use crate::com_interfaces::websocket::websocket_client::WebSocketClientInterfaceSetupDataNative;
16    use datex_core::utils::async_iterators::async_next_pin_box;
17
18    #[tokio::test]
19    #[timeout(2000)]
20    async fn test_connect_and_communicate() {
21        
22        let address= "0.0.0.0:45678".to_string();
23
24        let mut server_interface_configuration =
25            WebSocketServerInterfaceSetupDataNative(WebSocketServerInterfaceSetupData {
26                bind_address: address.clone(),
27                accept_addresses: None,
28            })
29                .create_interface()
30                .await
31                .unwrap();
32
33        let (client_interface_configuration, server_socket) = join!(
34            // create client interface connection
35            WebSocketClientInterfaceSetupDataNative(WebSocketClientInterfaceSetupData {
36                url: format!("ws://{}", address),
37            })
38                .create_interface(),
39            // await connections on server side
40            async_next_pin_box(&mut server_interface_configuration.new_sockets_iterator)
41        );
42
43        // get sockets
44        let mut client_interface_configuration = client_interface_configuration.unwrap();
45        let server_socket = server_socket.unwrap().unwrap();
46        let client_socket = async_next_pin_box(&mut client_interface_configuration.new_sockets_iterator).await.unwrap().unwrap();
47
48        // check client properties
49        assert_eq!(
50            client_interface_configuration.properties.name,
51            Some(format!("ws://{}", address)),
52        );
53        assert_eq!(
54            client_interface_configuration.properties.channel,
55            "websocket"
56        );
57        assert_eq!(
58            client_interface_configuration.properties.interface_type,
59            "websocket-client"
60        );
61
62        // check server properties
63        assert_eq!(
64            server_interface_configuration.properties.name,
65            Some(address)
66        );
67        assert_eq!(
68            server_interface_configuration.properties.channel,
69            "websocket"
70        );
71        assert_eq!(
72            server_interface_configuration.properties.interface_type,
73            "websocket-server"
74        );
75
76        test_client_server_sockets(
77            server_socket,
78            client_socket,
79        ).await;
80    }
81}