Skip to content

Commit 2ad1a07

Browse files
committed
test: contract upgrade via update_current_contract_wasm (Closes #177)
1 parent b21f6bc commit 2ad1a07

3 files changed

Lines changed: 63 additions & 0 deletions

File tree

test_fixtures/mock_v2/Cargo.toml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[package]
2+
name = "mock-v2"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
[lib]
7+
crate-type = ["cdylib"]
8+
9+
[dependencies]
10+
soroban-sdk = "27.0.0"

test_fixtures/mock_v2/src/lib.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#![no_std]
2+
use soroban_sdk::{contract, contractimpl, Env, symbol_short};
3+
4+
#[contract]
5+
pub struct BridgeletCoreV2;
6+
7+
#[contractimpl]
8+
impl BridgeletCoreV2 {
9+
pub fn v2_exclusive_feature(_env: Env) -> u32 {
10+
100
11+
}
12+
13+
pub fn get_base_reserve(env: Env) -> u32 {
14+
env.storage().instance().get(&symbol_short!("Reserve")).unwrap_or(0)
15+
}
16+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#![cfg(test)]
2+
use soroban_sdk::{testutils::Address as _, Address, Env};
3+
use crate::{BridgeletCore, BridgeletCoreClient};
4+
5+
mod mock_v2 {
6+
soroban_sdk::contractimport!(
7+
file = "./test_fixtures/mock_v2/target/wasm32v1-none/release/mock_v2.wasm"
8+
);
9+
}
10+
11+
#[test]
12+
fn test_contract_upgrade_preserves_state_and_adds_feature() {
13+
let env = Env::default();
14+
env.mock_all_auths();
15+
16+
let admin = Address::generate(&env);
17+
let contract_id = env.register(BridgeletCore, ());
18+
let client = BridgeletCoreClient::new(&env, &contract_id);
19+
20+
client.initialize(&admin);
21+
client.set_base_reserve(&5000);
22+
23+
let reserve_before = client.get_base_reserve();
24+
assert_eq!(reserve_before, 5000, "V1 state should be set correctly");
25+
26+
let v2_wasm_hash = env.deployer().upload_contract_wasm(mock_v2::WASM);
27+
28+
client.upgrade(&v2_wasm_hash);
29+
30+
let v2_client = mock_v2::Client::new(&env, &contract_id);
31+
32+
let reserve_after = v2_client.get_base_reserve();
33+
assert_eq!(reserve_after, 5000, "V2 must retain V1 state");
34+
35+
let new_val = v2_client.v2_exclusive_feature();
36+
assert_eq!(new_val, 100, "V2 exclusive feature must be accessible");
37+
}

0 commit comments

Comments
 (0)