[go: up one dir, main page]

mongodb 0.3.10

A native MongoDB driver developed under MongoDB labs.
Documentation
use bson::{self, Bson};
use mongodb::{DRIVER_NAME, Client, ThreadedClient};
use mongodb::db::ThreadedDatabase;
use mongodb::CommandType;

#[derive(Debug, Deserialize)]
struct Metadata {
    #[serde(rename = "clientMetadata")]
    pub client: ClientMetadata,
}

#[derive(Debug, Deserialize)]
struct ClientMetadata {
    pub driver: DriverMetadata,
    pub os: OsMetadata,
}

#[derive(Debug, Deserialize)]
struct DriverMetadata {
    pub name: String,
    pub version: String,
}

#[derive(Debug, Deserialize)]
struct OsMetadata {
    #[serde(rename = "type")]
    pub os_type: String,
    pub architecture: String,
}

#[test]
fn metadata_sent_in_handshake() {
    let client = Client::connect("localhost", 27017).unwrap();
    let db = client.db("admin");
    skip_if_db_version_below!(db, 3, 4);

    let result = db.command(doc! { "currentOp" => 1 }, CommandType::Suppressed, None).unwrap();
    let in_prog = match result.get("inprog") {
        Some(Bson::Array(in_prog)) => in_prog,
        _ => panic!("no `inprog` array found in response to `currentOp`"),
    };

    let metadata: Metadata = bson::from_bson(in_prog[0].clone()).unwrap();
    assert_eq!(metadata.client.driver.name, DRIVER_NAME);
}