lunatic 0.14.1

Helper library for building Rust applications that run on lunatic.
Documentation
use std::io::ErrorKind;
use std::net::IpAddr;

use lunatic::net;
use lunatic_test::test;

#[test]
fn udp_ping_connect_recv_send_main() {
    let sender = net::UdpSocket::bind("127.0.0.1:0").unwrap();
    let receiver = net::UdpSocket::bind("127.0.0.1:0").unwrap();
    let receiver_addr = receiver.local_addr().unwrap();

    sender.connect(receiver_addr).expect("couldn't connect");
    sender
        .send("P1NG".as_bytes())
        .expect("couldn't send message");

    let mut buf = [0; 4];
    let len_in = receiver.recv(&mut buf).unwrap();

    assert_eq!(len_in, 4);
    assert_eq!(buf, "P1NG".as_bytes());
}

#[test]
fn udp_ping_recv_from_send_to_main() {
    let sender = net::UdpSocket::bind("127.0.0.1:0").unwrap();
    let sender_addr = sender.local_addr().unwrap();
    let receiver = net::UdpSocket::bind("127.0.0.1:0").unwrap();
    let receiver_addr = receiver.local_addr().unwrap();

    sender
        .send_to("P2NG".as_bytes(), receiver_addr)
        .expect("couldn't send message");

    let mut buf = [0; 4];
    let (len_in, addr_in) = receiver.recv_from(&mut buf).unwrap();

    assert_eq!(len_in, 4);
    assert_eq!(addr_in, sender_addr);
    assert_eq!(buf, "P2NG".as_bytes());
}

#[test]
fn udp_ping_sender_clone() {
    let sender = net::UdpSocket::bind("127.0.0.1:0").unwrap();
    let sender2 = sender.try_clone().unwrap();

    let receiver = net::UdpSocket::bind("127.0.0.1:0").unwrap();
    let receiver_addr = receiver.local_addr().unwrap();

    sender2.connect(receiver_addr).expect("couldn't connect");
    sender2
        .send("P1NG".as_bytes())
        .expect("couldn't send message");

    let mut buf = [0; 4];
    let len_in = receiver.recv(&mut buf).unwrap();

    assert_eq!(len_in, 4);
    assert_eq!(buf, "P1NG".as_bytes());
}

#[test]
fn udp_ping_receiver_clone() {
    let sender = net::UdpSocket::bind("127.0.0.1:0").unwrap();

    let receiver = net::UdpSocket::bind("127.0.0.1:0").unwrap();
    let receiver2 = receiver.try_clone().unwrap();
    let receiver_addr = receiver2.local_addr().unwrap();

    sender.connect(receiver_addr).expect("couldn't connect");
    sender
        .send("P1NG".as_bytes())
        .expect("couldn't send message");

    let mut buf = [0; 4];
    let len_in = receiver2.recv(&mut buf).unwrap();

    assert_eq!(len_in, 4);
    assert_eq!(buf, "P1NG".as_bytes());
}

#[test]
fn udp_peer_addr() {
    let sender = net::UdpSocket::bind("127.0.0.1:0").unwrap();
    let receiver = net::UdpSocket::bind("127.0.0.1:0").unwrap();
    let receiver_addr = receiver.local_addr().unwrap();

    assert_eq!(
        sender.peer_addr().unwrap_err().kind(),
        ErrorKind::NotConnected
    );

    sender.connect(receiver_addr).expect("couldn't connect");

    assert_eq!(
        sender.peer_addr().unwrap().ip(),
        IpAddr::from([127, 0, 0, 1])
    );
}

#[test]
fn udp_ttl_setter_getter() {
    let sender = net::UdpSocket::bind("127.0.0.1:0").unwrap();
    sender.set_ttl(42).unwrap();
    let cur_ttl = sender.ttl().unwrap();

    assert_eq!(cur_ttl, 42);
}

#[test]
fn udp_broadcast_setter_getter_true() {
    let sender = net::UdpSocket::bind("127.0.0.1:0").unwrap();
    sender.set_broadcast(true).unwrap();
    let cur_broadcast = sender.broadcast().unwrap();

    assert_eq!(cur_broadcast, true);
}

#[test]
fn udp_broadcast_setter_getter_false() {
    let sender = net::UdpSocket::bind("127.0.0.1:0").unwrap();
    sender.set_broadcast(true).unwrap();
    sender.set_broadcast(false).unwrap();
    let cur_broadcast = sender.broadcast().unwrap();

    assert_eq!(cur_broadcast, false);
}