@@ -70,29 +70,34 @@ pub(crate) trait NinaParam {
7070}
7171
7272// Used for single byte params
73+ #[ derive( PartialEq , Debug ) ]
7374pub ( crate ) struct NinaByteParam {
7475 length : u8 ,
7576 data : <NinaByteParam as NinaConcreteParam >:: DataBuffer ,
7677}
7778
7879// Used for 2-byte params
80+ #[ derive( PartialEq , Debug ) ]
7981pub ( crate ) struct NinaWordParam {
8082 length : u8 ,
8183 data : <NinaWordParam as NinaConcreteParam >:: DataBuffer ,
8284}
8385
8486// Used for params that are smaller than 255 bytes
87+ #[ derive( PartialEq , Debug ) ]
8588pub ( crate ) struct NinaSmallArrayParam {
8689 length : u8 ,
8790 data : <NinaSmallArrayParam as NinaConcreteParam >:: DataBuffer ,
8891}
8992
9093// Used for params that can be larger than 255 bytes up to MAX_NINA_PARAM_LENGTH
94+ #[ derive( PartialEq , Debug ) ]
9195pub ( crate ) struct NinaLargeArrayParam {
9296 length : u16 ,
9397 data : <NinaLargeArrayParam as NinaConcreteParam >:: DataBuffer ,
9498}
9599
100+ #[ derive( PartialEq , Debug ) ]
96101pub ( crate ) struct NinaAbstractParam {
97102 // Byte representation of length of data
98103 length_as_bytes : [ u8 ; 2 ] ,
@@ -443,3 +448,101 @@ impl Format for ProtocolError {
443448 }
444449 }
445450}
451+
452+ #[ cfg( test) ]
453+ mod protocol_tests {
454+ use super :: * ;
455+ use core:: str;
456+
457+ #[ test]
458+ fn nina_byte_param_new_returns_payload_too_large_error_when_given_too_many_bytes ( ) {
459+ let str_slice: & str = "too many bytes" ;
460+ let result = NinaByteParam :: new ( str_slice) ;
461+
462+ assert_eq ! (
463+ result. unwrap_err( ) ,
464+ Error :: Protocol ( ProtocolError :: PayloadTooLarge )
465+ )
466+ }
467+
468+ #[ test]
469+ fn nina_byte_param_from_bytes_returns_payload_too_large_error_when_given_too_many_bytes ( ) {
470+ let bytes: [ u8 ; 2 ] = [ 0 ; 2 ] ;
471+ let result = NinaByteParam :: from_bytes ( & bytes) ;
472+
473+ assert_eq ! (
474+ result. unwrap_err( ) ,
475+ Error :: Protocol ( ProtocolError :: PayloadTooLarge )
476+ )
477+ }
478+
479+ #[ test]
480+ fn nina_word_param_new_returns_payload_too_large_error_when_given_too_many_bytes ( ) {
481+ let str_slice: & str = "too many bytes" ;
482+ let result = NinaWordParam :: new ( str_slice) ;
483+
484+ assert_eq ! (
485+ result. unwrap_err( ) ,
486+ Error :: Protocol ( ProtocolError :: PayloadTooLarge )
487+ )
488+ }
489+
490+ #[ test]
491+ fn nina_word_param_from_bytes_returns_payload_too_large_error_when_given_too_many_bytes ( ) {
492+ let bytes: [ u8 ; 3 ] = [ 0 ; 3 ] ;
493+ let result = NinaWordParam :: from_bytes ( & bytes) ;
494+
495+ assert_eq ! (
496+ result. unwrap_err( ) ,
497+ Error :: Protocol ( ProtocolError :: PayloadTooLarge )
498+ )
499+ }
500+
501+ #[ test]
502+ fn nina_small_array_param_new_returns_payload_too_large_error_when_given_too_many_bytes ( ) {
503+ let bytes = [ 0xA ; 256 ] ;
504+ let str_slice: & str = str:: from_utf8 ( & bytes) . unwrap ( ) ;
505+ let result = NinaSmallArrayParam :: new ( str_slice) ;
506+
507+ assert_eq ! (
508+ result. unwrap_err( ) ,
509+ Error :: Protocol ( ProtocolError :: PayloadTooLarge )
510+ )
511+ }
512+
513+ #[ test]
514+ fn nina_small_array_param_from_bytes_returns_payload_too_large_error_when_given_too_many_bytes ( )
515+ {
516+ let bytes: [ u8 ; 256 ] = [ 0xA ; 256 ] ;
517+ let result = NinaSmallArrayParam :: from_bytes ( & bytes) ;
518+
519+ assert_eq ! (
520+ result. unwrap_err( ) ,
521+ Error :: Protocol ( ProtocolError :: PayloadTooLarge )
522+ )
523+ }
524+
525+ #[ test]
526+ fn nina_large_array_param_new_returns_payload_too_large_error_when_given_too_many_bytes ( ) {
527+ let bytes = [ 0xA ; 1025 ] ;
528+ let str_slice: & str = str:: from_utf8 ( & bytes) . unwrap ( ) ;
529+ let result = NinaLargeArrayParam :: new ( str_slice) ;
530+
531+ assert_eq ! (
532+ result. unwrap_err( ) ,
533+ Error :: Protocol ( ProtocolError :: PayloadTooLarge )
534+ )
535+ }
536+
537+ #[ test]
538+ fn nina_large_array_param_from_bytes_returns_payload_too_large_error_when_given_too_many_bytes ( )
539+ {
540+ let bytes: [ u8 ; 1025 ] = [ 0xA ; 1025 ] ;
541+ let result = NinaLargeArrayParam :: from_bytes ( & bytes) ;
542+
543+ assert_eq ! (
544+ result. unwrap_err( ) ,
545+ Error :: Protocol ( ProtocolError :: PayloadTooLarge )
546+ )
547+ }
548+ }
0 commit comments