Skip to content

Commit f240a50

Browse files
committed
refactor: Add TCP examples
Extend examples to use a TCP socket if the `--tcp` flag is provided and add the TCP versions to `run-examples` Signed-off-by: Kostis Papazafeiropoulos <papazof@gmail.com>
1 parent b4331ab commit f240a50

File tree

9 files changed

+78
-23
lines changed

9 files changed

+78
-23
lines changed

example/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ ctrlc = { version = "3.0", features = ["termination"] }
2323
tokio = { version = "1.0.1", features = ["signal", "time"] }
2424
async-trait = "0.1.42"
2525
rand = "0.8.5"
26-
26+
clap = { version = "4.5.40", features = ["derive"] }
2727

2828
[[example]]
2929
name = "client"

example/async-client.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ use ttrpc::r#async::Client;
1111

1212
#[tokio::main(flavor = "current_thread")]
1313
async fn main() {
14-
let c = Client::connect(utils::SOCK_ADDR).await.unwrap();
14+
let sock_addr = utils::get_sock_addr();
15+
let c = Client::connect(sock_addr).await.unwrap();
16+
1517
let hc = health_ttrpc::HealthClient::new(c.clone());
1618
let ac = agent_ttrpc::AgentServiceClient::new(c);
1719

example/async-server.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,11 @@ async fn main() {
5858
let hservice = health_ttrpc::create_health(Arc::new(HealthService {}));
5959
let aservice = agent_ttrpc::create_agent_service(Arc::new(AgentService {}));
6060

61-
utils::remove_if_sock_exist(utils::SOCK_ADDR).unwrap();
61+
let sock_addr = utils::get_sock_addr();
62+
utils::remove_if_sock_exist(sock_addr).unwrap();
6263

6364
let mut server = Server::new()
64-
.bind(utils::SOCK_ADDR)
65+
.bind(sock_addr)
6566
.unwrap()
6667
.register_service(hservice)
6768
.register_service(aservice);

example/async-stream-client.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ use ttrpc::r#async::Client;
1313
async fn main() {
1414
simple_logging::log_to_stderr(log::LevelFilter::Info);
1515

16-
let c = Client::connect(utils::SOCK_ADDR).await.unwrap();
16+
let sock_addr = utils::get_sock_addr();
17+
let c = Client::connect(sock_addr).await.unwrap();
18+
1719
let sc = streaming_ttrpc::StreamingClient::new(c);
1820

1921
let _now = std::time::Instant::now();

example/async-stream-server.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,10 +171,12 @@ impl streaming_ttrpc::Streaming for StreamingService {
171171
async fn main() {
172172
simple_logging::log_to_stderr(LevelFilter::Info);
173173
let service = streaming_ttrpc::create_streaming(Arc::new(StreamingService {}));
174-
utils::remove_if_sock_exist(utils::SOCK_ADDR).unwrap();
174+
175+
let sock_addr = utils::get_sock_addr();
176+
utils::remove_if_sock_exist(sock_addr).unwrap();
175177

176178
let mut server = Server::new()
177-
.bind(utils::SOCK_ADDR)
179+
.bind(sock_addr)
178180
.unwrap()
179181
.register_service(service);
180182

example/client.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,9 @@ fn main() {
5050
fn connect_once() {
5151
simple_logging::log_to_stderr(LevelFilter::Trace);
5252

53-
let c = Client::connect(utils::SOCK_ADDR).unwrap();
53+
let sock_addr = utils::get_sock_addr();
54+
let c = Client::connect(sock_addr).unwrap();
55+
5456
let hc = health_ttrpc::HealthClient::new(c.clone());
5557
let ac = agent_ttrpc::AgentServiceClient::new(c);
5658

example/server.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,11 @@ fn main() {
5858
let hservice = health_ttrpc::create_health(Arc::new(HealthService {}));
5959
let aservice = agent_ttrpc::create_agent_service(Arc::new(AgentService {}));
6060

61-
utils::remove_if_sock_exist(utils::SOCK_ADDR).unwrap();
61+
let sock_addr = utils::get_sock_addr();
62+
utils::remove_if_sock_exist(sock_addr).unwrap();
63+
6264
let mut server = ttrpc::Server::new()
63-
.bind(utils::SOCK_ADDR)
65+
.bind(sock_addr)
6466
.unwrap()
6567
.register_service(hservice)
6668
.register_service(aservice);

example/utils.rs

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,42 @@
11
#![allow(dead_code)]
2+
use clap::Parser;
3+
use log::warn;
24
use std::io::Result;
35

46
#[cfg(unix)]
5-
pub const SOCK_ADDR: &str = r"unix:///tmp/ttrpc-test";
7+
pub const SOCK_ADDR_LOCAL: &str = r"unix:///tmp/ttrpc-test";
68

79
#[cfg(windows)]
8-
pub const SOCK_ADDR: &str = r"\\.\pipe\ttrpc-test";
10+
pub const SOCK_ADDR_LOCAL: &str = r"\\.\pipe\ttrpc-test";
11+
12+
pub const SOCK_ADDR_TCP: &str = r"tcp://127.0.0.1:65500";
13+
14+
#[derive(Debug, Default, Parser)]
15+
pub struct Cli {
16+
#[arg(long = "tcp")]
17+
#[arg(help = "Use a TCP socket instead of a local one")]
18+
pub tcp: bool,
19+
}
20+
21+
pub fn get_sock_addr() -> &'static str {
22+
let cli = Cli::parse();
23+
if cli.tcp {
24+
if cfg!(windows) {
25+
warn!("'--tcp' flag ignored; TCP sockets not supported on Windows");
26+
return SOCK_ADDR_LOCAL;
27+
}
28+
SOCK_ADDR_TCP
29+
} else {
30+
SOCK_ADDR_LOCAL
31+
}
32+
}
933

1034
#[cfg(unix)]
1135
pub fn remove_if_sock_exist(sock_addr: &str) -> Result<()> {
36+
if sock_addr.starts_with("tcp://") {
37+
return Ok(());
38+
}
39+
1240
let path = sock_addr
1341
.strip_prefix("unix://")
1442
.expect("socket address is not expected");

tests/run-examples.rs

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,16 @@ use std::{
44
time::Duration,
55
};
66

7-
fn run_example(server: &str, client: &str) -> Result<(), Box<dyn std::error::Error>> {
7+
fn run_example(
8+
server: &str,
9+
client: &str,
10+
args: &[&str],
11+
) -> Result<(), Box<dyn std::error::Error>> {
812
// start the server and give it a moment to start.
9-
let mut server = do_run_example(server).spawn().unwrap();
13+
let mut server = do_run_example(server, args).spawn().unwrap();
1014
std::thread::sleep(Duration::from_secs(2));
1115

12-
let mut client = do_run_example(client).spawn().unwrap();
16+
let mut client = do_run_example(client, args).spawn().unwrap();
1317
let mut client_succeeded = false;
1418
let start = std::time::Instant::now();
1519
let timeout = Duration::from_secs(600);
@@ -55,12 +59,15 @@ fn run_example(server: &str, client: &str) -> Result<(), Box<dyn std::error::Err
5559
Ok(())
5660
}
5761

58-
fn do_run_example(example: &str) -> Command {
62+
fn do_run_example(example: &str, args: &[&str]) -> Command {
5963
let mut cmd = Command::new("cargo");
60-
cmd.arg("run")
61-
.arg("--example")
62-
.arg(example)
63-
.stdout(std::process::Stdio::piped())
64+
cmd.arg("run").arg("--example").arg(example);
65+
66+
if !args.is_empty() {
67+
cmd.arg("--").args(args);
68+
}
69+
70+
cmd.stdout(std::process::Stdio::piped())
6471
.stderr(std::process::Stdio::piped())
6572
.current_dir("example");
6673
cmd
@@ -83,9 +90,18 @@ fn wait_with_output(name: &str, cmd: Child) {
8390

8491
#[test]
8592
fn run_examples() -> Result<(), Box<dyn std::error::Error>> {
86-
run_example("server", "client")?;
87-
run_example("async-server", "async-client")?;
88-
run_example("async-stream-server", "async-stream-client")?;
93+
// Local
94+
run_example("server", "client", &[])?;
95+
run_example("async-server", "async-client", &[])?;
96+
run_example("async-stream-server", "async-stream-client", &[])?;
97+
98+
// TCP
99+
#[cfg(not(windows))]
100+
{
101+
run_example("server", "client", &["--tcp"])?;
102+
run_example("async-server", "async-client", &["--tcp"])?;
103+
run_example("async-stream-server", "async-stream-client", &["--tcp"])?;
104+
}
89105

90106
Ok(())
91107
}

0 commit comments

Comments
 (0)