@@ -1539,3 +1539,59 @@ fn test_contract_balance_invariant() {
15391539 assert ! ( token. balance( & contract_id) >= expected_contract_balance) ;
15401540 assert_eq ! ( expected_contract_balance, 0 ) ;
15411541}
1542+
1543+ #[ test]
1544+ fn test_upgrade_auth_failure ( ) {
1545+ let env = Env :: default ( ) ;
1546+ let admin = Address :: generate ( & env) ;
1547+ let non_admin = Address :: generate ( & env) ;
1548+ let collector = Address :: generate ( & env) ;
1549+
1550+ let contract_id = env. register_contract ( None , MarketXContract ) ;
1551+ let client = MarketXContractClient :: new ( & env, & contract_id) ;
1552+
1553+ client. mock_all_auths ( ) ;
1554+ client. initialize ( & admin, & collector, & 250 ) ;
1555+
1556+ let new_wasm_hash = soroban_sdk:: BytesN :: from_array ( & env, & [ 0 ; 32 ] ) ;
1557+ let result = client
1558+ . mock_auths ( & [ MockAuth {
1559+ address : & non_admin,
1560+ invoke : & MockAuthInvoke {
1561+ contract : & client. address ,
1562+ fn_name : "upgrade" ,
1563+ args : ( & new_wasm_hash, ) . into_val ( & env) ,
1564+ sub_invokes : & [ ] ,
1565+ } ,
1566+ } ] )
1567+ . try_upgrade ( & new_wasm_hash) ;
1568+
1569+ assert ! ( result. is_err( ) ) ;
1570+ }
1571+
1572+ #[ test]
1573+ fn test_upgrade_state_persistence ( ) {
1574+ let env = Env :: default ( ) ;
1575+ env. mock_all_auths ( ) ;
1576+
1577+ let admin = Address :: generate ( & env) ;
1578+ let buyer = Address :: generate ( & env) ;
1579+ let seller = Address :: generate ( & env) ;
1580+
1581+ let token_id = env. register_stellar_asset_contract_v2 ( admin. clone ( ) ) ;
1582+ let contract_id = env. register_contract ( None , MarketXContract ) ;
1583+ let client = MarketXContractClient :: new ( & env, & contract_id) ;
1584+
1585+ client. initialize ( & admin, & admin, & 500 ) ;
1586+
1587+ let escrow_id = client. create_escrow ( & buyer, & seller, & token_id. address ( ) , & 1000 , & None , & None , & None ) ;
1588+
1589+ let escrow = client. get_escrow ( & escrow_id) . unwrap ( ) ;
1590+ assert_eq ! ( escrow. amount, 1000 ) ;
1591+
1592+ let new_wasm_hash = soroban_sdk:: BytesN :: from_array ( & env, & [ 0 ; 32 ] ) ;
1593+ let _ = client. try_upgrade ( & new_wasm_hash) ;
1594+
1595+ let escrow_after = client. get_escrow ( & escrow_id) . unwrap ( ) ;
1596+ assert_eq ! ( escrow_after. amount, 1000 ) ;
1597+ }
0 commit comments