File size: 1,849 Bytes
afa0cbf | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | use futures::StreamExt;
use pretty_assertions::assert_eq;
use tokio::net::TcpStream;
use super::ListenTransport;
use super::parse_listen_url;
use crate::grpc_transport::bind_tcp_listener;
#[tokio::test]
async fn grpc_listener_disables_nagle() {
let bind_address = "127.0.0.1:0"
.parse()
.expect("gRPC test listener should have a valid bind address");
let mut listener = bind_tcp_listener(bind_address)
.await
.expect("gRPC test listener should bind");
let local_addr = listener
.local_addr()
.expect("gRPC test listener should have a local address");
let _client = TcpStream::connect(local_addr)
.await
.expect("gRPC test client should connect");
let nodelay = listener
.next()
.await
.expect("gRPC test listener should accept a connection")
.expect("gRPC test listener should return a valid socket")
.nodelay()
.expect("accepted gRPC socket should expose TCP_NODELAY");
assert!(nodelay);
}
#[test]
fn parse_listen_url_accepts_stdio_transports() {
assert_eq!(
parse_listen_url("stdio").expect("stdio listen URL should parse"),
ListenTransport::Stdio
);
assert_eq!(
parse_listen_url("stdio://").expect("stdio URL should parse"),
ListenTransport::Stdio
);
}
#[test]
fn parse_listen_url_rejects_invalid_transports() {
let invalid_address = parse_listen_url("grpc://localhost:9000")
.expect_err("gRPC listener requires an IP address");
assert!(
invalid_address
.to_string()
.contains("expected `grpc://IP:PORT`")
);
let unsupported =
parse_listen_url("http://127.0.0.1:9000").expect_err("HTTP is not a listen transport");
assert!(unsupported.to_string().contains("unsupported --listen URL"));
}
|