diff --git a/packages/hurl/src/http/certificate.rs b/packages/hurl/src/http/certificate.rs index b487f51aaf..fd98900094 100644 --- a/packages/hurl/src/http/certificate.rs +++ b/packages/hurl/src/http/certificate.rs @@ -29,7 +29,7 @@ use super::easy_ext::CertInfo; pub struct Certificate { subject: Option, issuer: Option, - pub start_date: DateTime, + pub start_date: Option>, pub expire_date: DateTime, pub serial_number: String, pub subject_alt_name: Option, @@ -40,7 +40,7 @@ impl Certificate { pub fn new( subject: Option, issuer: Option, - start_date: DateTime, + start_date: Option>, expire_date: DateTime, serial_number: String, subject_alt_name: Option, @@ -75,7 +75,7 @@ impl TryFrom for Certificate { let attributes = parse_attributes(&cert_info.data); let subject = parse_subject(&attributes).ok(); let issuer = parse_issuer(&attributes).ok(); - let start_date = parse_start_date(&attributes)?; + let start_date = parse_start_date(&attributes).ok(); let expire_date = parse_expire_date(&attributes)?; let serial_number = parse_serial_number(&attributes)?; let subject_alt_name = parse_subject_alt_name(&attributes).ok(); @@ -225,7 +225,7 @@ mod tests { ); assert_eq!( parse_start_date(&attributes).unwrap(), - chrono::DateTime::parse_from_rfc2822("Tue, 10 Jan 2023 08:29:52 GMT") + DateTime::parse_from_rfc2822("Tue, 10 Jan 2023 08:29:52 GMT") .unwrap() .with_timezone(&Utc) ); @@ -237,7 +237,7 @@ mod tests { ); assert_eq!( parse_start_date(&attributes).unwrap(), - chrono::DateTime::parse_from_rfc2822("Tue, 10 Jan 2023 08:29:52 GMT") + DateTime::parse_from_rfc2822("Tue, 10 Jan 2023 08:29:52 GMT") .unwrap() .with_timezone(&Utc) ); @@ -300,10 +300,10 @@ mod tests { subject: Some("C = US, ST = Denial, L = Springfield, O = Dis, CN = localhost" .to_string()), issuer: Some("C = US, ST = Denial, L = Springfield, O = Dis, CN = localhost".to_string()), - start_date: chrono::DateTime::parse_from_rfc2822("Tue, 10 Jan 2023 08:29:52 GMT") + start_date: Some(DateTime::parse_from_rfc2822("Tue, 10 Jan 2023 08:29:52 GMT") .unwrap() - .with_timezone(&Utc), - expire_date: chrono::DateTime::parse_from_rfc2822("Thu, 30 Oct 2025 08:29:52 GMT") + .with_timezone(&Utc)), + expire_date: DateTime::parse_from_rfc2822("Thu, 30 Oct 2025 08:29:52 GMT") .unwrap() .with_timezone(&Utc), serial_number: "1e:e8:b1:7f:1b:64:d8:d6:b3:de:87:01:03:d2:a4:f5:33:53:5a:b0" @@ -315,7 +315,7 @@ mod tests { Certificate::try_from(CertInfo { data: vec![] }) .err() .unwrap(), - "missing start date attribute in {}".to_string() + "missing expire date attribute".to_string() ); } } diff --git a/packages/hurl/src/json/result.rs b/packages/hurl/src/json/result.rs index 4a380ccbec..c77410ec6c 100644 --- a/packages/hurl/src/json/result.rs +++ b/packages/hurl/src/json/result.rs @@ -193,7 +193,8 @@ struct CertificateJson { subject: Option, #[serde(skip_serializing_if = "Option::is_none")] issuer: Option, - start_date: String, + #[serde(skip_serializing_if = "Option::is_none")] + start_date: Option, expire_date: String, serial_number: String, #[serde(skip_serializing_if = "Option::is_none")] @@ -449,7 +450,7 @@ impl CertificateJson { CertificateJson { subject: c.subject().cloned(), issuer: c.issuer().cloned(), - start_date: c.start_date.to_string(), + start_date: c.start_date.map(|d| d.to_string()), expire_date: c.expire_date.to_string(), serial_number: c.serial_number.to_string(), subject_alt_name: c.subject_alt_name.clone(), diff --git a/packages/hurl/src/report/html/run.rs b/packages/hurl/src/report/html/run.rs index 92e28a8b65..6c63247f0a 100644 --- a/packages/hurl/src/report/html/run.rs +++ b/packages/hurl/src/report/html/run.rs @@ -131,7 +131,6 @@ fn get_call_html( // Certificate if let Some(certificate) = &call.response.certificate { - let start_date = certificate.start_date.to_string(); let end_date = certificate.expire_date.to_string(); let mut values = vec![]; @@ -141,7 +140,10 @@ fn get_call_html( if let Some(issuer) = certificate.issuer() { values.push(("Issuer", issuer.as_str())); } - values.push(("Start Date", start_date.as_str())); + let start_date = certificate.start_date.map(|d| d.to_string()); + if let Some(start_date) = start_date.as_ref() { + values.push(("Start Date", start_date.as_str())); + } values.push(("Expire Date", end_date.as_str())); values.push(("Serial Number", certificate.serial_number.as_str())); if let Some(subject_alt_name) = certificate.subject_alt_name.as_ref() { diff --git a/packages/hurl/src/runner/query.rs b/packages/hurl/src/runner/query.rs index b51fbc1c9f..fdaa0f9958 100644 --- a/packages/hurl/src/runner/query.rs +++ b/packages/hurl/src/runner/query.rs @@ -392,7 +392,10 @@ fn eval_query_certificate( Some(issuer) => Value::String(issuer.clone()), None => return Ok(None), }, - CertificateAttributeName::StartDate => Value::Date(certificate.start_date), + CertificateAttributeName::StartDate => match certificate.start_date.as_ref() { + Some(date) => Value::Date(*date), + None => return Ok(None), + }, CertificateAttributeName::ExpireDate => Value::Date(certificate.expire_date), CertificateAttributeName::SerialNumber => { Value::String(certificate.serial_number.clone())