Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Interactor chain sim GitHub #1799

Merged
merged 28 commits into from
Oct 16, 2024
Merged
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
e03cd30
chain sim - CI
BiancaIalangi Oct 2, 2024
032e7db
chain sim - docker location
BiancaIalangi Oct 2, 2024
832a6a6
chain sim - replace go get
BiancaIalangi Oct 2, 2024
299a06f
chain sim - replace go mod tidy
BiancaIalangi Oct 2, 2024
38484c4
chain sim - clean Makefile
BiancaIalangi Oct 2, 2024
82e7315
chain sim - clean path Makefile
BiancaIalangi Oct 2, 2024
11b323c
chain sim - add quiet tag
BiancaIalangi Oct 2, 2024
a7d17e6
chain sim - change slow-tests
BiancaIalangi Oct 2, 2024
65f8474
chain sim - change slow-tests
BiancaIalangi Oct 2, 2024
77275f1
chain sim - change slow-tests
BiancaIalangi Oct 2, 2024
45c9b05
chain sim - cleanup
BiancaIalangi Oct 3, 2024
874b82b
chain sim - cleanup
BiancaIalangi Oct 3, 2024
d138a6c
chain sim - update yml file
BiancaIalangi Oct 4, 2024
27a0efe
chain sim - update yml file
BiancaIalangi Oct 4, 2024
d287a1b
Merge branch 'rc/v0.54' into interactor-chain-sim-github
BiancaIalangi Oct 8, 2024
3146233
chain sim - fix send_user_funds
BiancaIalangi Oct 9, 2024
6815700
chain sim - sc-meta test-interactors
BiancaIalangi Oct 9, 2024
80629c0
chain sim - sc-meta test --chain-simulator AND remove sc-meta test-in…
BiancaIalangi Oct 9, 2024
3e69995
chain sim - analyze config file to detect simulator setup
BiancaIalangi Oct 11, 2024
dc2f0f8
chain sim - cleanup
BiancaIalangi Oct 11, 2024
a35096d
chain sim - adder interactor integration test
andrei-marinica Oct 14, 2024
c0f9e58
chain sim - adder interactor integration cleanup
andrei-marinica Oct 14, 2024
d27f419
Merge pull request #1820 from multiversx/cs-test
BiancaIalangi Oct 15, 2024
563789f
chain sim - cleanup sc-meta test
BiancaIalangi Oct 15, 2024
bd48783
chain sim - rename makefile
BiancaIalangi Oct 16, 2024
5152004
Merge branch 'rc/v0.54' into interactor-chain-sim-github
BiancaIalangi Oct 16, 2024
ddfceaf
chain sim - adder interactor test tweaks
andrei-marinica Oct 16, 2024
eb6eb19
chain sim - renamed chain-simulator-tests
andrei-marinica Oct 16, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/actions.yml
Original file line number Diff line number Diff line change
@@ -14,7 +14,7 @@ permissions:
jobs:
contracts:
name: Contracts
uses: multiversx/mx-sc-actions/.github/workflows/contracts.yml@v3.3.1
uses: multiversx/mx-sc-actions/.github/workflows/contracts.yml@4ec1f927bd99ed90a816ded805daa75fd2040258
with:
rust-toolchain: stable
path-to-sc-meta: framework/meta
4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
chain-simulator:
@docker compose -f docker-compose.yml build
@docker compose -f docker-compose.yml up & sc-meta test -c
@docker compose -f docker-compose.yml down -v
6 changes: 6 additions & 0 deletions contracts/examples/adder/interact/Cargo.toml
Original file line number Diff line number Diff line change
@@ -7,6 +7,9 @@ publish = false

[[bin]]
name = "basic-interact"
path = "src/basic_interact_main.rs"

[lib]
path = "src/basic_interact.rs"

[dependencies]
@@ -21,3 +24,6 @@ path = ".."
[dependencies.multiversx-sc-snippets]
version = "0.53.2"
path = "../../../../framework/snippets"

[features]
chain-simulator-tests = []
8 changes: 4 additions & 4 deletions contracts/examples/adder/interact/config.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# chain_type = 'simulator'
# gateway_uri = 'http://localhost:8085'
chain_type = 'simulator'
gateway_uri = 'http://localhost:8085'

