Skip to content

Commit

Permalink
test: implment flipper, issue666, msg_sender, primitives tests
Browse files Browse the repository at this point in the history
Signed-off-by: Raymond Yeh <extraymond@gmail.com>
  • Loading branch information
extraymond committed Aug 28, 2022
1 parent 5dd7990 commit 65a4cc4
Show file tree
Hide file tree
Showing 6 changed files with 867 additions and 4 deletions.
1 change: 1 addition & 0 deletions integration/subxt-tests/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ contract-metadata = "1.5.0"
contract-transcode = "0.1.0"
hex = "0.4.3"
ink_metadata = "3.3.1"
num-bigint = "0.4.3"
pallet-contracts-primitives = {git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.27"}
parity-scale-codec = "3.1.5"
rand = "0.8.5"
Expand Down
69 changes: 68 additions & 1 deletion integration/subxt-tests/src/cases/flipper.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,71 @@
use parity_scale_codec::{Decode, Encode};
use sp_core::hexdisplay::AsBytesRef;

use crate::{build_selector, DeployContract, Execution, ReadContract, WriteContract, API};

#[tokio::test]
async fn case() -> anyhow::Result<()> {
unimplemented!();
let api = API::new().await?;

let code = std::fs::read("./contracts/flipper.wasm")?;

let selector = build_selector(
"f81e7e1a",
Some(&mut |s| {
true.encode_to(s);
}),
)?;

let contract = DeployContract {
caller: sp_keyring::AccountKeyring::Alice,
selector,
value: 0,
code,
}
.execute(&api)
.await?;

// get value
let selector = build_selector("6d4ce63c", None)?;

let init_value = ReadContract {
caller: sp_keyring::AccountKeyring::Alice,
contract_address: contract.contract_address.clone(),
value: 0,
selector,
}
.execute(&api)
.await
.and_then(|v| <bool>::decode(&mut v.return_value.as_bytes_ref()).map_err(Into::into))?;

assert!(init_value);

// flip flipper
let selector = build_selector("cde4efa9", None)?;

WriteContract {
caller: sp_keyring::AccountKeyring::Alice,
contract_address: contract.contract_address.clone(),
selector,
value: 0,
}
.execute(&api)
.await?;

// get value
let selector = build_selector("6d4ce63c", None)?;

let value = ReadContract {
caller: sp_keyring::AccountKeyring::Alice,
contract_address: contract.contract_address.clone(),
value: 0,
selector,
}
.execute(&api)
.await
.and_then(|v| <bool>::decode(&mut v.return_value.as_bytes_ref()).map_err(Into::into))?;

assert!(!value);

Ok(())
}
62 changes: 61 additions & 1 deletion integration/subxt-tests/src/cases/issue666.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,64 @@
use parity_scale_codec::Encode;

use crate::{build_selector, DeployContract, Execution, WriteContract, API};

#[tokio::test]
async fn case() -> anyhow::Result<()> {
unimplemented!();
let api = API::new().await?;

let flipper_code = std::fs::read("./contracts/Flip.wasm")?;
let inc_code = std::fs::read("./contracts/Inc.wasm")?;

let selector = build_selector("861731d5", None)?;

let flipper = DeployContract {
caller: sp_keyring::AccountKeyring::Alice,
selector,
value: 0,
code: flipper_code,
}
.execute(&api)
.await?;

// flip on Flip
let selector = build_selector("cde4efa9", None)?;

WriteContract {
caller: sp_keyring::AccountKeyring::Alice,
contract_address: flipper.contract_address.clone(),
selector,
value: 0,
}
.execute(&api)
.await?;

let selector = build_selector(
"45fd0674",
Some(&mut |s| {
flipper.contract_address.encode_to(s);
}),
)?;

let inc = DeployContract {
caller: sp_keyring::AccountKeyring::Alice,
selector,
value: 0,
code: inc_code,
}
.execute(&api)
.await?;

// superFlip on Inc
let selector = build_selector("cc69915f", None)?;

WriteContract {
caller: sp_keyring::AccountKeyring::Alice,
contract_address: inc.contract_address.clone(),
selector,
value: 0,
}
.execute(&api)
.await?;

Ok(())
}
1 change: 1 addition & 0 deletions integration/subxt-tests/src/cases/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ mod create_contract;
mod destruct;
mod events;
mod external_call;
mod flipper;
mod issue666;
mod msg_sender;
mod primitives;
Expand Down
86 changes: 85 additions & 1 deletion integration/subxt-tests/src/cases/msg_sender.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,88 @@
use parity_scale_codec::{Decode, Encode, Input};
use sp_core::{crypto::AccountId32, hexdisplay::AsBytesRef};

use crate::{build_selector, DeployContract, Execution, ReadContract, WriteContract, API};

#[tokio::test]
async fn case() -> anyhow::Result<()> {
unimplemented!();
let api = API::new().await?;

// mytoken
let mytoken_code = std::fs::read("./contracts/mytoken.wasm")?;
let mytoken_event_code = std::fs::read("./contracts/mytokenEvent.wasm")?;

let selector = build_selector("861731d5", None)?;

let mytoken = DeployContract {
caller: sp_keyring::AccountKeyring::Alice,
selector,
value: 0,
code: mytoken_code,
}
.execute(&api)
.await?;

// read test
let selector = build_selector(
"ceff345b",
Some(&mut |s| {
sp_keyring::AccountKeyring::Alice
.to_account_id()
.encode_to(s);

true.encode_to(s);
}),
)?;

let addr = ReadContract {
caller: sp_keyring::AccountKeyring::Alice,
contract_address: mytoken.contract_address.clone(),
value: 0,
selector,
}
.execute(&api)
.await
.and_then(|v| <AccountId32>::decode(&mut v.return_value.as_bytes_ref()).map_err(Into::into))?;

assert_eq!(addr, sp_keyring::AccountKeyring::Alice.to_account_id());

// mytokenEvent
let selector = build_selector("861731d5", None)?;

let mytoken_event = DeployContract {
caller: sp_keyring::AccountKeyring::Alice,
selector,
value: 0,
code: mytoken_event_code,
}
.execute(&api)
.await?;

// call test
let selector = build_selector("f8a8fd6d", None)?;

let output = WriteContract {
caller: sp_keyring::AccountKeyring::Alice,
contract_address: mytoken_event.contract_address.clone(),
selector,
value: 0,
}
.execute(&api)
.await?;

assert_eq!(output.events.len(), 1);

let evt = &output.events[0];

let mut evt_buffer = evt.data.as_slice();

let topic_id = evt_buffer.read_byte()?;

assert_eq!(topic_id, 0);

let addr = <AccountId32>::decode(&mut evt_buffer)?;

assert_eq!(addr, sp_keyring::AccountKeyring::Alice.to_account_id());

Ok(())
}
Loading

0 comments on commit 65a4cc4

Please sign in to comment.