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");
}
}