add a basic matchrunner test
This commit is contained in:
parent
9e05a9bdd5
commit
9643ccf6d6
3 changed files with 69 additions and 0 deletions
|
@ -18,3 +18,6 @@ chrono = { version = "0.4", features = ["serde"] }
|
|||
bollard = { git = "https://github.com/fussybeaver/bollard", rev = "c5d87a4934c70a04f9c649fedb241dbd4943c927" }
|
||||
bytes = "1.1"
|
||||
async-trait = "0.1"
|
||||
|
||||
[dev-dependencies]
|
||||
tempfile = "3"
|
25
planetwars-matchrunner/maps/abc.json
Normal file
25
planetwars-matchrunner/maps/abc.json
Normal file
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"planets": [
|
||||
{
|
||||
"name": "a",
|
||||
"x": -3,
|
||||
"y": 0,
|
||||
"owner": 1,
|
||||
"ship_count": 5
|
||||
},
|
||||
{
|
||||
"name": "b",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"ship_count": 5
|
||||
},
|
||||
{
|
||||
"name": "c",
|
||||
"x": 3,
|
||||
"y": 0,
|
||||
"owner": 2,
|
||||
"ship_count": 5
|
||||
}
|
||||
]
|
||||
}
|
||||
|
41
planetwars-matchrunner/tests/test_matchrunner.rs
Normal file
41
planetwars-matchrunner/tests/test_matchrunner.rs
Normal file
|
@ -0,0 +1,41 @@
|
|||
use std::io::BufRead;
|
||||
use std::path::PathBuf;
|
||||
|
||||
use planetwars_matchrunner::{docker_runner::DockerBotSpec, run_match, MatchConfig, MatchPlayer};
|
||||
|
||||
const PYTHON_IMAGE: &str = "python:3.10-slim-buster";
|
||||
|
||||
#[tokio::test]
|
||||
async fn match_does_run() {
|
||||
let simplebot_path = std::fs::canonicalize("bots/simplebot").unwrap();
|
||||
let simplebot_path_str = simplebot_path.as_os_str().to_str().unwrap();
|
||||
|
||||
let log_file = tempfile::NamedTempFile::new().unwrap();
|
||||
|
||||
let bot = DockerBotSpec {
|
||||
image: PYTHON_IMAGE.to_string(),
|
||||
binds: Some(vec![format!("{}:{}", simplebot_path_str, "/workdir")]),
|
||||
argv: Some(vec!["python".to_string(), "simplebot.py".to_string()]),
|
||||
working_dir: Some("/workdir".to_string()),
|
||||
pull: false,
|
||||
credentials: None,
|
||||
};
|
||||
let config = MatchConfig {
|
||||
map_name: "hex".to_string(),
|
||||
map_path: PathBuf::from("maps/abc.json"),
|
||||
log_path: PathBuf::from(log_file.path()),
|
||||
players: vec![
|
||||
MatchPlayer {
|
||||
bot_spec: Box::new(bot.clone()),
|
||||
},
|
||||
MatchPlayer {
|
||||
bot_spec: Box::new(bot.clone()),
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
run_match(config).await;
|
||||
|
||||
let line_count = std::io::BufReader::new(log_file.as_file()).lines().count();
|
||||
assert!(line_count > 0);
|
||||
}
|
Loading…
Reference in a new issue