use tempfile::tempdir;
use kalavara::master::start as master_start;
use kalavara::volume::start as volume_start;
use std::sync::{Once, ONCE_INIT};
use std::thread;
use std::time::Duration;
mod basic;
static INIT: Once = ONCE_INIT;
fn run() {
let master_data_dir = tempdir().unwrap();
let volume_data_dir = tempdir().unwrap();
thread::spawn(move || {
master_start(6001, master_data_dir.path().to_str().unwrap(), 4, vec![]);
});
thread::spawn(move || {
volume_start(
7001,
volume_data_dir.path().to_str().unwrap().to_owned(),
4,
None,
None,
);
});
}
fn setup() {
INIT.call_once(|| {
run();
thread::sleep(Duration::from_millis(1000));
});
}
#[test]
fn test_add_volume() {
setup();
let res = minreq::put("http://localhost:6001/store/key1")
.with_body("val1")
.send();
assert!(res.is_ok());
assert_eq!(res.unwrap().status_code, 503);
let res = minreq::post("http://localhost:6001/admin/add-volume")
.with_body("http://localhost:7001")
.send();
assert!(res.is_ok());
let res = res.unwrap();
assert_eq!(res.body, "Volume added");
let res = minreq::post("http://localhost:6001/admin/add-volume")
.with_body("http://localhost:7001")
.send();
assert!(res.is_ok());
let res = res.unwrap();
assert_eq!(res.body.trim(), "Skipping duplicate volume server");
let res = minreq::put("http://localhost:6001/store/key1")
.with_body("val1")
.send();
assert!(res.is_ok());
assert_eq!(res.unwrap().status_code, 201);
let res = minreq::get("http://localhost:6001/store/key1").send();
assert!(res.is_ok());
let res = res.unwrap();
assert_eq!(res.status_code, 200);
assert_eq!(res.body.trim(), "val1");
let res = minreq::delete("http://localhost:6001/store/key1").send();
assert!(res.is_ok());
assert_eq!(res.unwrap().status_code, 204);
let res = minreq::get("http://localhost:6001/store/key1").send();
assert!(res.is_ok());
assert_eq!(res.unwrap().status_code, 404);
}