|
|
|
@ -61,15 +61,23 @@ impl Executor { |
|
|
|
mod tests {
|
|
|
|
use std::sync::{Arc, Barrier};
|
|
|
|
|
|
|
|
use parking_lot::Mutex;
|
|
|
|
use solstice_proto::{User, UserStatus};
|
|
|
|
use tokio::sync::mpsc::channel;
|
|
|
|
|
|
|
|
use super::{Context, Executor, Job};
|
|
|
|
use super::{Executor, Job};
|
|
|
|
use crate::context::{Context, State};
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn immediate_join_returns_empty_context() {
|
|
|
|
let context = Executor::new(Context::new()).join();
|
|
|
|
assert_eq!(context.users.lock().get_list(), vec![]);
|
|
|
|
assert_eq!(context.rooms.lock().get_room_list(), vec![]);
|
|
|
|
fn immediate_join_returns_unchanged_context() {
|
|
|
|
let (tx, _rx) = channel(1);
|
|
|
|
let context = Executor::new(Context {
|
|
|
|
state: Mutex::new(State::default()),
|
|
|
|
server_request_tx: tx,
|
|
|
|
})
|
|
|
|
.join();
|
|
|
|
assert_eq!(context.state.lock().users.get_list(), vec![]);
|
|
|
|
assert_eq!(context.state.lock().rooms.get_room_list(), vec![]);
|
|
|
|
}
|
|
|
|
|
|
|
|
struct Waiter {
|
|
|
|
@ -84,7 +92,11 @@ mod tests { |
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn join_waits_for_all_jobs() {
|
|
|
|
let executor = Executor::new(Context::new());
|
|
|
|
let (tx, _rx) = channel(1);
|
|
|
|
let executor = Executor::new(Context {
|
|
|
|
state: Mutex::new(State::default()),
|
|
|
|
server_request_tx: tx,
|
|
|
|
});
|
|
|
|
|
|
|
|
let barrier = Arc::new(Barrier::new(2));
|
|
|
|
|
|
|
|
@ -104,13 +116,17 @@ mod tests { |
|
|
|
|
|
|
|
impl Job for UserAdder {
|
|
|
|
fn execute(self: Box<Self>, context: &Context) {
|
|
|
|
context.users.lock().insert(self.user);
|
|
|
|
context.state.lock().users.insert(self.user);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn jobs_access_context() {
|
|
|
|
let executor = Executor::new(Context::new());
|
|
|
|
let (tx, _rx) = channel(1);
|
|
|
|
let executor = Executor::new(Context {
|
|
|
|
state: Mutex::new(State::default()),
|
|
|
|
server_request_tx: tx,
|
|
|
|
});
|
|
|
|
|
|
|
|
let user1 = User {
|
|
|
|
name: "potato".to_string(),
|
|
|
|
@ -139,7 +155,7 @@ mod tests { |
|
|
|
let expected_users =
|
|
|
|
vec![(user1.name.clone(), user1), (user2.name.clone(), user2)];
|
|
|
|
|
|
|
|
let mut users = context.users.lock().get_list();
|
|
|
|
let mut users = context.state.lock().users.get_list();
|
|
|
|
users.sort();
|
|
|
|
|
|
|
|
assert_eq!(users, expected_users);
|
|
|
|
|