Got system to clean up when document file fails.
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 1s

This commit is contained in:
Jeff Baskin 2025-10-20 11:57:50 -04:00
parent 0079aa42c5
commit 21404af52f

View File

@ -1238,6 +1238,10 @@ impl Router {
id
}
fn remove_sender(&mut self, id: &Uuid) {
self.senders.remove(id);
}
fn forward(&self, id: &Uuid, msg: Message) {
self.senders.get(id).unwrap().send(msg).unwrap();
}
@ -1285,6 +1289,25 @@ mod routers {
}
assert_eq!(holder.len(), count, "had duplicate keys");
}
#[test]
fn can_remove_sender() {
let (tx, _) = channel();
let mut router = Router::new(tx);
let (data, _) = channel();
let id = router.add_sender(data);
assert_eq!(router.senders.len(), 1, "should have only one sender");
router.remove_sender(&id);
assert_eq!(router.senders.len(), 0, "should have no senders.");
}
#[test]
fn ignores_bad_id_removals() {
let (tx, _) = channel();
let mut router = Router::new(tx);
router.remove_sender(&Uuid::new_v4());
assert_eq!(router.senders.len(), 0, "should have no senders.");
}
}
#[derive(Clone)]
@ -1307,6 +1330,11 @@ impl Queue {
router.add_sender(sender)
}
fn remove_sender(&mut self, id: &Uuid) {
let mut router = self.router.write().unwrap();
router.remove_sender(id);
}
fn forward(&self, id: &Uuid, msg: Message) {
let router = self.router.read().unwrap();
router.forward(id, msg);
@ -1398,6 +1426,22 @@ mod queues {
holder.insert(queue.add_sender(tx));
}
assert_eq!(holder.len(), count, "had duplicate keys");
let router = queue.router.read().unwrap();
assert_eq!(
router.senders.len(),
count,
"should contain all of the senders"
);
}
#[test]
fn senders_can_be_removed() {
let mut queue = Queue::new();
let (tx, _) = channel();
let id = queue.add_sender(tx);
queue.remove_sender(&id);
let router = queue.router.read().unwrap();
assert_eq!(router.senders.len(), 0, "should contain no senders");
}
#[test]
@ -3826,7 +3870,10 @@ impl DocumentFile {
let name_result = rx.recv().unwrap();
match name_result.get_action() {
MsgAction::Register(data) => match data.get_msg() {
RegMsg::Error(err) => queue.send(msg.response(err.clone())).unwrap(),
RegMsg::Error(err) => {
queue.remove_sender(&id);
queue.send(msg.response(err.clone())).unwrap();
}
_ => {}
},
_ => unreachable!("should return registration"),
@ -5341,5 +5388,12 @@ mod createdocs {
},
_ => unreachable!("got {:?}: should have been a reply.", result.get_action()),
}
let mut router = queue.router.read().unwrap();
assert_eq!(
router.senders.len(),
3,
"there should only be 3 registered senders: createdoc, testing rx, and {:?}",
name
);
}
}