Skip to content

Commit 605264f

Browse files
committed
Tests and minor refactor
1 parent 6fefb30 commit 605264f

File tree

6 files changed

+518
-28
lines changed

6 files changed

+518
-28
lines changed

src/tc/filters/cls_flower.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -266,8 +266,8 @@ pub enum TcFilterFlowerOption {
266266
KeyEncIpTosMask(u8),
267267
KeyEncIpTtl(u8),
268268
KeyEncIpTtlMask(u8),
269-
KeyEncOpts(encap::Options),
270-
KeyEncOptsMask(encap::Options),
269+
KeyEncOpts(encap::OptionList),
270+
KeyEncOptsMask(encap::OptionList),
271271
KeyPortSrcMin(u16),
272272
KeyPortSrcMax(u16),
273273
KeyPortDstMin(u16),
@@ -1495,10 +1495,10 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'a T>>
14951495
Self::KeyEncIpTtlMask(payload[0])
14961496
}
14971497
TCA_FLOWER_KEY_ENC_OPTS => {
1498-
Self::KeyEncOpts(encap::Options::parse(buf)?)
1498+
Self::KeyEncOpts(encap::OptionList::parse(buf)?)
14991499
}
15001500
TCA_FLOWER_KEY_ENC_OPTS_MASK => {
1501-
Self::KeyEncOptsMask(encap::Options::parse(buf)?)
1501+
Self::KeyEncOptsMask(encap::OptionList::parse(buf)?)
15021502
}
15031503
TCA_FLOWER_IN_HW_COUNT => Self::InHwCount(
15041504
parse_u32(payload)

src/tc/filters/flower/encap/erspan.rs

Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,3 +278,174 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'a T>> for Options {
278278
})
279279
}
280280
}
281+
282+
#[cfg(test)]
283+
mod test {
284+
use super::*;
285+
use netlink_packet_utils::Emitable;
286+
287+
#[test]
288+
fn parse_back_version_zero() {
289+
let example = Version::new(0);
290+
let mut buffer = vec![0; example.buffer_len()];
291+
example.emit(&mut buffer);
292+
let parsed =
293+
Version::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
294+
assert_eq!(example, parsed);
295+
}
296+
297+
#[test]
298+
fn parse_back_version_example() {
299+
let example = Version::new(0x12);
300+
let mut buffer = vec![0; example.buffer_len()];
301+
example.emit(&mut buffer);
302+
let parsed =
303+
Version::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
304+
assert_eq!(example, parsed);
305+
}
306+
307+
#[test]
308+
fn parse_back_index_zero() {
309+
let example = Index::new(0);
310+
let mut buffer = vec![0; example.buffer_len()];
311+
example.emit(&mut buffer);
312+
let parsed =
313+
Index::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
314+
assert_eq!(example, parsed);
315+
}
316+
317+
#[test]
318+
fn parse_back_index_example() {
319+
let example = Index::new(0x12345678);
320+
let mut buffer = vec![0; example.buffer_len()];
321+
example.emit(&mut buffer);
322+
let parsed =
323+
Index::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
324+
assert_eq!(example, parsed);
325+
}
326+
327+
#[test]
328+
fn parse_back_direction_ingress() {
329+
let example = Direction::Ingress;
330+
let mut buffer = vec![0; example.buffer_len()];
331+
example.emit(&mut buffer);
332+
let parsed =
333+
Direction::parse(&NlaBuffer::new_checked(&buffer).unwrap())
334+
.unwrap();
335+
assert_eq!(example, parsed);
336+
}
337+
338+
#[test]
339+
fn parse_back_direction_egress() {
340+
let example = Direction::Egress;
341+
let mut buffer = vec![0; example.buffer_len()];
342+
example.emit(&mut buffer);
343+
let parsed =
344+
Direction::parse(&NlaBuffer::new_checked(&buffer).unwrap())
345+
.unwrap();
346+
assert_eq!(example, parsed);
347+
}
348+
349+
#[test]
350+
fn parse_back_hwid_zero() {
351+
let example = ErspanHwid::new(0);
352+
let mut buffer = vec![0; example.buffer_len()];
353+
example.emit(&mut buffer);
354+
let parsed =
355+
ErspanHwid::parse(&NlaBuffer::new_checked(&buffer).unwrap())
356+
.unwrap();
357+
assert_eq!(example, parsed);
358+
}
359+
360+
#[test]
361+
fn parse_back_hwid_example() {
362+
let example = ErspanHwid::new(0x12);
363+
let mut buffer = vec![0; example.buffer_len()];
364+
example.emit(&mut buffer);
365+
let parsed =
366+
ErspanHwid::parse(&NlaBuffer::new_checked(&buffer).unwrap())
367+
.unwrap();
368+
assert_eq!(example, parsed);
369+
}
370+
371+
#[test]
372+
fn parse_back_options_version_zero() {
373+
let example = Options::Version(Version::new(0));
374+
let mut buffer = vec![0; example.buffer_len()];
375+
example.emit(&mut buffer);
376+
let parsed =
377+
Options::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
378+
assert_eq!(example, parsed);
379+
}
380+
381+
#[test]
382+
fn parse_back_options_version_example() {
383+
let example = Options::Version(Version::new(0x12));
384+
let mut buffer = vec![0; example.buffer_len()];
385+
example.emit(&mut buffer);
386+
let parsed =
387+
Options::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
388+
assert_eq!(example, parsed);
389+
}
390+
391+
#[test]
392+
fn parse_back_options_index_zero() {
393+
let example = Options::Index(Index::new(0));
394+
let mut buffer = vec![0; example.buffer_len()];
395+
example.emit(&mut buffer);
396+
let parsed =
397+
Options::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
398+
assert_eq!(example, parsed);
399+
}
400+
401+
#[test]
402+
fn parse_back_options_index_example() {
403+
let example = Options::Index(Index::new(0x12345678));
404+
let mut buffer = vec![0; example.buffer_len()];
405+
example.emit(&mut buffer);
406+
let parsed =
407+
Options::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
408+
assert_eq!(example, parsed);
409+
}
410+
411+
#[test]
412+
fn parse_back_options_direction_ingress() {
413+
let example = Options::Direction(Direction::Ingress);
414+
let mut buffer = vec![0; example.buffer_len()];
415+
example.emit(&mut buffer);
416+
let parsed =
417+
Options::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
418+
assert_eq!(example, parsed);
419+
}
420+
421+
#[test]
422+
fn parse_back_options_direction_egress() {
423+
let example = Options::Direction(Direction::Egress);
424+
let mut buffer = vec![0; example.buffer_len()];
425+
example.emit(&mut buffer);
426+
let parsed =
427+
Options::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
428+
assert_eq!(example, parsed);
429+
}
430+
431+
#[test]
432+
fn parse_back_options_hwid_zero() {
433+
let example = Options::Hwid(ErspanHwid::new(0));
434+
let mut buffer = vec![0; example.buffer_len()];
435+
example.emit(&mut buffer);
436+
let parsed =
437+
Options::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
438+
assert_eq!(example, parsed);
439+
}
440+
441+
#[test]
442+
fn parse_back_options_hwid_example() {
443+
let example = Options::Hwid(ErspanHwid::new(0x12));
444+
let mut buffer = vec![0; example.buffer_len()];
445+
example.emit(&mut buffer);
446+
let parsed =
447+
Options::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
448+
assert_eq!(example, parsed);
449+
}
450+
451+
}

