refactor: helpers for match setup
This commit is contained in:
parent
332b3e4a13
commit
6cc629a3b7
1 changed files with 29 additions and 10 deletions
|
@ -1,6 +1,8 @@
|
||||||
|
use futures::{Future, FutureExt};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::io::BufRead;
|
use std::io::BufRead;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
use std::pin::Pin;
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use tokio::sync::mpsc;
|
use tokio::sync::mpsc;
|
||||||
|
@ -54,22 +56,39 @@ async fn match_does_run() {
|
||||||
tokio::time::sleep(Duration::from_secs(1)).await
|
tokio::time::sleep(Duration::from_secs(1)).await
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
async fn match_ctx_from_bot_spec<B: BotSpec>(bot_spec: B) -> MatchCtx {
|
||||||
async fn docker_runner_timeout() {
|
|
||||||
let event_bus = Arc::new(Mutex::new(EventBus::new()));
|
let event_bus = Arc::new(Mutex::new(EventBus::new()));
|
||||||
let (logger, _rx) = mpsc::unbounded_channel();
|
let (logger, _rx) = mpsc::unbounded_channel();
|
||||||
let bot_spec = simple_python_docker_bot_spec("./bots", "timeout_bot.py");
|
|
||||||
|
|
||||||
let player_handle = bot_spec.run_bot(1, event_bus.clone(), logger.clone()).await;
|
let player_handle = bot_spec.run_bot(1, event_bus.clone(), logger.clone()).await;
|
||||||
|
|
||||||
let mut players = HashMap::new();
|
let mut players = HashMap::new();
|
||||||
players.insert(1, player_handle);
|
players.insert(1, player_handle);
|
||||||
let mut ctx = MatchCtx::new(event_bus, players, logger);
|
MatchCtx::new(event_bus, players, logger)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// creates a simple match ctx which only holds a single bot
|
||||||
|
async fn with_bot_match_ctx<B, F>(bot_spec: B, func: F)
|
||||||
|
where
|
||||||
|
F: FnOnce(&mut MatchCtx) -> Pin<Box<dyn '_ + Future<Output = ()>>>,
|
||||||
|
B: BotSpec,
|
||||||
|
{
|
||||||
|
let mut ctx = match_ctx_from_bot_spec(bot_spec).await;
|
||||||
|
func(&mut ctx).await;
|
||||||
|
ctx.shutdown().await;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn docker_runner_timeout() {
|
||||||
|
let bot_spec = simple_python_docker_bot_spec("./bots", "timeout_bot.py");
|
||||||
|
with_bot_match_ctx(bot_spec, |ctx| {
|
||||||
|
async move {
|
||||||
let resp = ctx
|
let resp = ctx
|
||||||
.request(1, b"sup".to_vec(), Duration::from_millis(1000))
|
.request(1, b"sup".to_vec(), Duration::from_millis(200))
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
assert_eq!(resp, Err(RequestError::Timeout));
|
assert_eq!(resp, Err(RequestError::Timeout));
|
||||||
ctx.shutdown().await;
|
}
|
||||||
|
.boxed()
|
||||||
|
})
|
||||||
|
.await;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue