From ab88ba7fc0d11419677d51732eb4c3db4c4a4ab7 Mon Sep 17 00:00:00 2001 From: bel Date: Sat, 2 May 2020 14:35:38 -0600 Subject: [PATCH] mock rooms can be joined and have dedicated state of feed --- .../src/controller/state/mockroom.rs | 25 +++++++++----- .../src/controller/state/mockrooms.rs | 34 +++++++++++++++++++ testdata/matrix-sandbox/homeserver.log | 21 ++++++++++++ 3 files changed, 72 insertions(+), 8 deletions(-) diff --git a/secert-hitler/src/controller/state/mockroom.rs b/secert-hitler/src/controller/state/mockroom.rs index cd57dc5..82f08fa 100644 --- a/secert-hitler/src/controller/state/mockroom.rs +++ b/secert-hitler/src/controller/state/mockroom.rs @@ -3,13 +3,14 @@ use super::event::Event; use rand::{self, Rng}; use rand::distributions::Alphanumeric; -use crossbeam_channel::{unbounded, Receiver, Sender}; +use crossbeam_channel::{unbounded, Sender, Receiver}; #[derive(Clone, Debug)] pub struct MockRoom { last: String, room_id: String, - events: Vec, + events_s: Sender>, + events_r: Receiver>, } impl MockRoom { @@ -18,10 +19,13 @@ impl MockRoom { } pub fn join(room_id: String) -> MockRoom { + let (s, r) = unbounded(); + s.send(vec![]).ok().unwrap(); MockRoom { last: "".to_string(), room_id: room_id, - events: vec![], + events_s: s, + events_r: r, } } @@ -34,7 +38,8 @@ impl Room for MockRoom { fn sync(&mut self) -> Vec { let mut unseen: Vec = vec![]; let mut last = self.last.clone(); - for e in &self.events { + let events = self.events_r.recv().ok().unwrap(); + for e in &events { if e.next == self.last { unseen.clear(); } else { @@ -42,6 +47,7 @@ impl Room for MockRoom { last = e.next.clone(); } } + self.events_s.send(events).ok().unwrap(); self.last = last; return unseen; } @@ -52,7 +58,9 @@ impl Room for MockRoom { next: rands(), body: message, }; - self.events.push(e); + let mut events = self.events_r.recv().ok().unwrap(); + events.push(e); + self.events_s.send(events).ok().unwrap(); Ok("ok") } @@ -63,7 +71,7 @@ impl Room for MockRoom { impl Drop for MockRoom { fn drop(&mut self) { - println!("not impl"); + println!("MockRoom::drop not impl"); } } @@ -84,14 +92,15 @@ mod tests { fn _dummy() -> MockRoom { let mut r = MockRoom::create(); r.last = "1".to_string(); - r.events = vec![]; + let mut events = r.events_r.recv().ok().unwrap(); for i in 0..5 { - r.events.push(Event{ + events.push(Event{ sender: i.to_string(), next: i.to_string(), body: i.to_string(), }); } + r.events_s.send(events).ok().unwrap(); r } diff --git a/secert-hitler/src/controller/state/mockrooms.rs b/secert-hitler/src/controller/state/mockrooms.rs index 963aa5f..9b1f042 100644 --- a/secert-hitler/src/controller/state/mockrooms.rs +++ b/secert-hitler/src/controller/state/mockrooms.rs @@ -86,4 +86,38 @@ mod tests { assert!(r.is_ok()); assert!(r.ok().unwrap().room_id() == "0"); } + + #[test] + fn join_clobber() { + let mrs = _dummy(); + let mut a = mrs.join("0".to_string()).ok().unwrap(); + let mut b = mrs.join("0".to_string()).ok().unwrap(); + assert!(a.room_id() == b.room_id()); + assert!(a.sync().len() == b.sync().len()); + assert!(a.sync().len() == b.sync().len()); + assert!(a.sync().len() == 0); + assert!(b.sync().len() == 0); + assert!(a.send("from a".to_string()).is_ok()); + assert!(a.sync().len() == 1); + assert!(b.sync().len() == 1); + assert!(b.send("from b".to_string()).is_ok()); + assert!(b.send("from b".to_string()).is_ok()); + assert!(a.sync().len() == 2); + assert!(b.sync().len() == 2); + assert!(a.send("from a".to_string()).is_ok()); + assert!(b.send("from b".to_string()).is_ok()); + assert!(a.send("from a".to_string()).is_ok()); + assert!(a.sync().len() == 3); + assert!(b.sync().len() == 3); + assert!(a.send("from a".to_string()).is_ok()); + assert!(b.send("from b".to_string()).is_ok()); + let a = a.sync(); + let b = b.sync(); + assert!(a.len() == 2); + assert!(b.len() == 2); + assert!(a[0].body == "from a"); + assert!(b[0].body == "from a"); + assert!(a[1].body == "from b"); + assert!(b[1].body == "from b"); + } } diff --git a/testdata/matrix-sandbox/homeserver.log b/testdata/matrix-sandbox/homeserver.log index 57065af..08e891c 100644 --- a/testdata/matrix-sandbox/homeserver.log +++ b/testdata/matrix-sandbox/homeserver.log @@ -557,3 +557,24 @@ 2020-05-02 14:11:12,328 - synapse.storage.data_stores.main.event_push_actions - 511 - INFO - event_push_action_stream_orderings-40 - Found stream ordering 1 day ago: it's 2 2020-05-02 14:11:12,336 - synapse.storage.data_stores.main - 425 - INFO - generate_user_daily_visits-81 - Calling _generate_user_daily_visits 2020-05-02 14:12:42,319 - synapse.metrics - 464 - INFO - - Collecting gc 1 +2020-05-02 14:16:12,336 - synapse.storage.data_stores.main - 425 - INFO - generate_user_daily_visits-82 - Calling _generate_user_daily_visits +2020-05-02 14:18:37,323 - synapse.metrics - 464 - INFO - - Collecting gc 1 +2020-05-02 14:21:12,322 - synapse.storage.data_stores.main.event_push_actions - 834 - INFO - rotate_notifs-13 - Rotating notifications +2020-05-02 14:21:12,329 - synapse.storage.data_stores.main.event_push_actions - 499 - INFO - event_push_action_stream_orderings-41 - Searching for stream ordering 1 month ago +2020-05-02 14:21:12,331 - synapse.storage.data_stores.main.event_push_actions - 504 - INFO - event_push_action_stream_orderings-41 - Found stream ordering 1 month ago: it's 2 +2020-05-02 14:21:12,331 - synapse.storage.data_stores.main.event_push_actions - 506 - INFO - event_push_action_stream_orderings-41 - Searching for stream ordering 1 day ago +2020-05-02 14:21:12,332 - synapse.storage.data_stores.main.event_push_actions - 511 - INFO - event_push_action_stream_orderings-41 - Found stream ordering 1 day ago: it's 2 +2020-05-02 14:21:12,334 - synapse.storage.data_stores.main.event_push_actions - 878 - INFO - rotate_notifs-13 - Rotating notifications up to: 2 +2020-05-02 14:21:12,336 - synapse.storage.data_stores.main.event_push_actions - 913 - INFO - rotate_notifs-13 - Rotating notifications, handling 0 rows +2020-05-02 14:21:12,337 - synapse.storage.data_stores.main.event_push_actions - 947 - INFO - rotate_notifs-13 - Rotating notifications, deleted 0 push actions +2020-05-02 14:21:12,351 - synapse.storage.data_stores.main - 425 - INFO - generate_user_daily_visits-83 - Calling _generate_user_daily_visits +2020-05-02 14:24:02,323 - synapse.metrics - 464 - INFO - - Collecting gc 1 +2020-05-02 14:24:02,326 - synapse.metrics - 464 - INFO - - Collecting gc 2 +2020-05-02 14:26:12,336 - synapse.storage.data_stores.main - 425 - INFO - generate_user_daily_visits-84 - Calling _generate_user_daily_visits +2020-05-02 14:28:42,321 - synapse.metrics - 464 - INFO - - Collecting gc 1 +2020-05-02 14:31:12,323 - synapse.storage.data_stores.main.event_push_actions - 499 - INFO - event_push_action_stream_orderings-42 - Searching for stream ordering 1 month ago +2020-05-02 14:31:12,326 - synapse.storage.data_stores.main.event_push_actions - 504 - INFO - event_push_action_stream_orderings-42 - Found stream ordering 1 month ago: it's 2 +2020-05-02 14:31:12,327 - synapse.storage.data_stores.main.event_push_actions - 506 - INFO - event_push_action_stream_orderings-42 - Searching for stream ordering 1 day ago +2020-05-02 14:31:12,327 - synapse.storage.data_stores.main.event_push_actions - 511 - INFO - event_push_action_stream_orderings-42 - Found stream ordering 1 day ago: it's 2 +2020-05-02 14:31:12,336 - synapse.storage.data_stores.main - 425 - INFO - generate_user_daily_visits-85 - Calling _generate_user_daily_visits +2020-05-02 14:34:22,322 - synapse.metrics - 464 - INFO - - Collecting gc 1