extern crate chrono;
extern crate sentry_types;
extern crate serde_json;
use std::collections::HashMap;
use chrono::{TimeZone, Utc};
use sentry_types::{protocol, Auth, Dsn};
#[test]
fn test_auth_parsing() {
let auth: Auth = "Sentry sentry_timestamp=1328055286.5, \
sentry_client=raven-python/42, \
sentry_version=6, \
sentry_key=public, \
sentry_secret=secret"
.parse()
.unwrap();
assert_eq!(
auth.timestamp(),
Some(Utc.ymd(2012, 2, 1).and_hms_milli(0, 14, 46, 500))
);
assert_eq!(auth.client_agent(), Some("raven-python/42"));
assert_eq!(auth.version(), 6);
assert_eq!(auth.public_key(), "public");
assert_eq!(auth.secret_key(), Some("secret"));
assert_eq!(
auth.to_string(),
"Sentry sentry_key=public, \
sentry_version=6, \
sentry_timestamp=1328055286.5, \
sentry_client=raven-python/42, \
sentry_secret=secret"
);
}
#[test]
fn test_auth_from_iterator() {
let mut cont = HashMap::new();
cont.insert("sentry_version", "7");
cont.insert("sentry_client", "raven-js/3.23.3");
cont.insert("sentry_key", "4bb5d94de752a36b8b87851a3f82726a");
let auth = Auth::from_pairs(cont.into_iter().map(|(k, v)| (k.into(), v.into()))).unwrap();
assert_eq!(auth.timestamp(), None);
assert_eq!(auth.client_agent(), Some("raven-js/3.23.3"));
assert_eq!(auth.version(), 7);
assert_eq!(auth.public_key(), "4bb5d94de752a36b8b87851a3f82726a");
assert_eq!(auth.secret_key(), None);
let mut cont = HashMap::new();
cont.insert("version", "7");
cont.insert("client", "raven-js/3.23.3");
cont.insert("key", "4bb5d94de752a36b8b87851a3f82726a");
let auth = Auth::from_pairs(cont.into_iter().map(|(k, v)| (k.into(), v.into()))).unwrap();
assert_eq!(auth.timestamp(), None);
assert_eq!(auth.client_agent(), Some("raven-js/3.23.3"));
assert_eq!(auth.version(), 7);
assert_eq!(auth.public_key(), "4bb5d94de752a36b8b87851a3f82726a");
assert_eq!(auth.secret_key(), None);
}
#[test]
fn test_auth_from_querystring() {
let auth = Auth::from_querystring(b"sentry_version=7&sentry_client=raven-js/3.23.3&sentry_key=4bb5d94de752a36b8b87851a3f82726a").unwrap();
assert_eq!(auth.timestamp(), None);
assert_eq!(auth.client_agent(), Some("raven-js/3.23.3"));
assert_eq!(auth.version(), 7);
assert_eq!(auth.public_key(), "4bb5d94de752a36b8b87851a3f82726a");
assert_eq!(auth.secret_key(), None);
let auth = Auth::from_querystring(
b"version=7&client=raven-js/3.23.3&key=4bb5d94de752a36b8b87851a3f82726a",
).unwrap();
assert_eq!(auth.timestamp(), None);
assert_eq!(auth.client_agent(), Some("raven-js/3.23.3"));
assert_eq!(auth.version(), 7);
assert_eq!(auth.public_key(), "4bb5d94de752a36b8b87851a3f82726a");
assert_eq!(auth.secret_key(), None);
}
#[test]
fn test_auth_to_dsn() {
let url = "https://username:password@domain:8888/23";
let dsn = url.parse::<Dsn>().unwrap();
let auth = dsn.to_auth(Some("sentry-rust/1.0"));
assert_eq!(auth.client_agent(), Some("sentry-rust/1.0"));
assert_eq!(auth.version(), protocol::LATEST);
assert_eq!(auth.public_key(), "username");
assert_eq!(auth.secret_key(), Some("password"));
}
#[test]
fn test_auth_to_json() {
let mut cont = HashMap::new();
cont.insert("sentry_version", "7");
cont.insert("sentry_client", "raven-js/3.23.3");
cont.insert("sentry_key", "4bb5d94de752a36b8b87851a3f82726a");
let auth = Auth::from_pairs(cont.into_iter().map(|(k, v)| (k.into(), v.into()))).unwrap();
assert_eq!(
serde_json::to_string(&auth).expect("could not serialize").as_str(),
"{\"sentry_client\":\"raven-js/3.23.3\",\"sentry_version\":7,\"sentry_key\":\"4bb5d94de752a36b8b87851a3f82726a\",\"sentry_secret\":null}"
);
}
#[test]
fn test_auth_from_json() {
let json = "{\"sentry_client\":\"raven-js/3.23.3\",\"sentry_version\":7,\"sentry_key\":\"4bb5d94de752a36b8b87851a3f82726a\"}";
let auth: Auth = serde_json::from_str(json).expect("could not deserialize");
assert_eq!(auth.timestamp(), None);
assert_eq!(auth.client_agent(), Some("raven-js/3.23.3"));
assert_eq!(auth.version(), 7);
assert_eq!(auth.public_key(), "4bb5d94de752a36b8b87851a3f82726a");
assert_eq!(auth.secret_key(), None);
}