aboutsummaryrefslogtreecommitdiff
path: root/src/parser/deserializer.rs
blob: e2bd10833df5af8b05ec78ba68c0ee1af5e81ec9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
use std::io::Read;

use crate::data_structures;

fn deserialize_dmarc_report<R: Read>(
    reader: R,
) -> Result<data_structures::Feedback, serde_xml_rs::Error> {
    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);
            }
        }
    }
}