File tree Expand file tree Collapse file tree 3 files changed +60
-1
lines changed Expand file tree Collapse file tree 3 files changed +60
-1
lines changed Original file line number Diff line number Diff line change 11// user auth v1
22
3+ #[ cfg( test) ]
4+ use proptest_derive:: Arbitrary ;
35use serde:: { Deserialize , Serialize } ;
46use thiserror:: Error ;
57
@@ -14,7 +16,8 @@ pub enum Error {
1416
1517// TODO(phlip9): do we even need any signup fields?
1618/// Sign up
17- #[ derive( Deserialize , Serialize ) ]
19+ #[ derive( Debug , PartialEq , Deserialize , Serialize ) ]
20+ #[ cfg_attr( test, derive( Arbitrary ) ) ]
1821pub struct UserSignupRequest {
1922 pub display_name : Option < String > ,
2023 pub email : Option < String > ,
@@ -62,3 +65,19 @@ impl ed25519::Signable for UserSignupRequest {
6265 const DOMAIN_SEPARATOR_STR : & ' static [ u8 ] =
6366 b"LEXE-REALM::UserSignupRequest" ;
6467}
68+
69+ #[ cfg( test) ]
70+ mod test {
71+ use super :: * ;
72+ use crate :: test_utils:: { assert_bcs_roundtrip, assert_signed_roundtrip} ;
73+
74+ #[ test]
75+ fn test_user_signup_request_canonical ( ) {
76+ assert_bcs_roundtrip :: < UserSignupRequest > ( ) ;
77+ }
78+
79+ #[ test]
80+ fn test_user_signed_request_sign_verify ( ) {
81+ assert_signed_roundtrip :: < UserSignupRequest > ( ) ;
82+ }
83+ }
Original file line number Diff line number Diff line change @@ -32,6 +32,9 @@ pub mod sha256;
3232pub mod shutdown;
3333pub mod task;
3434
35+ #[ cfg( test) ]
36+ pub mod test_utils;
37+
3538/// Assert at compile time that two `usize` values are equal. This assert has a
3639/// nice benefit where there compiler error will actually _print out_ the
3740/// two values.
Original file line number Diff line number Diff line change 1+ use proptest:: arbitrary:: Arbitrary ;
2+ use proptest:: proptest;
3+ use serde:: de:: DeserializeOwned ;
4+ use serde:: Serialize ;
5+
6+ use crate :: ed25519;
7+
8+ pub fn assert_bcs_roundtrip < T > ( )
9+ where
10+ T : Arbitrary + PartialEq + Serialize + DeserializeOwned ,
11+ {
12+ proptest ! ( |( value: T ) | {
13+ let ser_value = bcs:: to_bytes( & value) . unwrap( ) ;
14+ let value2 = bcs:: from_bytes:: <T >( & ser_value) . unwrap( ) ;
15+ let ser_value2 = bcs:: to_bytes( & value2) . unwrap( ) ;
16+
17+ assert_eq!( & value, & value2) ;
18+ assert_eq!( & ser_value, & ser_value2) ;
19+ } ) ;
20+ }
21+
22+ pub fn assert_signed_roundtrip < T > ( )
23+ where
24+ T : Arbitrary + PartialEq + Serialize + DeserializeOwned + ed25519:: Signable ,
25+ {
26+ proptest ! ( |( seed: [ u8 ; 32 ] , value: T ) | {
27+ let key_pair = ed25519:: KeyPair :: from_seed( & seed) ;
28+ let pubkey = key_pair. public_key( ) ;
29+
30+ let ( ser_value, signed_value) = key_pair. sign_struct( & value) . unwrap( ) ;
31+ let signed_value2 = pubkey. verify_signed_struct( & ser_value) . unwrap( ) ;
32+ let ( ser_value2, _) = key_pair. sign_struct( signed_value2. inner( ) ) . unwrap( ) ;
33+
34+ assert_eq!( signed_value, signed_value2. as_ref( ) ) ;
35+ assert_eq!( & ser_value, & ser_value2) ;
36+ } ) ;
37+ }
You can’t perform that action at this time.
0 commit comments