@@ -149,7 +149,7 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'a T>> for LseFilter {
149
149
NlasIterator :: new ( payload)
150
150
. map ( |nla| LseOptions :: parse ( & nla?) )
151
151
. collect :: < Result < Vec < _ > , _ > > ( )
152
- . map ( |opts| LseFilter :: try_from ( opts ) ) ?
152
+ . map ( LseFilter :: try_from) ?
153
153
}
154
154
}
155
155
@@ -287,3 +287,148 @@ impl From<Vec<LseFilter>> for Options {
287
287
Self :: Lses ( value)
288
288
}
289
289
}
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