@@ -211,10 +211,24 @@ impl Nla for Options {
211211
212212#[ cfg( test) ]
213213mod tests {
214- use super :: * ;
215- use crate :: tc:: { TcMessage , TcMessageBuffer } ;
216214 use netlink_packet_utils:: Emitable ;
217215
216+ use crate :: net:: ethernet:: Ethertype ;
217+ use crate :: tc:: flower:: encap:: Options :: Geneve ;
218+ use crate :: tc:: flower:: encap:: OptionsList ;
219+ use crate :: tc:: TcAttribute ;
220+ use crate :: tc:: TcFilterFlowerOption :: {
221+ KeyEncOpts , KeyEncOptsMask , KeyEthType ,
222+ } ;
223+ use crate :: tc:: TcOption :: Flower ;
224+ use crate :: tc:: {
225+ TcFilterFlowerOption , TcFlowerOptionFlags , TcHandle , TcHeader ,
226+ TcMessage , TcMessageBuffer ,
227+ } ;
228+ use crate :: AddressFamily ;
229+
230+ use super :: * ;
231+
218232 #[ test]
219233 fn class_parse_back_zero ( ) {
220234 let example = Class :: new ( 0 ) ;
@@ -305,13 +319,58 @@ mod tests {
305319 assert_eq ! ( example, parsed) ;
306320 }
307321
322+ const RAW_CAP : & str = "000000003900000000000000f2ffffff080000000b000100666c6f776572000054000200200054001c0001000600010000010000050002000100000008000300abcdef01200055001c00010006000100ffff000005000200ff00000008000300ffffffff08001600000000000600080008000000" ;
323+
324+ fn expected_message ( ) -> TcMessage {
325+ TcMessage {
326+ header : TcHeader {
327+ family : AddressFamily :: Unspec ,
328+ index : 57 ,
329+ handle : TcHandle { major : 0 , minor : 0 } ,
330+ parent : TcHandle {
331+ major : 65535 ,
332+ minor : 65522 ,
333+ } ,
334+ info : 8 ,
335+ } ,
336+ attributes : vec ! [
337+ TcAttribute :: Kind ( "flower" . to_string( ) ) ,
338+ TcAttribute :: Options ( vec![
339+ Flower ( KeyEncOpts ( OptionsList ( Geneve ( vec![
340+ Options :: Class ( Class :: new( 1 ) ) ,
341+ Options :: Type ( Type :: new( 1 ) ) ,
342+ Options :: Data ( Data :: new( vec![ 0xabcdef01 ] ) ) ,
343+ ] ) ) ) ) ,
344+ Flower ( KeyEncOptsMask ( OptionsList ( Geneve ( vec![
345+ Options :: Class ( Class :: new( 65535 ) ) ,
346+ Options :: Type ( Type :: new( 255 ) ) ,
347+ Options :: Data ( Data :: new( vec![ 4294967295 ] ) ) ,
348+ ] ) ) ) ) ,
349+ Flower ( TcFilterFlowerOption :: Flags (
350+ TcFlowerOptionFlags :: empty( ) ,
351+ ) ) ,
352+ Flower ( KeyEthType ( Ethertype :: IPv4 ) ) ,
353+ ] ) ,
354+ ] ,
355+ }
356+ }
357+
308358 #[ test]
309- fn parse_captured ( ) {
310- let raw_cap = "000000003900000000000000f2ffffff080000000b000100666c6f776572000054000200200054001c0001000600010000010000050002000100000008000300abcdef01200055001c00010006000100ffff000005000200ff00000008000300ffffffff08001600000000000600080008000000" ;
311- let raw_cap = hex :: decode ( raw_cap ) . unwrap ( ) ;
359+ fn captured_parses_as_expected ( ) {
360+ let raw_cap = hex :: decode ( RAW_CAP ) . unwrap ( ) ;
361+ let expected = expected_message ( ) ;
312362 let parsed =
313363 TcMessage :: parse ( & TcMessageBuffer :: new_checked ( & raw_cap) . unwrap ( ) )
314364 . unwrap ( ) ;
315- println ! ( "{:?}" , parsed) ;
365+ assert_eq ! ( expected, parsed) ;
366+ }
367+
368+ #[ test]
369+ fn expected_emits_as_captured ( ) {
370+ let raw_cap = hex:: decode ( RAW_CAP ) . unwrap ( ) ;
371+ let expected = expected_message ( ) ;
372+ let mut buffer = vec ! [ 0 ; expected. buffer_len( ) ] ;
373+ expected. emit ( & mut buffer) ;
374+ assert_eq ! ( raw_cap, buffer) ;
316375 }
317376}
0 commit comments