Skip to content

Commit

Permalink
Add __check_auth wasm test vectors and tests
Browse files Browse the repository at this point in the history
  • Loading branch information
leighmcculloch committed Sep 10, 2024
1 parent f57d245 commit 3cf2514
Show file tree
Hide file tree
Showing 10 changed files with 2,286 additions and 0 deletions.
14 changes: 14 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

129 changes: 129 additions & 0 deletions tests/auth/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -482,4 +482,133 @@ mod test_b {
}
}
}

mod wasm {
use super::*;

#[test]
fn test_with_real_contract_wasm_auth_approve() {
let e = Env::default();

let contract_a_id = e.register_contract(None, ContractA);
let contract_b_id = e.register_contract(None, ContractB);
let client = ContractBClient::new(&e, &contract_b_id);

mod imported_auth_approve {
soroban_sdk::contractimport!(
file = "../../target/wasm32-unknown-unknown/release/test_auth_approve.wasm"
);
}

let a = e.register_contract_wasm(None, imported_auth_approve::WASM);
let a_xdr: ScAddress = (&a).try_into().unwrap();

let r = client
.set_auths(&[SorobanAuthorizationEntry {
credentials: SorobanCredentials::Address(SorobanAddressCredentials {
address: a_xdr.clone(),
nonce: 789,
signature_expiration_ledger: 150,
signature: ScVal::Void,
}),
root_invocation: SorobanAuthorizedInvocation {
function: SorobanAuthorizedFunction::ContractFn(InvokeContractArgs {
contract_address: contract_b_id.clone().try_into().unwrap(),
function_name: StringM::try_from("fn2").unwrap().into(),
args: std::vec![ScVal::I32(1), ScVal::I32(2),].try_into().unwrap(),
}),
sub_invocations: std::vec![SorobanAuthorizedInvocation {
function: SorobanAuthorizedFunction::ContractFn(InvokeContractArgs {
contract_address: contract_a_id.clone().try_into().unwrap(),
function_name: StringM::try_from("fn1").unwrap().into(),
args: std::vec![ScVal::Address(a_xdr.clone())].try_into().unwrap(),
},),
sub_invocations: Default::default()
}]
.try_into()
.unwrap(),
},
}])
.try_fn2(&a, &contract_a_id);

assert_eq!(r, Ok(Ok(2)));

assert_eq!(
e.auths(),
[(
a.clone(),
AuthorizedInvocation {
function: AuthorizedFunction::Contract((
contract_b_id.clone(),
symbol_short!("fn2"),
(1, 2).into_val(&e),
)),
sub_invocations: std::vec![AuthorizedInvocation {
function: AuthorizedFunction::Contract((
contract_a_id.clone(),
symbol_short!("fn1"),
(&a,).into_val(&e),
)),
sub_invocations: std::vec![]
}]
}
),],
);
}

#[test]
fn test_with_real_contract_wasm_auth_decline() {
let e = Env::default();

let contract_a_id = e.register_contract(None, ContractA);
let contract_b_id = e.register_contract(None, ContractB);
let client = ContractBClient::new(&e, &contract_b_id);

mod imported_auth_decline {
soroban_sdk::contractimport!(
file = "../../target/wasm32-unknown-unknown/release/test_auth_decline.wasm"
);
}

let a = e.register_contract_wasm(None, imported_auth_decline::WASM);
let a_xdr: ScAddress = (&a).try_into().unwrap();

let r = client
.set_auths(&[SorobanAuthorizationEntry {
credentials: SorobanCredentials::Address(SorobanAddressCredentials {
address: a_xdr.clone(),
nonce: 789,
signature_expiration_ledger: 150,
signature: ScVal::Void,
}),
root_invocation: SorobanAuthorizedInvocation {
function: SorobanAuthorizedFunction::ContractFn(InvokeContractArgs {
contract_address: contract_b_id.try_into().unwrap(),
function_name: StringM::try_from("fn2").unwrap().into(),
args: std::vec![ScVal::I32(1), ScVal::I32(2),].try_into().unwrap(),
}),
sub_invocations: std::vec![SorobanAuthorizedInvocation {
function: SorobanAuthorizedFunction::ContractFn(InvokeContractArgs {
contract_address: contract_a_id.clone().try_into().unwrap(),
function_name: StringM::try_from("fn1").unwrap().into(),
args: std::vec![ScVal::Address(a_xdr.clone())].try_into().unwrap(),
},),
sub_invocations: Default::default()
}]
.try_into()
.unwrap(),
},
}])
.try_fn2(&a, &contract_a_id);

assert_eq!(
r,
Err(Ok(Error::from_scerror(ScError::Context(
ScErrorCode::InvalidAction
))))
);

assert_eq!(e.auths(), []);
}
}
}
Loading

0 comments on commit 3cf2514

Please sign in to comment.