@@ -4,6 +4,7 @@ use fvm_ipld_encoding::ipld_block::IpldBlock;
44use fvm_ipld_encoding:: { to_vec, CBOR } ;
55use fvm_sdk as sdk;
66use fvm_shared:: address:: Address ;
7+ use fvm_shared:: error:: ErrorNumber ;
78use fvm_shared:: upgrade:: UpgradeInfo ;
89use serde_tuple:: * ;
910#[ derive( Serialize_tuple , Deserialize_tuple , PartialEq , Eq , Clone , Debug ) ]
@@ -48,8 +49,9 @@ pub fn upgrade(params_id: u32, upgrade_info_id: u32) -> u32 {
4849 sdk:: debug:: log ( "[upgrade] params:3, calling upgrade within an upgrade" . to_string ( ) ) ;
4950 let new_code_cid = sdk:: actor:: get_actor_code_cid ( & Address :: new_id ( 10000 ) ) . unwrap ( ) ;
5051 let params = IpldBlock :: serialize_cbor ( & SomeStruct { value : 4 } ) . unwrap ( ) ;
51- let _ = sdk:: actor:: upgrade_actor ( new_code_cid, params) ;
52- unreachable ! ( "we should never return from a successful upgrade" ) ;
52+ let res = sdk:: actor:: upgrade_actor ( new_code_cid, params) ;
53+ assert_eq ! ( res, Err ( ErrorNumber :: Forbidden ) ) ;
54+ 0
5355 }
5456 4 => {
5557 let block_id = sdk:: ipld:: put_block ( CBOR , & to_vec ( & 444 ) . unwrap ( ) ) . unwrap ( ) ;
@@ -88,7 +90,7 @@ pub fn invoke(_: u32) -> u32 {
8890 "invalid exit code returned from upgrade_actor"
8991 ) ;
9092 }
91- // test recursive update
93+ // test that calling recursive update on the same actor fails
9294 3 => {
9395 let new_code_cid = sdk:: actor:: get_actor_code_cid ( & Address :: new_id ( 10000 ) ) . unwrap ( ) ;
9496 let params = IpldBlock :: serialize_cbor ( & SomeStruct { value : 3 } ) . unwrap ( ) ;
0 commit comments