chain_type = 'real'
gateway_uri = 'https://devnet-gateway.multiversx.com'
# chain_type = 'real'
# gateway_uri = 'https://devnet-gateway.multiversx.com'
81 changes: 24 additions & 57 deletions contracts/examples/adder/interact/src/basic_interact.rs
Original file line number Diff line number Diff line change
@@ -2,11 +2,9 @@ mod basic_interact_cli;
mod basic_interact_config;
mod basic_interact_state;

use core::str;

use crate::basic_interact_state::State;
use adder::adder_proxy;
use basic_interact_config::Config;
use basic_interact_state::State;
pub use basic_interact_config::Config;
use clap::Parser;

use multiversx_sc_snippets::imports::*;
@@ -15,11 +13,12 @@ const INTERACTOR_SCENARIO_TRACE_PATH: &str = "interactor_trace.scen.json";

const ADDER_CODE_PATH: MxscPath = MxscPath::new("../output/adder.mxsc.json");

#[tokio::main]
async fn main() {
pub async fn adder_cli() {
env_logger::init();

let mut basic_interact = AdderInteract::init().await;
let config = Config::load_config();

let mut basic_interact = AdderInteract::init(config).await;

let cli = basic_interact_cli::InteractCli::parse();
match &cli.command {
@@ -40,7 +39,8 @@ async fn main() {
basic_interact.multi_deploy(args.count).await;
},
Some(basic_interact_cli::InteractCliCommand::Sum) => {
basic_interact.print_sum().await;
let sum = basic_interact.get_sum().await;
println!("sum: {sum}");
},
Some(basic_interact_cli::InteractCliCommand::Upgrade(args)) => {
let owner_address = basic_interact.adder_owner_address.clone();
@@ -53,16 +53,15 @@ async fn main() {
}

#[allow(unused)]
struct AdderInteract {
interactor: Interactor,
adder_owner_address: Bech32Address,
wallet_address: Bech32Address,
state: State,
pub struct AdderInteract {
pub interactor: Interactor,
pub adder_owner_address: Bech32Address,
pub wallet_address: Bech32Address,
pub state: State,
}

impl AdderInteract {
async fn init() -> Self {
let config = Config::load_config();
pub async fn init(config: Config) -> Self {
let mut interactor = Interactor::new(config.gateway_uri(), config.use_chain_simulator())
.await
.with_tracer(INTERACTOR_SCENARIO_TRACE_PATH)
@@ -94,15 +93,15 @@ impl AdderInteract {
}
}

async fn set_state(&mut self) {
pub async fn set_state(&mut self) {
println!("wallet address: {}", self.wallet_address);
self.interactor
.retrieve_account(&self.adder_owner_address)
.await;
self.interactor.retrieve_account(&self.wallet_address).await;
}

async fn deploy(&mut self) {
pub async fn deploy(&mut self) {
// warning: multi deploy not yet fully supported
// only works with last deployed address

@@ -125,7 +124,7 @@ impl AdderInteract {
self.state.set_adder_address(new_address);
}

async fn multi_deploy(&mut self, count: usize) {
pub async fn multi_deploy(&mut self, count: usize) {
if count == 0 {
println!("count must be greater than 0");
return;
@@ -158,7 +157,7 @@ impl AdderInteract {
}
}

async fn multi_add(&mut self, value: u32, count: usize) {
pub async fn multi_add(&mut self, value: u32, count: usize) {
self.set_state().await;
println!("calling contract {count} times...");

@@ -178,7 +177,7 @@ impl AdderInteract {
println!("successfully performed add {count} times");
}

async fn feed_contract_egld(&mut self) {
pub async fn feed_contract_egld(&mut self) {
self.interactor
.tx()
.from(&self.wallet_address)
@@ -188,7 +187,7 @@ impl AdderInteract {
.await;
}

async fn add(&mut self, value: u32) {
pub async fn add(&mut self, value: u32) {
self.interactor
.tx()
.from(&self.wallet_address)
@@ -202,21 +201,18 @@ impl AdderInteract {
println!("successfully performed add");
}

async fn print_sum(&mut self) {
let sum = self
.interactor
pub async fn get_sum(&mut self) -> RustBigUint {
self.interactor
.query()
.to(self.state.current_adder_address())
.typed(adder_proxy::AdderProxy)
.sum()
.returns(ReturnsResultUnmanaged)
.run()
.await;

println!("sum: {sum}");
.await
}

async fn upgrade(
pub async fn upgrade(
&mut self,
new_value: u32,
sender: &Bech32Address,
@@ -268,32 +264,3 @@ impl AdderInteract {
}
}
}

#[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, &adder_owner_address, None)
.await;

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

basic_interact
.upgrade(10u32, &wallet_address, Some(error_not_owner))
.await;

// Sum will remain 7
basic_interact.print_sum().await;
}
11 changes: 9 additions & 2 deletions contracts/examples/adder/interact/src/basic_interact_config.rs
Original file line number Diff line number Diff line change
@@ -14,8 +14,8 @@ pub enum ChainType {
/// Adder Interact configuration
#[derive(Debug, Deserialize)]
pub struct Config {
gateway_uri: String,
chain_type: ChainType,
pub gateway_uri: String,
pub chain_type: ChainType,
}

impl Config {
@@ -27,6 +27,13 @@ impl Config {
toml::from_str(&content).unwrap()
}

pub fn chain_simulator_config() -> Self {
Config {
gateway_uri: "http://localhost:8085".to_owned(),
chain_type: ChainType::Simulator,
}
}

// Returns the gateway URI
pub fn gateway_uri(&self) -> &str {
&self.gateway_uri
6 changes: 6 additions & 0 deletions contracts/examples/adder/interact/src/basic_interact_main.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
extern crate basic_interact;

#[tokio::main]
pub async fn main() {
basic_interact::adder_cli().await;
}
33 changes: 33 additions & 0 deletions contracts/examples/adder/interact/tests/basic_interact_cs_test.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
use basic_interact::{AdderInteract, Config};

#[tokio::test]
#[cfg_attr(not(feature = "chain-simulator-tests"), ignore)]
async fn simulator_upgrade_test() {
let mut basic_interact = AdderInteract::init(Config::chain_simulator_config()).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
let sum = basic_interact.get_sum().await;
assert_eq!(sum, 1u32.into());

basic_interact
.upgrade(7u32, &adder_owner_address, None)
.await;

// Sum will be the updated value of 7
let sum = basic_interact.get_sum().await;
assert_eq!(sum, 7u32.into());

// basic_interact
andrei-marinica marked this conversation as resolved.
Show resolved Hide resolved
// .upgrade(10u32, &wallet_address, Some(error_not_owner))
// .await;

// // Sum will remain 7
let sum = basic_interact.get_sum().await;
assert_eq!(sum, 7u32.into());
}
10 changes: 10 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
version: "3.9"

services:
chain-simulator:
image: multiversx/chainsimulator:latest
ports:
- 8085:8085
volumes:
- "../scripts:/docker/scripts"
entrypoint: "./chainsimulator -log-level *:INFO"
10 changes: 10 additions & 0 deletions framework/meta/src/cli/cli_args_standalone.rs
Original file line number Diff line number Diff line change
@@ -111,6 +111,16 @@ pub struct TestArgs {
#[arg(short, long, default_value = "false", verbatim_doc_comment)]
pub go: bool,

/// This arg runs interactor tests using chain simulator
/// Default value will be "false" if not specified
#[arg(
short = 'c',
long = "chain-simulator",
default_value = "false",
verbatim_doc_comment
)]
pub chain_simulator: bool,

/// This arg runs scenarios.
/// Default value will be "false" if not specified.
/// If scen and go are both specified, scen overrides the go argument.
5 changes: 5 additions & 0 deletions framework/meta/src/cmd/test.rs
Original file line number Diff line number Diff line change
@@ -12,6 +12,7 @@ pub fn test(test_args: &TestArgs) {
let go = test_args.go;
let scen = test_args.scen;
let no_capture = test_args.nocapture;
let chain_simulator = test_args.chain_simulator;

if scen {
program = "mx-scenario-go";
@@ -27,6 +28,10 @@ pub fn test(test_args: &TestArgs) {
args.extend(["--features", "multiversx-sc-scenario/run-go-tests"]);
}

if chain_simulator {
args.extend(["--features", "chain-simulator-tests"]);
}

if no_capture {
args.extend(["--", "--nocapture"]);
}
2 changes: 1 addition & 1 deletion sdk/core/src/gateway/gateway_chain_simulator_send_funds.rs
Original file line number Diff line number Diff line change
@@ -27,7 +27,7 @@ impl GatewayRequest for ChainSimulatorSendFundsRequest {
type Result = String;

fn request_type(&self) -> GatewayRequestType {
GatewayRequestType::Get
GatewayRequestType::Post
}

fn get_endpoint(&self) -> String {