From 522c1533a0af7af7d96bb4d6850ce0b2c8762e89 Mon Sep 17 00:00:00 2001 From: Owen Jacobson Date: Tue, 9 Dec 2025 23:21:28 -0500 Subject: Now that testing push-generating endpoints is more feasible, implement the missing test cases for `ping`. --- src/test/webpush.rs | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'src/test') diff --git a/src/test/webpush.rs b/src/test/webpush.rs index f33f03c..96fa843 100644 --- a/src/test/webpush.rs +++ b/src/test/webpush.rs @@ -1,5 +1,6 @@ use std::{ any::Any, + collections::{HashMap, HashSet}, mem, sync::{Arc, Mutex}, }; @@ -11,12 +12,14 @@ use crate::{error::failed::Failed, push::Publish}; #[derive(Clone)] pub struct Client { sent: Arc>>, + failures: Arc>>, } impl Client { pub fn new() -> Self { Self { sent: Arc::default(), + failures: Arc::default(), } } @@ -26,6 +29,11 @@ impl Client { let mut sent = self.sent.lock().unwrap(); mem::take(&mut sent) } + + pub fn fail_next(&self, subscription_info: &SubscriptionInfo, err: WebPushError) { + let mut failures = self.failures.lock().unwrap(); + failures.insert(subscription_info.clone(), err); + } } impl Publish for Client { @@ -40,19 +48,30 @@ impl Publish for Client { { let message: Box = Box::new(message); let subscriptions = subscriptions.into_iter().collect(); + + let mut failures = Vec::new(); + + let mut planned_failures = self.failures.lock().unwrap(); + for subscription in &subscriptions { + if let Some(err) = planned_failures.remove(subscription) { + failures.push((subscription.clone(), err)); + } + } + let publication = Publication { message, subscriptions, }; self.sent.lock().unwrap().push(publication); - Ok(Vec::new()) + Ok(failures) } } +#[derive(Debug)] pub struct Publication { pub message: Box, - pub subscriptions: Vec, + pub subscriptions: HashSet, } impl Publication { -- cgit v1.2.3