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
pub mod model;
pub mod parser;
pub mod writer;
pub mod builder;

#[cfg(test)]
mod tests {
    use bytes::BytesMut;
    use crate::enumerations::{PduType, RecordQueryREventType, RequiredReliabilityService, VariableRecordType};
    use crate::common::model::{EntityId, Pdu, PduHeader};
    use crate::common::parser::parse_pdu;
    use crate::common::model::DisTimeStamp;
    use crate::model::TimeStamp;
    use crate::record_query_r::model::{RecordQueryR, RecordQuerySpecification};

    #[test]
    fn record_query_r_internal_consistency() {
        let header = PduHeader::new_v6(1, PduType::RecordR);
        let body = RecordQueryR::builder()
            .with_origination_id(EntityId::new(10,10,10))
            .with_receiving_id(EntityId::new(20,20,20))
            .with_request_id(15)
            .with_required_reliability_service(RequiredReliabilityService::Unacknowledged)
            .with_event_type(RecordQueryREventType::InternalEntityStateData)
            .with_time(TimeStamp::new(123456))
            .with_record_query_specification(RecordQuerySpecification::default()
                .with_record_ids(vec![VariableRecordType::_7_62mmM62_quantity_24005, VariableRecordType::_7_62mmM80_quantity_24008]))
            .build()
            .into_pdu_body();
        let original_pdu = Pdu::finalize_from_parts(header, body, DisTimeStamp::new_absolute_from_secs(100));
        let pdu_length = original_pdu.header.pdu_length;

        let mut buf = BytesMut::with_capacity(pdu_length as usize);

        original_pdu.serialize(&mut buf).unwrap();

        let parsed = parse_pdu(&buf);
        match parsed {
            Ok(ref pdu) => {
                assert_eq!(&original_pdu, pdu);
            }
            Err(ref _err) => {
                println!("{_err}");
                assert!(false);
            }
        }
    }
}