|
1 | 1 | #[cfg(test)] |
2 | 2 | mod tests { |
3 | | - use crate::pool_manager::format_error_chain; |
| 3 | + use crate::models::{ConnectionParams, DatabaseSelection}; |
| 4 | + use crate::pool_manager::{build_connection_key, build_mysql_options, format_error_chain}; |
| 5 | + use sqlx::mysql::MySqlSslMode; |
| 6 | + |
| 7 | + fn connection_params(driver: &str, ssl_mode: Option<&str>) -> ConnectionParams { |
| 8 | + ConnectionParams { |
| 9 | + driver: driver.to_string(), |
| 10 | + host: Some("127.0.0.1".to_string()), |
| 11 | + port: Some(match driver { |
| 12 | + "postgres" => 5432, |
| 13 | + "mysql" => 3306, |
| 14 | + _ => 0, |
| 15 | + }), |
| 16 | + username: Some("dec".to_string()), |
| 17 | + password: Some("secret".to_string()), |
| 18 | + database: DatabaseSelection::Single("dec".to_string()), |
| 19 | + ssl_mode: ssl_mode.map(ToOwned::to_owned), |
| 20 | + ssl_ca: None, |
| 21 | + ssl_cert: None, |
| 22 | + ssl_key: None, |
| 23 | + ssh_enabled: Some(true), |
| 24 | + ssh_connection_id: Some("ssh-1".to_string()), |
| 25 | + ssh_host: Some("149.202.85.42".to_string()), |
| 26 | + ssh_port: Some(2222), |
| 27 | + ssh_user: Some("julien".to_string()), |
| 28 | + ssh_password: None, |
| 29 | + ssh_key_file: Some("/Users/julienbarbe/.ssh/id_rsa".to_string()), |
| 30 | + ssh_key_passphrase: None, |
| 31 | + save_in_keychain: None, |
| 32 | + connection_id: Some("conn-1".to_string()), |
| 33 | + ..Default::default() |
| 34 | + } |
| 35 | + } |
| 36 | + |
| 37 | + fn mysql_params(ssl_mode: &str) -> ConnectionParams { |
| 38 | + connection_params("mysql", Some(ssl_mode)) |
| 39 | + } |
4 | 40 |
|
5 | 41 | #[test] |
6 | 42 | fn format_error_chain_walks_sources() { |
@@ -34,6 +70,58 @@ mod tests { |
34 | 70 | "outer message -> inner cause" |
35 | 71 | ); |
36 | 72 | } |
| 73 | + |
| 74 | + #[test] |
| 75 | + fn mysql_pool_key_changes_when_ssl_mode_changes() { |
| 76 | + let required = mysql_params("required"); |
| 77 | + let disabled = mysql_params("disabled"); |
| 78 | + |
| 79 | + assert_ne!( |
| 80 | + build_connection_key(&required, Some("conn-1")), |
| 81 | + build_connection_key(&disabled, Some("conn-1")) |
| 82 | + ); |
| 83 | + } |
| 84 | + |
| 85 | + #[test] |
| 86 | + fn postgres_pool_key_ignores_mysql_ssl_key_fields() { |
| 87 | + let required = connection_params("postgres", Some("required")); |
| 88 | + let disabled = connection_params("postgres", Some("disabled")); |
| 89 | + |
| 90 | + assert_eq!( |
| 91 | + build_connection_key(&required, Some("conn-1")), |
| 92 | + build_connection_key(&disabled, Some("conn-1")) |
| 93 | + ); |
| 94 | + } |
| 95 | + |
| 96 | + #[test] |
| 97 | + fn sqlite_pool_key_ignores_mysql_ssl_key_fields() { |
| 98 | + let required = connection_params("sqlite", Some("required")); |
| 99 | + let disabled = connection_params("sqlite", Some("disabled")); |
| 100 | + |
| 101 | + assert_eq!( |
| 102 | + build_connection_key(&required, Some("conn-1")), |
| 103 | + build_connection_key(&disabled, Some("conn-1")) |
| 104 | + ); |
| 105 | + } |
| 106 | + |
| 107 | + #[test] |
| 108 | + fn mysql_options_accept_snake_case_verify_ssl_modes() { |
| 109 | + let verify_ca = mysql_params("verify_ca"); |
| 110 | + let verify_identity = mysql_params("verify_identity"); |
| 111 | + |
| 112 | + assert!(matches!( |
| 113 | + build_mysql_options(&verify_ca, None) |
| 114 | + .unwrap() |
| 115 | + .get_ssl_mode(), |
| 116 | + MySqlSslMode::VerifyCa |
| 117 | + )); |
| 118 | + assert!(matches!( |
| 119 | + build_mysql_options(&verify_identity, None) |
| 120 | + .unwrap() |
| 121 | + .get_ssl_mode(), |
| 122 | + MySqlSslMode::VerifyIdentity |
| 123 | + )); |
| 124 | + } |
37 | 125 | } |
38 | 126 |
|
39 | 127 | #[cfg(test)] |
|
0 commit comments