use std::net::ToSocketAddrs;
use std::sync::atomic::AtomicUsize;
use std::sync::atomic::Ordering;
use crate::client_datastore::ClientDatastore;
use crate::server;
use futures::executor::LocalPool;
use futures::prelude::*;
use futures::task::LocalSpawn;
use indradb::util::generate_temporary_path;
use indradb::{Datastore, Transaction};
const START_PORT: u16 = 27616;
lazy_static! {
static ref CURRENT_PORT: AtomicUsize = AtomicUsize::new(START_PORT as usize);
}
full_test_impl!({
let port = (*CURRENT_PORT).fetch_add(1, Ordering::SeqCst);
let addr = format!("127.0.0.1:{}", port).to_socket_addrs().unwrap().next().unwrap();
let exec = LocalPool::new();
let spawner = exec.spawner();
let f = server::run(addr, indradb::MemoryDatastore::default(), exec.spawner());
spawner
.spawn_local_obj(Box::pin(f.map_err(|err| panic!(err)).map(|_| ())).into())
.unwrap();
ClientDatastore::new(port as u16, exec)
});
#[test]
fn should_create_rocksdb_datastore() {
let port = (*CURRENT_PORT).fetch_add(1, Ordering::SeqCst);
let addr = format!("127.0.0.1:{}", port).to_socket_addrs().unwrap().next().unwrap();
let exec = LocalPool::new();
let spawner = exec.spawner();
let datastore = indradb::RocksdbDatastore::new(&generate_temporary_path(), None, false).unwrap();
let f = server::run(addr, datastore, exec.spawner());
spawner
.spawn_local_obj(Box::pin(f.map_err(|err| panic!(err)).map(|_| ())).into())
.unwrap();
let datastore = ClientDatastore::new(port as u16, exec);
let trans = datastore.transaction().unwrap();
let count = trans.get_vertex_count().unwrap();
assert_eq!(count, 0);
}