@@ -19,13 +19,9 @@ use fil_actors_runtime::test_utils::*;
19
19
#[ test]
20
20
fn construction ( ) {
21
21
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 ] ) ;
29
25
30
26
if exit_code. is_success ( ) {
31
27
rt. call :: < AccountActor > (
@@ -62,13 +58,9 @@ fn construction() {
62
58
63
59
#[ test]
64
60
fn 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 ] ) ;
72
64
73
65
let param = Address :: new_secp256k1 ( & [ 2 ; fvm_shared:: address:: SECP_PUB_LEN ] ) . unwrap ( ) ;
74
66
rt. call :: < AccountActor > (
@@ -77,6 +69,7 @@ fn token_receiver() {
77
69
)
78
70
. unwrap ( ) ;
79
71
72
+ rt. set_caller ( make_identity_cid ( b"1234" ) , Address :: new_id ( 1000 ) ) ;
80
73
rt. expect_validate_caller_any ( ) ;
81
74
let ret = rt. call :: < AccountActor > (
82
75
Method :: FungibleTokenReceiverHook as MethodNum ,
@@ -86,86 +79,15 @@ fn token_receiver() {
86
79
assert_eq ! ( RawBytes :: default ( ) , ret. unwrap( ) ) ;
87
80
}
88
81
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
-
156
82
#[ test]
157
83
fn 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 ) ;
164
86
165
87
let addr = Address :: new_secp256k1 ( & [ 2 ; fvm_shared:: address:: SECP_PUB_LEN ] ) . unwrap ( ) ;
166
88
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 ( ) ;
169
91
170
92
let state: State = rt. get_state ( ) ;
171
93
assert_eq ! ( state. address, addr) ;
@@ -174,26 +96,56 @@ fn authenticate_message() {
174
96
RawBytes :: serialize ( AuthenticateMessageParams { signature : vec ! [ ] , message : vec ! [ ] } )
175
97
. unwrap ( ) ;
176
98
99
+ // Valid signature
177
100
rt. expect_validate_caller_any ( ) ;
178
101
rt. expect_verify_signature ( ExpectedVerifySig {
179
102
sig : Signature :: new_secp256k1 ( vec ! [ ] ) ,
180
103
signer : addr,
181
104
plaintext : vec ! [ ] ,
182
105
result : Ok ( ( ) ) ,
183
106
} ) ;
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 ( ) ;
185
112
113
+ // Invalid signature
186
114
rt. expect_validate_caller_any ( ) ;
187
115
rt. expect_verify_signature ( ExpectedVerifySig {
188
116
sig : Signature :: new_secp256k1 ( vec ! [ ] ) ,
189
117
signer : addr,
190
118
plaintext : vec ! [ ] ,
191
119
result : Err ( anyhow ! ( "bad signature" ) ) ,
192
120
} ) ;
193
- assert_eq ! (
121
+ expect_abort_contains_message (
194
122
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) ,
196
125
) ;
197
-
198
126
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 ( ) ;
199
151
}
0 commit comments