From f7a2285dd584b17f54be31d4062cd0c78db8151a Mon Sep 17 00:00:00 2001 From: kozabrada123 <59031733+kozabrada123@users.noreply.github.com> Date: Thu, 18 Jan 2024 16:27:45 +0100 Subject: [PATCH] tests: better gateway auth test --- tests/gateway.rs | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/tests/gateway.rs b/tests/gateway.rs index 5bf5865..c23408a 100644 --- a/tests/gateway.rs +++ b/tests/gateway.rs @@ -1,10 +1,12 @@ mod common; use std::sync::{Arc, RwLock}; +use std::time::Duration; +use async_trait::async_trait; use chorus::errors::GatewayError; use chorus::gateway::*; -use chorus::types::{self, ChannelModifySchema, RoleCreateModifySchema, RoleObject}; +use chorus::types::{self, ChannelModifySchema, GatewayReady, RoleCreateModifySchema, RoleObject}; #[cfg(target_arch = "wasm32")] use wasm_bindgen_test::*; #[cfg(target_arch = "wasm32")] @@ -20,6 +22,18 @@ async fn test_gateway_establish() { common::teardown(bundle).await } +#[derive(Debug)] +struct GatewayReadyObserver { + channel: tokio::sync::mpsc::Sender<()>, +} + +#[async_trait] +impl Observer for GatewayReadyObserver { + async fn update(&self, _data: &GatewayReady) { + self.channel.send(()).await.unwrap(); + } +} + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)] #[cfg_attr(not(target_arch = "wasm32"), tokio::test)] /// Tests establishing a connection and authenticating @@ -28,10 +42,35 @@ async fn test_gateway_authenticate() { let gateway: GatewayHandle = Gateway::spawn(bundle.urls.wss.clone()).await.unwrap(); + let (ready_send, mut ready_receive) = tokio::sync::mpsc::channel(1); + + let observer = Arc::new(GatewayReadyObserver { + channel: ready_send, + }); + + gateway + .events + .lock() + .await + .session + .ready + .subscribe(observer); + let mut identify = types::GatewayIdentifyPayload::common(); identify.token = bundle.user.token.clone(); gateway.send_identify(identify).await; + + tokio::select! { + // Fail, we timed out waiting for it + () = safina_timer::sleep_for(Duration::from_secs(20)) => { + println!("Timed out waiting for event, failing.."); + assert!(false); + } + // Sucess, we have received it + Some(_) = ready_receive.recv() => {} + }; + common::teardown(bundle).await }