From a3922138a3c5f386e2d9f051f0382efba6d6d630 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maxime=20=E2=80=9Cpep=E2=80=9D=20Buquet?= Date: Tue, 22 Oct 2019 23:46:50 +0200 Subject: [PATCH] xmpp-rs: Test that client builds correctly MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maxime “pep” Buquet --- xmpp-rs/src/lib.rs | 52 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 46 insertions(+), 6 deletions(-) diff --git a/xmpp-rs/src/lib.rs b/xmpp-rs/src/lib.rs index 4c96db27c966aab663111933d7a2a7be4fa9730e..71d2ee96f1e00d33b1bce0d587f5617b338d10cd 100644 --- a/xmpp-rs/src/lib.rs +++ b/xmpp-rs/src/lib.rs @@ -167,21 +167,23 @@ impl ClientBuilder<'_> { self, ) -> Result<(Agent, impl Stream), JidParseError> { let client = TokioXmppClient::new(self.jid, self.password)?; - Ok(self.build_impl(client)) + let (sender_tx, sender_rx) = mpsc::unbounded(); + Ok(self.build_impl(client, sender_tx, sender_rx)?) } // This function is meant to be used for testing build pub(crate) fn build_impl( self, stream: S, - ) -> (Agent, impl Stream) + sender_tx: mpsc::UnboundedSender, + sender_rx: mpsc::UnboundedReceiver, + ) -> Result<(Agent, impl Stream), JidParseError> where S: Stream - + Sink, + + Sink, { let disco = self.make_disco(); let node = self.website; - let (sender_tx, sender_rx) = mpsc::unbounded(); let client = stream; let (sink, stream) = client.split(); @@ -322,11 +324,11 @@ impl ClientBuilder<'_> { default_nick: Rc::new(RefCell::new(self.default_nick)), }; - (agent, future) + Ok((agent, future)) } } -#[derive(Clone)] +#[derive(Clone, Debug)] pub struct Agent { sender_tx: mpsc::UnboundedSender, default_nick: Rc>, @@ -360,3 +362,41 @@ impl Agent { .unwrap(); } } + +#[cfg(test)] +mod tests { + use futures::prelude::*; + use tokio_xmpp::Client as TokioXmppClient; + use tokio::runtime::current_thread::Runtime; + use super::{Agent, ClientBuilder, ClientType, ClientFeature, Event}; + use futures::sync::mpsc; + + #[test] + fn test_simple() { + // tokio_core context + let mut rt = Runtime::new().unwrap(); + let client = TokioXmppClient::new("foo@bar", "meh").unwrap(); + let (sender_tx, sender_rx) = mpsc::unbounded(); + + // Client instance + let client_builder = ClientBuilder::new("foo@bar", "meh") + .set_client(ClientType::Bot, "xmpp-rs") + .set_website("https://gitlab.com/xmpp-rs/xmpp-rs") + .set_default_nick("bot") + .enable_feature(ClientFeature::Avatars) + .enable_feature(ClientFeature::ContactList); + + let (_agent, stream): (Agent, _) = + client_builder + .build_impl(client, sender_tx.clone(), sender_rx) + .unwrap(); + + let handler = stream.map_err(Some).for_each(|_evt: Event| { + return Err(None); + }); + + rt.block_on(handler).unwrap_or_else(|e| match e { + _ => (), + }); + } +}