rustzmq2 0.1.0

A native async Rust implementation of ZeroMQ
Documentation
//! PLAIN mechanism integration tests.

mod plain {
    use bytes::Bytes;
    use rustzmq2::__async_rt as async_rt;
    use rustzmq2::prelude::*;
    use rustzmq2::ZmqMessage;

    #[async_rt::test]
    async fn plain_auth_any_credentials_accepted() {
        let mut rep = rustzmq2::RepSocket::builder().plain_server().build();
        let endpoint = rep.bind("tcp://127.0.0.1:0").await.expect("bind");

        let mut dealer = rustzmq2::DealerSocket::builder()
            .plain_client(
                Bytes::copy_from_slice(b"alice"),
                Bytes::copy_from_slice(b"secret"),
            )
            .build();
        dealer
            .connect(endpoint.to_string().as_str())
            .await
            .expect("connect");

        async_rt::task::sleep(std::time::Duration::from_millis(100)).await;

        let mut msg = ZmqMessage::from(Bytes::from_static(b""));
        msg.push_back(Bytes::from_static(b"hello"));
        dealer.send(msg).await.expect("send");

        let got = async_rt::task::timeout(std::time::Duration::from_secs(2), rep.recv())
            .await
            .expect("timeout")
            .expect("recv");

        assert_eq!(got.get(0).expect("no frame").as_ref(), b"hello");
    }

    #[async_rt::test]
    async fn plain_wrong_password_rejected() {
        let mut rep = rustzmq2::RepSocket::builder()
            .plain_server()
            .plain_client(
                Bytes::copy_from_slice(b"alice"),
                Bytes::copy_from_slice(b"correct"),
            )
            .build();
        let endpoint = rep.bind("tcp://127.0.0.1:0").await.expect("bind");

        let mut dealer = rustzmq2::DealerSocket::builder()
            .plain_client(
                Bytes::copy_from_slice(b"alice"),
                Bytes::copy_from_slice(b"wrong"),
            )
            .build();
        let result = dealer.connect(endpoint.to_string().as_str()).await;
        assert!(
            result.is_err(),
            "expected connect error with wrong password"
        );
    }

    #[async_rt::test]
    async fn mechanism_mismatch_rejected() {
        let mut rep = rustzmq2::RepSocket::builder().plain_server().build();
        let endpoint = rep.bind("tcp://127.0.0.1:0").await.expect("bind");

        let mut dealer = rustzmq2::DealerSocket::new();
        let result = dealer.connect(endpoint.to_string().as_str()).await;
        assert!(result.is_err(), "expected mismatch error");
    }
}