Skip to content

Commit

Permalink
refactored upgrade code
Browse files Browse the repository at this point in the history
  • Loading branch information
andreivasilescu24 committed Aug 29, 2024
1 parent 1f6f644 commit 6dc9868
Showing 1 changed file with 64 additions and 19 deletions.
83 changes: 64 additions & 19 deletions contracts/examples/adder/interact/src/basic_interact.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,9 @@ async fn main() {
},
Some(basic_interact_cli::InteractCliCommand::Upgrade(args)) => {
let owner_address = basic_interact.adder_owner_address.clone();
basic_interact.upgrade(args.value, owner_address, ExpectError(0, "")).await
basic_interact
.upgrade(args.value, &owner_address, None)
.await
},
None => {},
}
Expand Down Expand Up @@ -210,43 +212,86 @@ impl AdderInteract {
println!("sum: {sum}");
}

async fn upgrade(&mut self, new_value: u32, sender: Bech32Address, expected_result: ExpectError<'_>) {
let response = self
.interactor
.tx()
.from(sender)
.to(self.state.current_adder_address())
.gas(6_000_000)
.typed(adder_proxy::AdderProxy)
.upgrade(BigUint::from(new_value))
.code_metadata(CodeMetadata::UPGRADEABLE)
.code(ADDER_CODE_PATH)
.returns(expected_result)
.prepare_async()
.run()
.await;
async fn upgrade(
&mut self,
new_value: u32,
sender: &Bech32Address,
expected_result: Option<(u64, &str)>,
) {
match expected_result {
Some((code, msg)) => {
let response = self
.interactor
.tx()
.from(sender)
.to(self.state.current_adder_address())
.gas(6_000_000)
.typed(adder_proxy::AdderProxy)
.upgrade(BigUint::from(new_value))
.code_metadata(CodeMetadata::UPGRADEABLE)
.code(ADDER_CODE_PATH)
.returns(ExpectError(code, msg))
.prepare_async()
.run()
.await;

println!("response: {response:?}");
},
None => {
self.interactor
.tx()
.from(sender)
.to(self.state.current_adder_address())
.gas(6_000_000)
.typed(adder_proxy::AdderProxy)
.upgrade(BigUint::from(new_value))
.code_metadata(CodeMetadata::UPGRADEABLE)
.code(ADDER_CODE_PATH)
.prepare_async()
.run()
.await;

println!("response: {response:?}");
let sum = self
.interactor
.query()
.to(self.state.current_adder_address())
.typed(adder_proxy::AdderProxy)
.sum()
.returns(ReturnsResultUnmanaged)
.prepare_async()
.run()
.await;

assert_eq!(sum, RustBigUint::from(new_value));
},
}
}
}

#[tokio::test]
#[ignore = "run on demand"]
async fn upgrade_test() {
let mut basic_interact = AdderInteract::init().await;
let wallet_address = basic_interact.wallet_address.clone();
let adder_owner_address = basic_interact.adder_owner_address.clone();
let error_not_owner = (4, "upgrade is allowed only for owner");

basic_interact.deploy().await;
basic_interact.add(1u32).await;

// Sum will be 1
basic_interact.print_sum().await;

basic_interact.upgrade(7u32, basic_interact.adder_owner_address.clone(), ExpectError(0, "")).await;
basic_interact
.upgrade(7u32, &adder_owner_address, None)
.await;

// Sum will be the updated value of 7
basic_interact.print_sum().await;

basic_interact.upgrade(10u32, basic_interact.wallet_address.clone(), ExpectError(4, "upgrade is allowed only for owner")).await;
basic_interact
.upgrade(10u32, &wallet_address, Some(error_not_owner))
.await;

// Sum will remain 7
basic_interact.print_sum().await;
Expand Down

0 comments on commit 6dc9868

Please sign in to comment.