fix: fix loading imap_certificate_checks

Fix a typo in the config name
(by using `Config::` to avoid it)
and make sure we don't panic on unknown values.

Also test that we don't panic on unknown
`configured_imap_certificate_checks` values.
This commit is contained in:
link2xt
2024-08-21 11:51:41 +00:00
parent 08ec133aac
commit b5133fe8c8

View File

@@ -148,10 +148,12 @@ impl EnteredLoginParam {
// for backwards compatibility, // for backwards compatibility,
// but now it is a global setting applied to all protocols, // but now it is a global setting applied to all protocols,
// while `smtp_certificate_checks` is ignored. // while `smtp_certificate_checks` is ignored.
let certificate_checks = if let Some(certificate_checks) = let certificate_checks = if let Some(certificate_checks) = context
sql.get_raw_config_int("imap_ceritifacte_checks").await? .get_config_parsed::<i32>(Config::ImapCertificateChecks)
.await?
{ {
num_traits::FromPrimitive::from_i32(certificate_checks).unwrap() num_traits::FromPrimitive::from_i32(certificate_checks)
.context("Unknown imap_certificate_checks value")?
} else { } else {
Default::default() Default::default()
}; };
@@ -687,6 +689,34 @@ mod tests {
); );
} }
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn test_entered_login_param() -> Result<()> {
let t = &TestContext::new().await;
t.set_config(Config::Addr, Some("alice@example.org"))
.await?;
t.set_config(Config::MailPw, Some("foobarbaz")).await?;
let param = EnteredLoginParam::load(t).await?;
assert_eq!(param.addr, "alice@example.org");
assert_eq!(
param.certificate_checks,
EnteredCertificateChecks::Automatic
);
t.set_config(Config::ImapCertificateChecks, Some("1"))
.await?;
let param = EnteredLoginParam::load(t).await?;
assert_eq!(param.certificate_checks, EnteredCertificateChecks::Strict);
// Fail to load invalid settings, but do not panic.
t.set_config(Config::ImapCertificateChecks, Some("999"))
.await?;
assert!(EnteredLoginParam::load(t).await.is_err());
Ok(())
}
#[tokio::test(flavor = "multi_thread", worker_threads = 2)] #[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn test_save_load_login_param() -> Result<()> { async fn test_save_load_login_param() -> Result<()> {
let t = TestContext::new().await; let t = TestContext::new().await;
@@ -727,6 +757,11 @@ mod tests {
let loaded = ConfiguredLoginParam::load(&t).await?.unwrap(); let loaded = ConfiguredLoginParam::load(&t).await?.unwrap();
assert_eq!(param, loaded); assert_eq!(param, loaded);
// Test that we don't panic on unknown ConfiguredImapCertificateChecks values.
t.set_config(Config::ConfiguredImapCertificateChecks, Some("999"))
.await?;
assert!(ConfiguredLoginParam::load(&t).await.is_err());
Ok(()) Ok(())
} }