socket_server_mocker::server_mocker

Trait ServerMocker

source
pub trait ServerMocker {
    const DEFAULT_NET_TIMEOUT_MS: u64 = 100u64;
    const DEFAULT_THREAD_RECEIVER_TIMEOUT_MS: u64 = 100u64;

    // Required methods
    fn socket_address(&self) -> SocketAddr;
    fn add_mock_instructions(
        &self,
        instructions: Vec<Instruction>,
    ) -> Result<(), ServerMockerError>;
    fn pop_received_message(&self) -> Option<BinaryMessage>;
    fn pop_server_error(&self) -> Option<ServerMockerError>;

    // Provided method
    fn port(&self) -> u16 { ... }
}
Expand description

Trait that define the behavior of a network server mocker over an IP layer.

The mocker is able to receive and send messages to the application that is tested.

The mocker can be configured to send messages to the tested application depending on the messages received.

You can later check that the messages sent by the tested application are the ones expected.

Provided Associated Constants§

source

const DEFAULT_NET_TIMEOUT_MS: u64 = 100u64

Default timeout in milliseconds for the server to wait for a message from the client.

source

const DEFAULT_THREAD_RECEIVER_TIMEOUT_MS: u64 = 100u64

Timeout if no more instruction is available and Instruction::StopExchange hasn’t been sent

Required Methods§

source

fn socket_address(&self) -> SocketAddr

Returns the socket address on which the mock server is listening

source

fn add_mock_instructions( &self, instructions: Vec<Instruction>, ) -> Result<(), ServerMockerError>

Adds a slice of instructions to the server mocker

The server mocker will execute the instructions in the order they are added

This function could be called as many times as you want, until the connection is closed (event by the client or the server if received a Instruction::StopExchange instruction)

If you push a Instruction::SendMessage instruction, you must ensure that there is a client connected to the server mocker

If you push a Instruction::ReceiveMessage instruction, you must ensure that the client will send a message to the server mocker within the timeout defined in ServerMocker::DEFAULT_NET_TIMEOUT_MS

source

fn pop_received_message(&self) -> Option<BinaryMessage>

Return first message received by the mock server on the messages queue

If no message is available, wait for ServerMocker::DEFAULT_NET_TIMEOUT_MS and then return None

If a message is available, will return the message and remove it from the queue

source

fn pop_server_error(&self) -> Option<ServerMockerError>

Return first error received by the mock server on the errors queue

If no error is available, wait for ServerMocker::DEFAULT_NET_TIMEOUT_MS and then return None

Provided Methods§

source

fn port(&self) -> u16

Returns the port on which the mock server is listening

Listen only on local interface

Port should not be used by another listening process

Object Safety§

This trait is not object safe.

Implementors§

source§

impl ServerMocker for TcpServerMocker

TcpServerMocker implementation

§Example

use std::io::Write;
use std::net::TcpStream;
use socket_server_mocker::server_mocker::ServerMocker;
use socket_server_mocker::server_mocker_instruction::Instruction;
use socket_server_mocker::server_mocker_instruction::Instruction::{ReceiveMessage, StopExchange};
use socket_server_mocker::tcp_server_mocker::TcpServerMocker;

let tcp_server_mocker = TcpServerMocker::new_with_port(1234).unwrap();
let mut client = TcpStream::connect("127.0.0.1:1234").unwrap();

tcp_server_mocker.add_mock_instructions(vec![
    ReceiveMessage,
    StopExchange,
]).unwrap();
client.write_all(&[1, 2, 3]).unwrap();

let mock_server_received_message = tcp_server_mocker.pop_received_message();
assert_eq!(Some(vec![1, 2, 3]), mock_server_received_message);
assert!(tcp_server_mocker.pop_server_error().is_none());
assert!(tcp_server_mocker.pop_server_error().is_none());
source§

impl ServerMocker for UdpServerMocker

UdpServerMocker implementation

§Example

use std::net::{SocketAddr, UdpSocket};
use socket_server_mocker::server_mocker::ServerMocker;
use socket_server_mocker::server_mocker_instruction::Instruction::{ReceiveMessage, SendMessage, StopExchange};
use socket_server_mocker::udp_server_mocker::UdpServerMocker;

let udp_server_mocker = UdpServerMocker::new().unwrap();
// 0 = random port
let mut client = UdpSocket::bind("127.0.0.1:0").unwrap();
let server_addr = SocketAddr::from(([127, 0, 0, 1], udp_server_mocker.port()));

udp_server_mocker.add_mock_instructions(vec![
   ReceiveMessage,
   SendMessage(vec![4, 5, 6]),
   StopExchange,
]).unwrap();

client.send_to(&[1, 2, 3], server_addr).unwrap();
let mut buffer = [0; 3];
client.recv_from(&mut buffer).unwrap();
assert_eq!([4, 5, 6], buffer);
assert_eq!(Some(vec![1, 2, 3]), udp_server_mocker.pop_received_message());
assert!(udp_server_mocker.pop_server_error().is_none());