use bson;
use mongodb::{Client, ThreadedClient};
use mongodb::db::ThreadedDatabase;
use std::thread;
#[test]
fn database_names() {
let client = Client::connect("localhost", 27018).unwrap();
let state_results = client.database_names().expect("Failed to execute database_names.");
for name in state_results {
if name != "local" {
client.drop_database(&name[..]).expect("Failed to drop database from server.");
}
}
let base_results = client.database_names().expect("Failed to execute database_names.");
assert_eq!(1, base_results.len());
assert_eq!("local", base_results[0]);
let db1 = client.db("new_db");
let db2 = client.db("new_db_2");
db1.collection("test1").insert_one(bson::Document::new(), None)
.expect("Failed to insert placeholder document into collection");
db2.collection("test2").insert_one(bson::Document::new(), None)
.expect("Failed to insert placeholder document into collection");
let results = client.database_names().expect("Failed to execute database_names.");
assert_eq!(3, results.len());
assert!(results.contains(&"local".to_owned()));
assert!(results.contains(&"new_db".to_owned()));
assert!(results.contains(&"new_db_2".to_owned()));
}
#[test]
fn is_master() {
let client = Client::connect("localhost", 27017).unwrap();
let res = client.is_master().expect("Failed to execute is_master.");
assert!(res);
}
#[test]
fn is_sync() {
let client = Client::connect("localhost", 27018).unwrap();
let state_results = client.database_names().expect("Failed to execute database_names.");
for name in state_results {
if name != "local" {
client.drop_database(&name[..]).expect("Failed to drop database from server.");
}
}
let client1 = client.clone();
let client2 = client.clone();
let base_results = client.database_names().expect("Failed to execute database_names.");
assert_eq!(1, base_results.len());
assert_eq!("local", base_results[0]);
let child1 = thread::spawn(move || {
let db = client1.db("concurrent_db");
db.collection("test1").insert_one(bson::Document::new(), None)
.expect("Failed to insert placeholder document into collection");
let results = client1.database_names().expect("Failed to execute database_names.");
assert!(results.contains(&"concurrent_db".to_owned()));
});
let child2 = thread::spawn(move || {
let db = client2.db("concurrent_db_2");
db.collection("test2").insert_one(bson::Document::new(), None)
.expect("Failed to insert placeholder document into collection");
let results = client2.database_names().expect("Failed to execute database_names.");
assert!(results.contains(&"concurrent_db_2".to_owned()));
});
let _ = child1.join();
let _ = child2.join();
let results = client.database_names().expect("Failed to execute database_names.");
assert_eq!(3, results.len());
assert!(results.contains(&"local".to_owned()));
assert!(results.contains(&"concurrent_db".to_owned()));
assert!(results.contains(&"concurrent_db_2".to_owned()));
}