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