1ffe74184SMartin Algesten use crate::error::Result;
2ffe74184SMartin Algesten
3ffe74184SMartin Algesten use super::*;
4ffe74184SMartin Algesten
5ffe74184SMartin Algesten use bytes::{Bytes, BytesMut};
6ffe74184SMartin Algesten
7ffe74184SMartin Algesten #[test]
test_message_unmarshal_open_success()8ffe74184SMartin Algesten fn test_message_unmarshal_open_success() {
9ffe74184SMartin Algesten let mut bytes = Bytes::from_static(&[
10ffe74184SMartin Algesten 0x03, // message type
11ffe74184SMartin Algesten 0x00, // channel type
12ffe74184SMartin Algesten 0x0f, 0x35, // priority
13ffe74184SMartin Algesten 0x00, 0xff, 0x0f, 0x35, // reliability parameter
14ffe74184SMartin Algesten 0x00, 0x05, // label length
15ffe74184SMartin Algesten 0x00, 0x08, // protocol length
16ffe74184SMartin Algesten 0x6c, 0x61, 0x62, 0x65, 0x6c, // label
17ffe74184SMartin Algesten 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, // protocol
18ffe74184SMartin Algesten ]);
19ffe74184SMartin Algesten
20ffe74184SMartin Algesten let actual = Message::unmarshal(&mut bytes).unwrap();
21ffe74184SMartin Algesten
22ffe74184SMartin Algesten let expected = Message::DataChannelOpen(DataChannelOpen {
23ffe74184SMartin Algesten channel_type: ChannelType::Reliable,
24ffe74184SMartin Algesten priority: 3893,
25ffe74184SMartin Algesten reliability_parameter: 16715573,
26ffe74184SMartin Algesten label: b"label".to_vec(),
27ffe74184SMartin Algesten protocol: b"protocol".to_vec(),
28ffe74184SMartin Algesten });
29ffe74184SMartin Algesten
30ffe74184SMartin Algesten assert_eq!(actual, expected);
31ffe74184SMartin Algesten }
32ffe74184SMartin Algesten
33ffe74184SMartin Algesten #[test]
test_message_unmarshal_ack_success() -> Result<()>34ffe74184SMartin Algesten fn test_message_unmarshal_ack_success() -> Result<()> {
35ffe74184SMartin Algesten let mut bytes = Bytes::from_static(&[0x02]);
36ffe74184SMartin Algesten
37ffe74184SMartin Algesten let actual = Message::unmarshal(&mut bytes)?;
38ffe74184SMartin Algesten let expected = Message::DataChannelAck(DataChannelAck {});
39ffe74184SMartin Algesten
40ffe74184SMartin Algesten assert_eq!(actual, expected);
41ffe74184SMartin Algesten
42ffe74184SMartin Algesten Ok(())
43ffe74184SMartin Algesten }
44ffe74184SMartin Algesten
45ffe74184SMartin Algesten #[test]
test_message_unmarshal_invalid_message_type()46ffe74184SMartin Algesten fn test_message_unmarshal_invalid_message_type() {
47ffe74184SMartin Algesten let mut bytes = Bytes::from_static(&[0x01]);
48ffe74184SMartin Algesten let expected = Error::InvalidMessageType(0x01);
49*83f2d1bbSVincent Esche let result = Message::unmarshal(&mut bytes);
50*83f2d1bbSVincent Esche let actual = result.expect_err("expected err, but got ok");
51*83f2d1bbSVincent Esche assert_eq!(actual, expected);
52ffe74184SMartin Algesten }
53ffe74184SMartin Algesten
54ffe74184SMartin Algesten #[test]
test_message_marshal_size()55ffe74184SMartin Algesten fn test_message_marshal_size() {
56ffe74184SMartin Algesten let msg = Message::DataChannelAck(DataChannelAck {});
57ffe74184SMartin Algesten
58ffe74184SMartin Algesten let actual = msg.marshal_size();
59ffe74184SMartin Algesten let expected = 1;
60ffe74184SMartin Algesten
61ffe74184SMartin Algesten assert_eq!(actual, expected);
62ffe74184SMartin Algesten }
63ffe74184SMartin Algesten
64ffe74184SMartin Algesten #[test]
test_message_marshal()65ffe74184SMartin Algesten fn test_message_marshal() {
66ffe74184SMartin Algesten let marshal_size = 12 + 5 + 8;
67ffe74184SMartin Algesten let mut buf = BytesMut::with_capacity(marshal_size);
68ffe74184SMartin Algesten buf.resize(marshal_size, 0u8);
69ffe74184SMartin Algesten
70ffe74184SMartin Algesten let msg = Message::DataChannelOpen(DataChannelOpen {
71ffe74184SMartin Algesten channel_type: ChannelType::Reliable,
72ffe74184SMartin Algesten priority: 3893,
73ffe74184SMartin Algesten reliability_parameter: 16715573,
74ffe74184SMartin Algesten label: b"label".to_vec(),
75ffe74184SMartin Algesten protocol: b"protocol".to_vec(),
76ffe74184SMartin Algesten });
77ffe74184SMartin Algesten
78ffe74184SMartin Algesten let actual = msg.marshal_to(&mut buf).unwrap();
79ffe74184SMartin Algesten let expected = marshal_size;
80ffe74184SMartin Algesten assert_eq!(actual, expected);
81ffe74184SMartin Algesten
82ffe74184SMartin Algesten let bytes = buf.freeze();
83ffe74184SMartin Algesten
84ffe74184SMartin Algesten let actual = &bytes[..];
85ffe74184SMartin Algesten let expected = &[
86ffe74184SMartin Algesten 0x03, // message type
87ffe74184SMartin Algesten 0x00, // channel type
88ffe74184SMartin Algesten 0x0f, 0x35, // priority
89ffe74184SMartin Algesten 0x00, 0xff, 0x0f, 0x35, // reliability parameter
90ffe74184SMartin Algesten 0x00, 0x05, // label length
91ffe74184SMartin Algesten 0x00, 0x08, // protocol length
92ffe74184SMartin Algesten 0x6c, 0x61, 0x62, 0x65, 0x6c, // label
93ffe74184SMartin Algesten 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, // protocol
94ffe74184SMartin Algesten ];
95ffe74184SMartin Algesten
96ffe74184SMartin Algesten assert_eq!(actual, expected);
97ffe74184SMartin Algesten }
98