use std::io::Read; use crate::data_structures; fn deserialize_dmarc_report( reader: R, ) -> Result { serde_xml_rs::from_reader(reader) } #[cfg(test)] mod test { use super::*; use std::fs::File; use std::io::BufReader; #[test] fn test_deserialize_dmarc_report() { let dmarc_report_file = File::open("fixtures/dmarc_report_fixture.xml").unwrap(); let reader = BufReader::new(dmarc_report_file); let expected_version = "1.0".to_string(); let expected_report_id = "3374fb5148ba40c1a5cf8e3d36f34a34".to_string(); let expected_begin_date = "1707436800".to_string(); let expected_policy_published_domain = "boitalett.re".to_string(); let expected_record_row_source_ip = "195.154.102.43".to_string(); let expected_record_row_policy_evaluated_dkim = "pass".to_string(); let expected_identifiers_envelope_to = "babilou.com".to_string(); let expected_auth_results_dkim_selector = "2023101501".to_string(); let expected_auth_results_spf_scope = "mfrom".to_string(); match deserialize_dmarc_report(reader) { Ok(report) => { assert_eq!(report.version, expected_version); assert_eq!(report.report_metadata.report_id, expected_report_id); assert_eq!(report.report_metadata.date_range.begin, expected_begin_date); assert_eq!( report.policy_published.domain, expected_policy_published_domain ); assert_eq!(report.record.row.source_ip, expected_record_row_source_ip); assert_eq!( report.record.row.policy_evaluated.dkim, expected_record_row_policy_evaluated_dkim ); assert_eq!( report.record.identifiers.envelope_to, expected_identifiers_envelope_to ); assert_eq!( report.record.auth_results.dkim.selector, expected_auth_results_dkim_selector ); assert_eq!( report.record.auth_results.spf.scope, expected_auth_results_spf_scope ); } Err(err) => { panic!("{:?}", err); } } } }