src/tc/filters/flower/encap/geneve.rs

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,3 +208,100 @@ impl Nla for Options {
208208
}
209209
}
210210
}
211+
212+
#[cfg(test)]
213+
mod tests {
214+
use super::*;
215+
use netlink_packet_utils::Emitable;
216+
217+
#[test]
218+
fn class_parse_back_zero() {
219+
let example = Class::new(0);
220+
let mut buffer = vec![0; example.buffer_len()];
221+
example.emit(&mut buffer);
222+
let parsed =
223+
Class::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
224+
assert_eq!(example, parsed);
225+
}
226+
227+
#[test]
228+
fn class_parse_back_example() {
229+
let example = Class::new(0x1234);
230+
let mut buffer = vec![0; example.buffer_len()];
231+
example.emit(&mut buffer);
232+
let parsed =
233+
Class::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
234+
assert_eq!(example, parsed);
235+
}
236+
237+
#[test]
238+
fn type_parse_back_zero() {
239+
let example = Type::new(0);
240+
let mut buffer = vec![0; example.buffer_len()];
241+
example.emit(&mut buffer);
242+
let parsed =
243+
Type::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
244+
assert_eq!(example, parsed);
245+
}
246+
247+
#[test]
248+
fn type_parse_back_example() {
249+
let example = Type::new(0x12);
250+
let mut buffer = vec![0; example.buffer_len()];
251+
example.emit(&mut buffer);
252+
let parsed =
253+
Type::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
254+
assert_eq!(example, parsed);
255+
}
256+
257+
#[test]
258+
fn data_parse_back_zero() {
259+
let example = Data::new(vec![0]);
260+
let mut buffer = vec![0; example.buffer_len()];
261+
example.emit(&mut buffer);
262+
let parsed =
263+
Data::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
264+
assert_eq!(example, parsed);
265+
}
266+
267+
#[test]
268+
fn data_parse_back_example() {
269+
let example = Data::new(vec![0x12345678, 0x9abcdef0]);
270+
let mut buffer = vec![0; example.buffer_len()];
271+
example.emit(buffer.as_mut_slice());
272+
let parsed =
273+
Data::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
274+
assert_eq!(example, parsed);
275+
}
276+
277+
#[test]
278+
fn options_parse_back_class() {
279+
let example = Options::Class(Class::new(0x1234));
280+
let mut buffer = vec![0; example.buffer_len()];
281+
example.emit(&mut buffer);
282+
let parsed =
283+
Options::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
284+
assert_eq!(example, parsed);
285+
}
286+
287+
#[test]
288+
fn options_parse_back_type() {
289+
let example = Options::Type(Type::new(0x12));
290+
let mut buffer = vec![0; example.buffer_len()];
291+
example.emit(buffer.as_mut_slice());
292+
let parsed =
293+
Options::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
294+
assert_eq!(example, parsed);
295+
}
296+
297+
#[test]
298+
fn options_parse_back_data() {
299+
let example = Options::Data(Data::new(vec![0x12345678, 0x9abcdef0]));
300+
let mut buffer = vec![0; example.buffer_len()];
301+
example.emit(&mut buffer);
302+
let parsed =
303+
Options::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
304+
assert_eq!(example, parsed);
305+
}
306+
307+
}

