Got system to clean up when document file fails.
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 1s
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 1s
This commit is contained in:
parent
0079aa42c5
commit
21404af52f
@ -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
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user