use dsn::parse;
#[test]
fn test_parse_driver1() {
let dsn = parse(r#"mysql://user@unix(/path/to/socket)/pear"#).unwrap();
assert_eq!(dsn.driver, "mysql");
assert_eq!(dsn.username.unwrap(), "user");
assert_eq!(dsn.password, None);
assert_eq!(dsn.protocol, "unix");
assert_eq!(dsn.address, "/path/to/socket");
assert_eq!(dsn.host, None);
assert_eq!(dsn.port, None);
assert_eq!(dsn.database.unwrap(), "pear");
assert_eq!(dsn.socket.unwrap(), "/path/to/socket");
assert!(dsn.params.is_empty());
}
#[test]
fn test_parse_driver2() {
let dsn = parse(r#"pgsql://user:pass@tcp(localhost:5555)/pear"#).unwrap();
println!("{:#?}", dsn);
assert_eq!(dsn.driver, "pgsql");
assert_eq!(dsn.username.unwrap(), "user");
assert_eq!(dsn.password.unwrap(), "pass");
assert_eq!(dsn.protocol, "tcp");
assert_eq!(dsn.address, "localhost:5555");
assert_eq!(dsn.host.unwrap(), "localhost");
assert_eq!(dsn.port.unwrap(), 5555);
assert_eq!(dsn.database.unwrap(), "pear");
assert_eq!(dsn.socket, None);
assert!(dsn.params.is_empty());
}
#[test]
fn test_parse_driver3() {
let dsn = parse(r#"sqlite://@file(/full/unix/path/to/file.db)/?mode=0660"#).unwrap();
println!("{:#?}", dsn);
assert_eq!(dsn.driver, "sqlite");
assert_eq!(dsn.username, None);
assert_eq!(dsn.password, None);
assert_eq!(dsn.protocol, "file");
assert_eq!(dsn.address, "/full/unix/path/to/file.db");
assert_eq!(dsn.host, None);
assert_eq!(dsn.port, None);
assert_eq!(dsn.database, None);
assert_eq!(dsn.socket, None);
assert!(!dsn.params.is_empty());
assert_eq!(dsn.params.get("mode").unwrap(), "0660");
}
#[test]
fn test_parse_driver4() {
assert!(
parse(r#"mysql://@unix(/tmp/mysql.sock)/?tls=false&cert"#).is_err(),
"params are wrong"
);
}
#[test]
fn test_parse_driver5() {
let dsn = parse(r#"mysql://@unix(/tmp/mysql.sock)/?charset=utf8&tls=false&cert="#).unwrap();
println!("{:#?}", dsn);
assert_eq!(dsn.driver, "mysql");
assert_eq!(dsn.username, None);
assert_eq!(dsn.password, None);
assert_eq!(dsn.protocol, "unix");
assert_eq!(dsn.address, "/tmp/mysql.sock");
assert_eq!(dsn.host, None);
assert_eq!(dsn.port, None);
assert_eq!(dsn.database, None);
assert_eq!(dsn.socket.unwrap(), "/tmp/mysql.sock");
assert!(!dsn.params.is_empty());
assert_eq!(dsn.params.get("charset").unwrap(), "utf8");
assert_eq!(dsn.params.get("tls").unwrap(), "false");
}
#[test]
fn password_decode1() {
let dsn = parse(r#"mysql://root:%21%41%34%54%40%68%68%27%63%55%6a%37%4c%58%58%76%6b%22@tcp(10.0.0.1:3306)/test"#).unwrap();
println!("{:#?}", dsn);
assert_eq!(dsn.driver, "mysql");
assert_eq!(dsn.username.unwrap(), "root");
assert_eq!(dsn.password.unwrap(), r#"!A4T@hh'cUj7LXXvk""#);
assert_eq!(dsn.protocol, "tcp");
assert_eq!(dsn.address, "10.0.0.1:3306");
assert_eq!(dsn.host.unwrap(), "10.0.0.1");
assert_eq!(dsn.port.unwrap(), 3306);
assert_eq!(dsn.database.unwrap(), "test");
assert_eq!(dsn.socket, None);
assert!(dsn.params.is_empty());
}
#[test]
fn password_decode2() {
let dsn = parse(r#"mysql://root:!A4T%40hh'cUj7LXXvk%22@tcp(10.0.0.1:3306)/test"#).unwrap();
println!("{:#?}", dsn);
assert_eq!(dsn.driver, "mysql");
assert_eq!(dsn.username.unwrap(), "root");
assert_eq!(dsn.password.unwrap(), r#"!A4T@hh'cUj7LXXvk""#);
assert_eq!(dsn.protocol, "tcp");
assert_eq!(dsn.address, "10.0.0.1:3306");
assert_eq!(dsn.host.unwrap(), "10.0.0.1");
assert_eq!(dsn.port.unwrap(), 3306);
assert_eq!(dsn.database.unwrap(), "test");
assert_eq!(dsn.socket, None);
assert!(dsn.params.is_empty());
}