src/tc/filters/flower/encap/gtp.rs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,49 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'a T>> for Options {
6262
})
6363
}
6464
}
65+
66+
#[cfg(test)]
67+
mod tests {
68+
use super::*;
69+
use netlink_packet_utils::Emitable;
70+
71+
#[test]
72+
fn parse_back_options_pdu_type_zero() {
73+
let example = Options::PduType(0);
74+
let mut buffer = vec![0; example.buffer_len()];
75+
example.emit(&mut buffer);
76+
let parsed =
77+
Options::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
78+
assert_eq!(example, parsed);
79+
}
80+
81+
#[test]
82+
fn parse_back_options_pdu_type_example() {
83+
let example = Options::PduType(0xab);
84+
let mut buffer = vec![0; example.buffer_len()];
85+
example.emit(&mut buffer);
86+
let parsed =
87+
Options::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
88+
assert_eq!(example, parsed);
89+
}
90+
91+
#[test]
92+
fn parse_back_options_qfi_zero() {
93+
let example = Options::Qfi(0);
94+
let mut buffer = vec![0; example.buffer_len()];
95+
example.emit(&mut buffer);
96+
let parsed =
97+
Options::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
98+
assert_eq!(example, parsed);
99+
}
100+
101+
#[test]
102+
fn parse_back_options_qfi_example() {
103+
let example = Options::Qfi(0xab);
104+
let mut buffer = vec![0; example.buffer_len()];
105+
example.emit(&mut buffer);
106+
let parsed =
107+
Options::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
108+
assert_eq!(example, parsed);
109+
}
110+
}

0 commit comments

Comments
 (0)