@@ -149,7 +149,7 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'a T>> for LseFilter {
149149 NlasIterator :: new ( payload)
150150 . map ( |nla| LseOptions :: parse ( & nla?) )
151151 . collect :: < Result < Vec < _ > , _ > > ( )
152- . map ( |opts| LseFilter :: try_from ( opts ) ) ?
152+ . map ( LseFilter :: try_from) ?
153153 }
154154}
155155
@@ -287,3 +287,148 @@ impl From<Vec<LseFilter>> for Options {
287287 Self :: Lses ( value)
288288 }
289289}
290+
291+ #[ cfg( test) ]
292+ mod tests {
293+ use super :: * ;
294+
295+ #[ test]
296+ fn parse_back_lse_options_depth_zero ( ) {
297+ let example = LseOptions :: Depth ( 0 ) ;
298+ let mut buffer = vec ! [ 0 ; example. buffer_len( ) ] ;
299+ example. emit ( & mut buffer) ;
300+ let parsed =
301+ LseOptions :: parse ( & NlaBuffer :: new_checked ( & buffer) . unwrap ( ) )
302+ . unwrap ( ) ;
303+ assert_eq ! ( example, parsed) ;
304+ }
305+
306+ #[ test]
307+ fn parse_back_lse_options_depth_example ( ) {
308+ let example = LseOptions :: Depth ( 0xab ) ;
309+ let mut buffer = vec ! [ 0 ; example. buffer_len( ) ] ;
310+ example. emit ( & mut buffer) ;
311+ let parsed =
312+ LseOptions :: parse ( & NlaBuffer :: new_checked ( & buffer) . unwrap ( ) )
313+ . unwrap ( ) ;
314+ assert_eq ! ( example, parsed) ;
315+ }
316+
317+ #[ test]
318+ fn parse_back_lse_options_label_zero ( ) {
319+ let example = LseOptions :: Label ( mpls:: Label :: new ( 0 ) . unwrap ( ) ) ;
320+ let mut buffer = vec ! [ 0 ; example. buffer_len( ) ] ;
321+ example. emit ( & mut buffer) ;
322+ let parsed =
323+ LseOptions :: parse ( & NlaBuffer :: new_checked ( & buffer) . unwrap ( ) )
324+ . unwrap ( ) ;
325+ assert_eq ! ( example, parsed) ;
326+ }
327+
328+ #[ test]
329+ fn parse_back_lse_options_label_example ( ) {
330+ let example = LseOptions :: Label ( mpls:: Label :: new ( 0x12345 ) . unwrap ( ) ) ;
331+ let mut buffer = vec ! [ 0 ; example. buffer_len( ) ] ;
332+ example. emit ( & mut buffer) ;
333+ let parsed =
334+ LseOptions :: parse ( & NlaBuffer :: new_checked ( & buffer) . unwrap ( ) )
335+ . unwrap ( ) ;
336+ assert_eq ! ( example, parsed) ;
337+ }
338+
339+ #[ test]
340+ fn parse_back_lse_options_tc_zero ( ) {
341+ let example =
342+ LseOptions :: TrafficClass ( mpls:: TrafficClass :: new ( 0 ) . unwrap ( ) ) ;
343+ let mut buffer = vec ! [ 0 ; example. buffer_len( ) ] ;
344+ example. emit ( & mut buffer) ;
345+ let parsed =
346+ LseOptions :: parse ( & NlaBuffer :: new_checked ( & buffer) . unwrap ( ) )
347+ . unwrap ( ) ;
348+ assert_eq ! ( example, parsed) ;
349+ }
350+
351+ #[ test]
352+ fn parse_back_lse_options_tc_example ( ) {
353+ let example =
354+ LseOptions :: TrafficClass ( mpls:: TrafficClass :: new ( 0x3 ) . unwrap ( ) ) ;
355+ let mut buffer = vec ! [ 0 ; example. buffer_len( ) ] ;
356+ example. emit ( & mut buffer) ;
357+ let parsed =
358+ LseOptions :: parse ( & NlaBuffer :: new_checked ( & buffer) . unwrap ( ) )
359+ . unwrap ( ) ;
360+ assert_eq ! ( example, parsed) ;
361+ }
362+
363+ #[ test]
364+ fn parse_back_lse_options_bos_unset ( ) {
365+ let example = LseOptions :: BottomOfStack ( mpls:: BottomOfStack :: Unset ) ;
366+ let mut buffer = vec ! [ 0 ; example. buffer_len( ) ] ;
367+ example. emit ( & mut buffer) ;
368+ let parsed =
369+ LseOptions :: parse ( & NlaBuffer :: new_checked ( & buffer) . unwrap ( ) )
370+ . unwrap ( ) ;
371+ assert_eq ! ( example, parsed) ;
372+ }
373+
374+ #[ test]
375+ fn parse_back_lse_options_bos_set ( ) {
376+ let example = LseOptions :: BottomOfStack ( mpls:: BottomOfStack :: Set ) ;
377+ let mut buffer = vec ! [ 0 ; example. buffer_len( ) ] ;
378+ example. emit ( & mut buffer) ;
379+ let parsed =
380+ LseOptions :: parse ( & NlaBuffer :: new_checked ( & buffer) . unwrap ( ) )
381+ . unwrap ( ) ;
382+ assert_eq ! ( example, parsed) ;
383+ }
384+
385+ #[ test]
386+ fn parse_back_lse_options_ttl_zero ( ) {
387+ let example = LseOptions :: Ttl ( 0 ) ;
388+ let mut buffer = vec ! [ 0 ; example. buffer_len( ) ] ;
389+ example. emit ( & mut buffer) ;
390+ let parsed =
391+ LseOptions :: parse ( & NlaBuffer :: new_checked ( & buffer) . unwrap ( ) )
392+ . unwrap ( ) ;
393+ assert_eq ! ( example, parsed) ;
394+ }
395+
396+ #[ test]
397+ fn parse_back_lse_options_ttl_example ( ) {
398+ let example = LseOptions :: Ttl ( 0x34 ) ;
399+ let mut buffer = vec ! [ 0 ; example. buffer_len( ) ] ;
400+ example. emit ( & mut buffer) ;
401+ let parsed =
402+ LseOptions :: parse ( & NlaBuffer :: new_checked ( & buffer) . unwrap ( ) )
403+ . unwrap ( ) ;
404+ assert_eq ! ( example, parsed) ;
405+ }
406+
407+ #[ test]
408+ fn parse_back_lse_filter_default ( ) {
409+ let example = LseFilter :: default ( ) ;
410+ let mut buffer = vec ! [ 0 ; example. buffer_len( ) ] ;
411+ example. emit ( & mut buffer) ;
412+ let parsed =
413+ LseFilter :: parse ( & NlaBuffer :: new_checked ( & buffer) . unwrap ( ) )
414+ . unwrap ( ) ;
415+ assert_eq ! ( example, parsed) ;
416+ }
417+
418+ #[ test]
419+ fn parse_back_lse_filter_example ( ) {
420+ let example = LseFilter {
421+ depth : 1 ,
422+ label : Some ( mpls:: Label :: new ( 0x12345 ) . unwrap ( ) ) ,
423+ traffic_class : Some ( mpls:: TrafficClass :: new ( 0x3 ) . unwrap ( ) ) ,
424+ bottom_of_stack : Some ( mpls:: BottomOfStack :: Set ) ,
425+ ttl : Some ( 0x34 ) ,
426+ } ;
427+ let mut buffer = vec ! [ 0 ; example. buffer_len( ) ] ;
428+ example. emit ( & mut buffer) ;
429+ let parsed =
430+ LseFilter :: parse ( & NlaBuffer :: new_checked ( & buffer) . unwrap ( ) )
431+ . unwrap ( ) ;
432+ assert_eq ! ( example, parsed) ;
433+ }
434+ }
0 commit comments