Skip to content

Commit e237749

Browse files
committed
test(mask): added mask tests
Signed-off-by: Jad K. Haddad <jadkhaddad@gmail.com>
1 parent b530047 commit e237749

1 file changed

Lines changed: 47 additions & 0 deletions

File tree

src/mask.rs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// https://github.com/denoland/fastwebsockets/blob/d45101044613c47e7a44a14a59bde02285503c6d/src/mask.rs
2+
13
#[inline]
24
fn unmask_easy(payload: &mut [u8], mask: [u8; 4]) {
35
payload.iter_mut().enumerate().for_each(|(i, v)| {
@@ -36,3 +38,48 @@ fn unmask_fallback(buf: &mut [u8], mask: [u8; 4]) {
3638
pub fn unmask(payload: &mut [u8], mask: [u8; 4]) {
3739
unmask_fallback(payload, mask)
3840
}
41+
42+
#[cfg(test)]
43+
mod tests {
44+
use super::*;
45+
46+
#[test]
47+
fn test_unmask() {
48+
let mut payload = [0u8; 33];
49+
let mask = [1, 2, 3, 4];
50+
unmask(&mut payload, mask);
51+
assert_eq!(
52+
&payload,
53+
&[
54+
1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4,
55+
1, 2, 3, 4, 1
56+
]
57+
);
58+
}
59+
60+
#[test]
61+
fn length_variation_unmask() {
62+
for len in &[0, 2, 3, 8, 16, 18, 31, 32, 40] {
63+
let mut payload = std::vec![0u8; *len];
64+
let mask = [1, 2, 3, 4];
65+
unmask(&mut payload, mask);
66+
67+
let expected = (0..*len)
68+
.map(|i| (i & 3) as u8 + 1)
69+
.collect::<std::vec::Vec<_>>();
70+
assert_eq!(payload, expected);
71+
}
72+
}
73+
74+
#[test]
75+
fn length_variation_unmask_2() {
76+
for len in &[0, 2, 3, 8, 16, 18, 31, 32, 40] {
77+
let mut payload = std::vec![0u8; *len];
78+
let mask = rand::random::<[u8; 4]>();
79+
unmask(&mut payload, mask);
80+
81+
let expected = (0..*len).map(|i| mask[i & 3]).collect::<std::vec::Vec<_>>();
82+
assert_eq!(payload, expected);
83+
}
84+
}
85+
}

0 commit comments

Comments
 (0)