xref: /webrtc/dtls/src/alert/alert_test.rs (revision 5d8fe953)
1 use super::*;
2 use crate::error::Error;
3 
4 use std::io::{BufReader, BufWriter};
5 
6 #[test]
test_alert() -> Result<()>7 fn test_alert() -> Result<()> {
8     let tests = vec![
9         (
10             "Valid Alert",
11             vec![0x02, 0x0A],
12             Alert {
13                 alert_level: AlertLevel::Fatal,
14                 alert_description: AlertDescription::UnexpectedMessage,
15             },
16             None,
17         ),
18         (
19             "Invalid alert length",
20             vec![0x00],
21             Alert {
22                 alert_level: AlertLevel::Invalid,
23                 alert_description: AlertDescription::Invalid,
24             },
25             Some(Error::Other("io".to_owned())),
26         ),
27     ];
28 
29     for (name, data, wanted, unmarshal_error) in tests {
30         let mut reader = BufReader::new(data.as_slice());
31         let result = Alert::unmarshal(&mut reader);
32 
33         if let Some(err) = unmarshal_error {
34             assert!(result.is_err(), "{name} expected error: {err}");
35         } else if let Ok(alert) = result {
36             assert_eq!(wanted, alert, "{name} expected {wanted}, but got {alert}");
37 
38             let mut data2: Vec<u8> = vec![];
39             {
40                 let mut writer = BufWriter::<&mut Vec<u8>>::new(data2.as_mut());
41                 alert.marshal(&mut writer)?;
42             }
43             assert_eq!(data, data2, "{name} expected {data:?}, but got {data2:?}");
44         } else {
45             assert!(result.is_ok(), "{name} expected Ok, but has error");
46         }
47     }
48 
49     Ok(())
50 }
51