@@ -19,13 +19,9 @@ use fil_actors_runtime::test_utils::*;
1919#[ test]
2020fn construction ( ) {
2121 fn construct ( addr : Address , exit_code : ExitCode ) {
22- let mut rt = MockRuntime {
23- receiver : Address :: new_id ( 100 ) ,
24- caller : * SYSTEM_ACTOR_ADDR ,
25- caller_type : * SYSTEM_ACTOR_CODE_ID ,
26- ..Default :: default ( )
27- } ;
28- rt. expect_validate_caller_addr ( vec ! [ * SYSTEM_ACTOR_ADDR ] ) ;
22+ let mut rt = MockRuntime { receiver : Address :: new_id ( 100 ) , ..Default :: default ( ) } ;
23+ rt. set_caller ( * SYSTEM_ACTOR_CODE_ID , SYSTEM_ACTOR_ADDR ) ;
24+ rt. expect_validate_caller_addr ( vec ! [ SYSTEM_ACTOR_ADDR ] ) ;
2925
3026 if exit_code. is_success ( ) {
3127 rt. call :: < AccountActor > (
@@ -62,13 +58,9 @@ fn construction() {
6258
6359#[ test]
6460fn token_receiver ( ) {
65- let mut rt = MockRuntime {
66- receiver : Address :: new_id ( 100 ) ,
67- caller : * SYSTEM_ACTOR_ADDR ,
68- caller_type : * SYSTEM_ACTOR_CODE_ID ,
69- ..Default :: default ( )
70- } ;
71- rt. expect_validate_caller_addr ( vec ! [ * SYSTEM_ACTOR_ADDR ] ) ;
61+ let mut rt = MockRuntime { receiver : Address :: new_id ( 100 ) , ..Default :: default ( ) } ;
62+ rt. set_caller ( * SYSTEM_ACTOR_CODE_ID , SYSTEM_ACTOR_ADDR ) ;
63+ rt. expect_validate_caller_addr ( vec ! [ SYSTEM_ACTOR_ADDR ] ) ;
7264
7365 let param = Address :: new_secp256k1 ( & [ 2 ; fvm_shared:: address:: SECP_PUB_LEN ] ) . unwrap ( ) ;
7466 rt. call :: < AccountActor > (
@@ -77,6 +69,7 @@ fn token_receiver() {
7769 )
7870 . unwrap ( ) ;
7971
72+ rt. set_caller ( make_identity_cid ( b"1234" ) , Address :: new_id ( 1000 ) ) ;
8073 rt. expect_validate_caller_any ( ) ;
8174 let ret = rt. call :: < AccountActor > (
8275 Method :: FungibleTokenReceiverHook as MethodNum ,
@@ -86,86 +79,15 @@ fn token_receiver() {
8679 assert_eq ! ( RawBytes :: default ( ) , ret. unwrap( ) ) ;
8780}
8881
89- fn check_state ( rt : & MockRuntime ) {
90- let test_address = Address :: new_id ( 1000 ) ;
91- let ( _, acc) = check_state_invariants ( & rt. get_state ( ) , & test_address) ;
92- acc. assert_empty ( ) ;
93- }
94-
95- macro_rules! account_constructor_tests {
96- ( $( $name: ident: $value: expr, ) * ) => {
97- $(
98- #[ test]
99- fn $name( ) {
100- let ( addr, exit_code) = $value;
101-
102- let mut rt = MockRuntime {
103- receiver: fvm_shared:: address:: Address :: new_id( 100 ) ,
104- caller: SYSTEM_ACTOR_ADDR . clone( ) ,
105- caller_type: SYSTEM_ACTOR_CODE_ID . clone( ) ,
106- ..Default :: default ( )
107- } ;
108- rt. expect_validate_caller_addr( vec![ SYSTEM_ACTOR_ADDR ] ) ;
109-
110- if exit_code. is_success( ) {
111- rt. call:: <AccountActor >( 1 , & RawBytes :: serialize( addr) . unwrap( ) ) . unwrap( ) ;
112-
113- let state: State = rt. get_state( ) ;
114- assert_eq!( state. address, addr) ;
115- rt. expect_validate_caller_any( ) ;
116-
117- let pk: Address = rt
118- . call:: <AccountActor >( 2 , & RawBytes :: default ( ) )
119- . unwrap( )
120- . deserialize( )
121- . unwrap( ) ;
122- assert_eq!( pk, addr) ;
123-
124- check_state( & rt) ;
125- } else {
126- expect_abort(
127- exit_code,
128- rt. call:: <AccountActor >( 1 , & RawBytes :: serialize( addr) . unwrap( ) )
129- )
130- }
131- rt. verify( ) ;
132- }
133- ) *
134- }
135- }
136-
137- account_constructor_tests ! {
138- happy_construct_secp256k1_address: (
139- Address :: new_secp256k1( & [ 2 ; fvm_shared:: address:: SECP_PUB_LEN ] ) . unwrap( ) ,
140- ExitCode :: OK
141- ) ,
142- happy_construct_bls_address: (
143- Address :: new_bls( & [ 1 ; fvm_shared:: address:: BLS_PUB_LEN ] ) . unwrap( ) ,
144- ExitCode :: OK
145- ) ,
146- fail_construct_id_address: (
147- Address :: new_id( 1 ) ,
148- ExitCode :: USR_ILLEGAL_ARGUMENT
149- ) ,
150- fail_construct_actor_address: (
151- Address :: new_actor( & [ 1 , 2 , 3 ] ) ,
152- ExitCode :: USR_ILLEGAL_ARGUMENT
153- ) ,
154- }
155-
15682#[ test]
15783fn authenticate_message ( ) {
158- let mut rt = MockRuntime {
159- receiver : Address :: new_id ( 100 ) ,
160- caller : SYSTEM_ACTOR_ADDR ,
161- caller_type : * SYSTEM_ACTOR_CODE_ID ,
162- ..Default :: default ( )
163- } ;
84+ let mut rt = MockRuntime { receiver : Address :: new_id ( 100 ) , ..Default :: default ( ) } ;
85+ rt. set_caller ( * SYSTEM_ACTOR_CODE_ID , SYSTEM_ACTOR_ADDR ) ;
16486
16587 let addr = Address :: new_secp256k1 ( & [ 2 ; fvm_shared:: address:: SECP_PUB_LEN ] ) . unwrap ( ) ;
16688 rt. expect_validate_caller_addr ( vec ! [ SYSTEM_ACTOR_ADDR ] ) ;
167-
168- rt . call :: < AccountActor > ( 1 , & RawBytes :: serialize ( addr ) . unwrap ( ) ) . unwrap ( ) ;
89+ rt . call :: < AccountActor > ( Method :: Constructor as MethodNum , & RawBytes :: serialize ( addr ) . unwrap ( ) )
90+ . unwrap ( ) ;
16991
17092 let state: State = rt. get_state ( ) ;
17193 assert_eq ! ( state. address, addr) ;
@@ -174,26 +96,56 @@ fn authenticate_message() {
17496 RawBytes :: serialize ( AuthenticateMessageParams { signature : vec ! [ ] , message : vec ! [ ] } )
17597 . unwrap ( ) ;
17698
99+ // Valid signature
177100 rt. expect_validate_caller_any ( ) ;
178101 rt. expect_verify_signature ( ExpectedVerifySig {
179102 sig : Signature :: new_secp256k1 ( vec ! [ ] ) ,
180103 signer : addr,
181104 plaintext : vec ! [ ] ,
182105 result : Ok ( ( ) ) ,
183106 } ) ;
184- assert_eq ! ( RawBytes :: default ( ) , rt. call:: <AccountActor >( 3 , & params) . unwrap( ) ) ;
107+ assert_eq ! (
108+ RawBytes :: default ( ) ,
109+ rt. call:: <AccountActor >( Method :: AuthenticateMessage as MethodNum , & params) . unwrap( )
110+ ) ;
111+ rt. verify ( ) ;
185112
113+ // Invalid signature
186114 rt. expect_validate_caller_any ( ) ;
187115 rt. expect_verify_signature ( ExpectedVerifySig {
188116 sig : Signature :: new_secp256k1 ( vec ! [ ] ) ,
189117 signer : addr,
190118 plaintext : vec ! [ ] ,
191119 result : Err ( anyhow ! ( "bad signature" ) ) ,
192120 } ) ;
193- assert_eq ! (
121+ expect_abort_contains_message (
194122 ExitCode :: USR_ILLEGAL_ARGUMENT ,
195- rt. call:: <AccountActor >( 3 , & params) . unwrap_err( ) . exit_code( )
123+ "bad signature" ,
124+ rt. call :: < AccountActor > ( Method :: AuthenticateMessage as MethodNum , & params) ,
196125 ) ;
197-
198126 rt. verify ( ) ;
127+
128+ // Invalid caller of internal method number
129+ rt. set_caller ( make_identity_cid ( b"1234" ) , Address :: new_id ( 1000 ) ) ;
130+ expect_abort_contains_message (
131+ ExitCode :: USR_FORBIDDEN ,
132+ "must be built-in" ,
133+ rt. call :: < AccountActor > ( Method :: AuthenticateMessage as MethodNum , & params) ,
134+ ) ;
135+
136+ // Ok to call exported method number
137+ rt. expect_validate_caller_any ( ) ;
138+ rt. expect_verify_signature ( ExpectedVerifySig {
139+ sig : Signature :: new_secp256k1 ( vec ! [ ] ) ,
140+ signer : addr,
141+ plaintext : vec ! [ ] ,
142+ result : Ok ( ( ) ) ,
143+ } ) ;
144+ rt. call :: < AccountActor > ( Method :: AuthenticateMessageExported as MethodNum , & params) . unwrap ( ) ;
145+ }
146+
147+ fn check_state ( rt : & MockRuntime ) {
148+ let test_address = Address :: new_id ( 1000 ) ;
149+ let ( _, acc) = check_state_invariants ( & rt. get_state ( ) , & test_address) ;
150+ acc. assert_empty ( ) ;
199151}
0 commit comments