You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
168 lines
5.1 KiB
Rust
168 lines
5.1 KiB
Rust
extern crate bson;
|
|
extern crate mongo_driver;
|
|
|
|
mod helpers;
|
|
|
|
use std::env;
|
|
use std::path::PathBuf;
|
|
use std::sync::Arc;
|
|
use std::thread;
|
|
|
|
use bson::doc;
|
|
use mongo_driver::client::{ClientPool,SslOptions,Uri};
|
|
|
|
#[test]
|
|
fn test_new_pool_pop_client_and_borrow_collection() {
|
|
let uri = Uri::new(helpers::mongodb_test_connection_string()).unwrap();
|
|
let pool = ClientPool::new(uri.clone(), None);
|
|
assert_eq!(pool.get_uri(), &uri);
|
|
|
|
// Pop a client and get a database and collection
|
|
let client = pool.pop();
|
|
pool.pop();
|
|
|
|
let database = client.get_database("rust_test");
|
|
assert_eq!("rust_test", database.get_name().to_mut());
|
|
|
|
let collection = client.get_collection("rust_test", "items");
|
|
assert_eq!("items", collection.get_name().to_mut());
|
|
}
|
|
|
|
#[test]
|
|
fn test_new_pool_pop_client_and_take_collection() {
|
|
let uri = Uri::new(helpers::mongodb_test_connection_string()).unwrap();
|
|
let pool = ClientPool::new(uri.clone(), None);
|
|
assert_eq!(pool.get_uri(), &uri);
|
|
|
|
// Pop a client and take collection
|
|
let client = pool.pop();
|
|
let collection = client.take_collection("rust_test", "items");
|
|
assert_eq!("items", collection.get_name().to_mut());
|
|
}
|
|
|
|
#[test]
|
|
fn test_new_pool_pop_client_and_take_database_and_collection() {
|
|
let uri = Uri::new(helpers::mongodb_test_connection_string()).unwrap();
|
|
let pool = ClientPool::new(uri.clone(), None);
|
|
assert_eq!(pool.get_uri(), &uri);
|
|
|
|
// Pop a client and take database and collection
|
|
let client = pool.pop();
|
|
let database = client.take_database("rust_test");
|
|
assert_eq!("rust_test", database.get_name().to_mut());
|
|
let collection = database.take_collection("items");
|
|
assert_eq!("items", collection.get_name().to_mut());
|
|
}
|
|
|
|
#[test]
|
|
fn test_new_pool_and_pop_client_in_threads() {
|
|
let uri = Uri::new(helpers::mongodb_test_connection_string()).unwrap();
|
|
let pool = Arc::new(ClientPool::new(uri, None));
|
|
|
|
let pool1 = pool.clone();
|
|
let guard1 = thread::spawn(move || {
|
|
let client = pool1.pop();
|
|
client.get_collection("test", "items");
|
|
});
|
|
|
|
let pool2 = pool.clone();
|
|
let guard2 = thread::spawn(move || {
|
|
let client = pool2.pop();
|
|
client.get_collection("test", "items");
|
|
});
|
|
|
|
guard1.join().unwrap();
|
|
guard2.join().unwrap();
|
|
}
|
|
|
|
#[test]
|
|
fn test_get_server_status() {
|
|
let uri = Uri::new(helpers::mongodb_test_connection_string()).unwrap();
|
|
let pool = ClientPool::new(uri, None);
|
|
let client = pool.pop();
|
|
|
|
let status = client.get_server_status(None).unwrap();
|
|
|
|
assert!(status.contains_key("host"));
|
|
assert!(status.contains_key("version"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_read_command_with_opts() {
|
|
let uri = Uri::new(helpers::mongodb_test_connection_string()).unwrap();
|
|
let pool = ClientPool::new(uri, None);
|
|
let client = pool.pop();
|
|
let db_name = "rust_driver_test";
|
|
let coll_name = "test_read_command_with_opts";
|
|
let collection = client.get_collection(db_name, coll_name);
|
|
|
|
let document = doc! {
|
|
"key_1": "Value 1",
|
|
"key_2": "kācaṃ śaknomyattum; nopahinasti mām. \u{0}"
|
|
};
|
|
collection.insert(&document, None).expect("Could not insert document");
|
|
|
|
let status = client.read_command_with_opts(db_name,
|
|
&doc!{"collStats": coll_name},
|
|
None, None).unwrap();
|
|
|
|
assert!(status.contains_key("totalIndexSize"));
|
|
assert!(status.contains_key("storageSize"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_new_pool_with_ssl_options() {
|
|
let uri = Uri::new(helpers::mongodb_test_connection_string()).unwrap();
|
|
let ssl_options = SslOptions::new(
|
|
Some(PathBuf::from("./README.md")),
|
|
Some("password".to_string()),
|
|
Some(PathBuf::from("./README.md")),
|
|
Some(PathBuf::from("./README.md")),
|
|
Some(PathBuf::from("./README.md")),
|
|
false
|
|
).expect("Ssl options not correct");
|
|
ClientPool::new(uri, Some(ssl_options));
|
|
}
|
|
|
|
#[test]
|
|
fn test_ssl_options_nonexistent_file() {
|
|
assert!(SslOptions::new(
|
|
Some(PathBuf::from("/tmp/aaaaa.aa")),
|
|
Some("password".to_string()),
|
|
Some(PathBuf::from("/tmp/aaaaa.aa")),
|
|
Some(PathBuf::from("/tmp/aaaaa.aa")),
|
|
Some(PathBuf::from("/tmp/aaaaa.aa")),
|
|
false
|
|
).is_err());
|
|
}
|
|
|
|
// SSL tests below are currently tested on a private replica set, will be skipped if you set
|
|
// the env var SKIP_SSL_CONNECTION_TESTS to true.
|
|
|
|
#[test]
|
|
fn test_ssl_connection_success() {
|
|
if env::var("SKIP_SSL_CONNECTION_TESTS") == Ok("true".to_string()) {
|
|
return
|
|
}
|
|
|
|
let uri = Uri::new(env::var("MONGO_RUST_DRIVER_SSL_URI").unwrap()).unwrap();
|
|
let pem_file = PathBuf::from(env::var("MONGO_RUST_DRIVER_SSL_PEM_FILE").unwrap());
|
|
let ca_file = PathBuf::from(env::var("MONGO_RUST_DRIVER_SSL_CA_FILE").unwrap());
|
|
|
|
let ssl_options = SslOptions::new(
|
|
Some(pem_file),
|
|
None,
|
|
Some(ca_file),
|
|
None,
|
|
None,
|
|
false
|
|
).unwrap();
|
|
|
|
let pool = ClientPool::new(uri, Some(ssl_options));
|
|
let client = pool.pop();
|
|
let database = client.get_database("admin");
|
|
|
|
let result = database.command_simple(doc!{"ping": 1}, None).unwrap();
|
|
assert!(result.contains_key("ok"));
|
|
}
|