diff --git a/examples/memstore/src/client/main.rs b/examples/memstore/src/client/main.rs index 39e8e6c2..361794a3 100644 --- a/examples/memstore/src/client/main.rs +++ b/examples/memstore/src/client/main.rs @@ -1,4 +1,4 @@ -use raftify::{create_client, raft_service, AbstractLogEntry}; +use raftify::{create_client, create_client_with_ssl, raft_service, AbstractLogEntry}; use memstore_example_harness::state_machine::LogEntry; @@ -8,6 +8,7 @@ use memstore_example_harness::state_machine::LogEntry; async fn main() { println!("---Message propose---"); let mut leader_client = create_client(&"127.0.0.1:60061").await.unwrap(); + let mut leader_client2 = create_client_with_ssl(&"127.0.0.1:60061").await.unwrap(); leader_client .propose(raft_service::ProposeArgs { @@ -37,9 +38,17 @@ async fn main() { .into_inner() .result_json; + let result2 = leader_client2 + .debug_node(raft_service::Empty {}) + .await + .unwrap() + .into_inner() + .result_json; + + assert_eq!(result, result2); println!("Debug node result: {:?}", result); - println!("---Change config example---"); + // println!("---Change config example---"); // leader_client.change_config(raft_service::ChangeConfigArgs { // addrs: vec![ // "127.0.0.1:60061".to_owned(), diff --git a/raftify/src/lib.rs b/raftify/src/lib.rs index e2861620..44d83dba 100644 --- a/raftify/src/lib.rs +++ b/raftify/src/lib.rs @@ -35,7 +35,7 @@ pub use crate::{ peer::Peer, peers::Peers, raft_bootstrapper::Raft, - raft_client::create_client, + raft_client::{create_client, create_client_with_ssl}, raft_node::{role::InitialRole, RaftNode}, raft_service::raft_service_client::RaftServiceClient, request::common::confchange_request::ConfChangeRequest, diff --git a/raftify/src/raft_client.rs b/raftify/src/raft_client.rs index d0697a39..b27fd176 100644 --- a/raftify/src/raft_client.rs +++ b/raftify/src/raft_client.rs @@ -4,20 +4,46 @@ use tonic::transport::{Channel, Error as TonicError}; use super::RaftServiceClient; -// TODO: Support https schema pub async fn create_client( addr: A, ) -> Result, TonicError> { + _create_client(addr, false).await +} + +pub async fn create_client_with_ssl( + addr: A, +) -> Result, TonicError> { + _create_client(addr, true).await +} + +async fn _create_client( + addr: A, + b_ssl: bool, +) -> Result, TonicError> { + let httpx = if b_ssl { + String::from("https") + } else { + String::from("http") + }; let addr = addr .to_socket_addrs() .expect("Invalid socket address format") .next() .unwrap(); - let addr = format!("http://{}", addr); - let addr = Bytes::copy_from_slice(addr.as_bytes()); + let url = format!("{}://{}", httpx, addr); + let url = Bytes::copy_from_slice(url.as_bytes()); - let channel = Channel::from_shared(addr).unwrap().connect().await?; + let channel = Channel::from_shared(url).unwrap().connect().await?; let client = RaftServiceClient::new(channel); Ok(client) } + +// Todo! +#[cfg(test)] +mod test { + #[tokio::test] + async fn test_create_client() { + todo!("!!!") + } +}