From 58b38d9cbe462daca3dfca146b71b78961f1cc78 Mon Sep 17 00:00:00 2001 From: gluax <16431709+gluax@users.noreply.github.com> Date: Tue, 7 May 2024 21:39:53 -0600 Subject: [PATCH] fix: remaining dr integration tests --- packages/integration-tests/src/data_result.rs | 516 +++++++++--------- 1 file changed, 271 insertions(+), 245 deletions(-) diff --git a/packages/integration-tests/src/data_result.rs b/packages/integration-tests/src/data_result.rs index 329ffeea..4fbb2070 100644 --- a/packages/integration-tests/src/data_result.rs +++ b/packages/integration-tests/src/data_result.rs @@ -3,6 +3,7 @@ use crate::tests::utils::{ get_dr_id, helper_commit_result, helper_post_dr, helper_reveal_result, proper_instantiate, reveal_hash, send_tokens, TestExecutor, USER, }; +use common::consts::INITIAL_MINIMUM_STAKE_TO_REGISTER; // use common::consts::INITIAL_MINIMUM_STAKE_TO_REGISTER; use common::error::ContractError; use common::msg::{ @@ -271,248 +272,273 @@ fn commit_reveal_result() { assert_eq!(res.value.dr_id, dr_id); } -// #[test] -// fn ineligible_post_data_result() { -// let (mut app, proxy_contract) = proper_instantiate(); - -// let posted_dr = calculate_dr_id_and_args(1, 2); - -// let res = helper_post_dr( -// &mut app, -// proxy_contract.clone(), -// posted_dr, -// Addr::unchecked(USER), -// ) -// .unwrap(); - -// // get dr_id -// let dr_id = get_dr_id(res); - -// let commitment1 = calculate_commitment("2000", EXECUTOR_1); - -// let res = helper_commit_result( -// &mut app, -// proxy_contract.clone(), -// dr_id, -// commitment1, -// vec![], -// Addr::unchecked(EXECUTOR_1), -// ); - -// assert_eq!( -// res.unwrap_err().downcast_ref::(), -// Some(&ContractError::IneligibleExecutor) -// ); -// } - -// #[test] -// fn pop_and_swap_in_pool() { -// let (mut app, proxy_contract) = proper_instantiate(); - -// // send tokens from USER to executor1 and executor2 so they can register -// send_tokens(&mut app, USER, EXECUTOR_1, 1); -// send_tokens(&mut app, USER, EXECUTOR_2, 1); -// let msg = ProxyExecuteMsg::RegisterDataRequestExecutor { -// memo: Some("address".to_string()), -// public_key: vec![], -// signature: Signature::new([0; 65]), -// }; -// let cosmos_msg = proxy_contract -// .call_with_deposit(msg, INITIAL_MINIMUM_STAKE_TO_REGISTER) -// .unwrap(); -// app.execute(Addr::unchecked(EXECUTOR_1), cosmos_msg.clone()) -// .unwrap(); -// app.execute(Addr::unchecked(EXECUTOR_2), cosmos_msg.clone()) -// .unwrap(); - -// // post three drs - -// let posted_dr = calculate_dr_id_and_args(1, 2); -// let res = helper_post_dr( -// &mut app, -// proxy_contract.clone(), -// posted_dr, -// Addr::unchecked(USER), -// ) -// .unwrap(); -// let dr_id_1 = get_dr_id(res); -// let posted_dr = calculate_dr_id_and_args(2, 2); -// let res = helper_post_dr( -// &mut app, -// proxy_contract.clone(), -// posted_dr, -// Addr::unchecked(USER), -// ) -// .unwrap(); -// let dr_id_2 = get_dr_id(res); -// let posted_dr = calculate_dr_id_and_args(3, 2); -// let res = helper_post_dr( -// &mut app, -// proxy_contract.clone(), -// posted_dr, -// Addr::unchecked(USER), -// ) -// .unwrap(); -// let dr_id_3 = get_dr_id(res); - -// // check dr 1, 2, 3 are in pool -// let msg = ProxyQueryMsg::GetDataRequestsFromPool { -// position: None, -// limit: None, -// }; -// let res: GetDataRequestsFromPoolResponse = app -// .wrap() -// .query_wasm_smart(proxy_contract.addr(), &msg) -// .unwrap(); -// let fetched_drs = res.value; -// assert_eq!(fetched_drs.len(), 3); -// // TODO -// // assert_eq!(fetched_drs[0].dr_id, dr_id_1); -// // assert_eq!(fetched_drs[1].dr_id, dr_id_2); -// // assert_eq!(fetched_drs[2].dr_id, dr_id_3); - -// // `GetDataRequestsFromPool` with position = 0 and limit = 1 should return dr 1 -// let msg = ProxyQueryMsg::GetDataRequestsFromPool { -// position: Some(0), -// limit: Some(1), -// }; -// let res: GetDataRequestsFromPoolResponse = app -// .wrap() -// .query_wasm_smart(proxy_contract.addr(), &msg) -// .unwrap(); -// let fetched_drs = res.value; -// assert_eq!(fetched_drs.len(), 1); -// // assert_eq!(fetched_drs[0].dr_id, dr_id_1); // TODO - -// // resolve dr 1 - -// // executor 1 commits -// let commitment1 = calculate_commitment("2000", EXECUTOR_1); -// helper_commit_result( -// &mut app, -// proxy_contract.clone(), -// dr_id_1, -// commitment1, -// vec![], -// Addr::unchecked(EXECUTOR_1), -// ) -// .unwrap(); -// // executor 2 commits -// let commitment2 = calculate_commitment("3000", EXECUTOR_2); -// helper_commit_result( -// &mut app, -// proxy_contract.clone(), -// dr_id_1, -// commitment2.clone(), -// vec![], -// Addr::unchecked(EXECUTOR_2), -// ) -// .unwrap(); -// // executor 1 reveals -// let reveal1 = RevealBody { -// reveal: "2000".to_string().into_bytes(), -// salt: "executor1".to_string().into_bytes().try_into().unwrap(), -// exit_code: 0, -// gas_used: 0, -// }; -// helper_reveal_result( -// &mut app, -// proxy_contract.clone(), -// dr_id_1, -// reveal1.clone(), -// Signature::new([0; 65]), -// Addr::unchecked(EXECUTOR_1), -// ) -// .unwrap(); -// // executor 2 reveals -// let reveal2 = RevealBody { -// reveal: "3000".to_string().into_bytes(), -// salt: "executor2".to_string().into_bytes().try_into().unwrap(), -// exit_code: 0, -// gas_used: 0, -// }; -// helper_reveal_result( -// &mut app, -// proxy_contract.clone(), -// dr_id_1, -// reveal2, -// Signature::new([0; 65]), -// Addr::unchecked(EXECUTOR_2), -// ) -// .unwrap(); - -// // pool is now of size two, the position of dr 2 and 3 should be swapped -// let msg = ProxyQueryMsg::GetDataRequestsFromPool { -// position: None, -// limit: None, -// }; -// let res: GetDataRequestsFromPoolResponse = app -// .wrap() -// .query_wasm_smart(proxy_contract.addr(), &msg) -// .unwrap(); -// let fetched_drs = res.value; -// assert_eq!(fetched_drs.len(), 2); -// // TODO -// // assert_eq!(fetched_drs[0].dr_id, dr_id_3); -// // assert_eq!(fetched_drs[1].dr_id, dr_id_2); - -// // `GetDataRequestsFromPool` with position = 1 should return dr 2 -// let msg = ProxyQueryMsg::GetDataRequestsFromPool { -// position: Some(1), -// limit: None, -// }; -// let res: GetDataRequestsFromPoolResponse = app -// .wrap() -// .query_wasm_smart(proxy_contract.addr(), &msg) -// .unwrap(); -// let fetched_drs = res.value; -// assert_eq!(fetched_drs.len(), 1); -// // assert_eq!(fetched_drs[0].dr_id, dr_id_2); // TODO - -// // `GetDataRequestsFromPool` with limit = 1 should return dr 3 -// let msg = ProxyQueryMsg::GetDataRequestsFromPool { -// position: None, -// limit: Some(1), -// }; -// let res: GetDataRequestsFromPoolResponse = app -// .wrap() -// .query_wasm_smart(proxy_contract.addr(), &msg) -// .unwrap(); -// let fetched_drs = res.value; -// assert_eq!(fetched_drs.len(), 1); -// // assert_eq!(fetched_drs[0].dr_id, dr_id_3); // TODO - -// // `GetDataRequestsFromPool` with position = 2 or 3 should return empty array -// let msg = ProxyQueryMsg::GetDataRequestsFromPool { -// position: Some(2), -// limit: None, -// }; -// let res: GetDataRequestsFromPoolResponse = app -// .wrap() -// .query_wasm_smart(proxy_contract.addr(), &msg) -// .unwrap(); -// let fetched_drs = res.value; -// assert_eq!(fetched_drs.len(), 0); -// let msg = ProxyQueryMsg::GetDataRequestsFromPool { -// position: Some(3), -// limit: None, -// }; -// let res: GetDataRequestsFromPoolResponse = app -// .wrap() -// .query_wasm_smart(proxy_contract.addr(), &msg) -// .unwrap(); -// let fetched_drs = res.value; -// assert_eq!(fetched_drs.len(), 0); - -// // `GetDataRequestsFromPool` with limit = 0 should return empty array -// let msg = ProxyQueryMsg::GetDataRequestsFromPool { -// position: None, -// limit: Some(0), -// }; -// let res: GetDataRequestsFromPoolResponse = app -// .wrap() -// .query_wasm_smart(proxy_contract.addr(), &msg) -// .unwrap(); -// let fetched_drs = res.value; -// assert_eq!(fetched_drs.len(), 0); -// } +#[test] +fn ineligible_post_data_result() { + let (mut app, proxy_contract) = proper_instantiate(); + + let posted_dr = calculate_dr_id_and_args(1, 2); + + let res = helper_post_dr( + &mut app, + proxy_contract.clone(), + posted_dr, + Addr::unchecked(USER), + ) + .unwrap(); + + // get dr_id + let dr_id = get_dr_id(res); + + let exec_1 = TestExecutor::new("exec_1"); + let reveal = RevealBody { + reveal: "2000".to_string().into_bytes(), + salt: exec_1.salt(), + exit_code: 0, + gas_used: 0, + }; + + let (commitment1, _) = reveal_hash(&reveal, None); + + let res = helper_commit_result( + &mut app, + proxy_contract.clone(), + dr_id, + commitment1, + exec_1.public_key.clone(), + Addr::unchecked(exec_1.name), + ); + + assert_eq!( + res.unwrap_err().downcast_ref::(), + Some(&ContractError::IneligibleExecutor) + ); +} + +#[test] +fn pop_and_swap_in_pool() { + let (mut app, proxy_contract) = proper_instantiate(); + + let exec_1 = TestExecutor::new("exec_1"); + let exec_2 = TestExecutor::new("exec_2"); + + // send tokens from USER to executor1 and executor2 so they can register + send_tokens(&mut app, USER, exec_1.name, 1); + send_tokens(&mut app, USER, exec_2.name, 1); + let msg = ProxyExecuteMsg::RegisterDataRequestExecutor { + memo: Some("address".to_string()), + public_key: exec_1.public_key.clone(), + signature: exec_1.sign(["address".as_bytes().to_vec()]), + }; + let cosmos_msg = proxy_contract + .call_with_deposit(msg, INITIAL_MINIMUM_STAKE_TO_REGISTER) + .unwrap(); + app.execute(Addr::unchecked(exec_1.name), cosmos_msg.clone()) + .unwrap(); + let msg = ProxyExecuteMsg::RegisterDataRequestExecutor { + memo: Some("address".to_string()), + public_key: exec_2.public_key.clone(), + signature: exec_2.sign(["address".as_bytes().to_vec()]), + }; + let cosmos_msg = proxy_contract + .call_with_deposit(msg, INITIAL_MINIMUM_STAKE_TO_REGISTER) + .unwrap(); + app.execute(Addr::unchecked(exec_2.name), cosmos_msg.clone()) + .unwrap(); + + // post three drs + + let posted_dr = calculate_dr_id_and_args(1, 2); + let res = helper_post_dr( + &mut app, + proxy_contract.clone(), + posted_dr, + Addr::unchecked(USER), + ) + .unwrap(); + let dr_id_1 = get_dr_id(res); + let posted_dr = calculate_dr_id_and_args(2, 2); + let res = helper_post_dr( + &mut app, + proxy_contract.clone(), + posted_dr, + Addr::unchecked(USER), + ) + .unwrap(); + let dr_id_2 = get_dr_id(res); + let posted_dr = calculate_dr_id_and_args(3, 2); + let res = helper_post_dr( + &mut app, + proxy_contract.clone(), + posted_dr, + Addr::unchecked(USER), + ) + .unwrap(); + let dr_id_3 = get_dr_id(res); + + // check dr 1, 2, 3 are in pool + let msg = ProxyQueryMsg::GetDataRequestsFromPool { + position: None, + limit: None, + }; + let res: GetDataRequestsFromPoolResponse = app + .wrap() + .query_wasm_smart(proxy_contract.addr(), &msg) + .unwrap(); + let fetched_drs = res.value; + assert_eq!(fetched_drs.len(), 3); + // TODO + // assert_eq!(fetched_drs[0].dr_id, dr_id_1); + // assert_eq!(fetched_drs[1].dr_id, dr_id_2); + // assert_eq!(fetched_drs[2].dr_id, dr_id_3); + + // `GetDataRequestsFromPool` with position = 0 and limit = 1 should return dr 1 + let msg = ProxyQueryMsg::GetDataRequestsFromPool { + position: Some(0), + limit: Some(1), + }; + let res: GetDataRequestsFromPoolResponse = app + .wrap() + .query_wasm_smart(proxy_contract.addr(), &msg) + .unwrap(); + let fetched_drs = res.value; + assert_eq!(fetched_drs.len(), 1); + // assert_eq!(fetched_drs[0].dr_id, dr_id_1); // TODO + + // resolve dr 1 + + let reveal1 = RevealBody { + reveal: "2000".to_string().into_bytes(), + salt: exec_1.salt(), + exit_code: 0, + gas_used: 0, + }; + + // executor 1 commits + let (commitment1, reveal1_sig_bytes) = reveal_hash(&reveal1, None); + let reveal1_sig = exec_1.sign(reveal1_sig_bytes); + helper_commit_result( + &mut app, + proxy_contract.clone(), + dr_id_1, + commitment1, + exec_1.public_key.clone(), + Addr::unchecked(exec_1.name), + ) + .unwrap(); + + let reveal2 = RevealBody { + reveal: "3000".to_string().into_bytes(), + salt: exec_2.salt(), + exit_code: 0, + gas_used: 0, + }; + // executor 2 commits + let (commitment2, reveal2_sig_bytes) = reveal_hash(&reveal2, None); + let reveal2_sig = exec_2.sign(reveal2_sig_bytes); + helper_commit_result( + &mut app, + proxy_contract.clone(), + dr_id_1, + commitment2, + exec_2.public_key.clone(), + Addr::unchecked(exec_2.name), + ) + .unwrap(); + + // executor 1 reveals + helper_reveal_result( + &mut app, + proxy_contract.clone(), + dr_id_1, + reveal1.clone(), + reveal1_sig.clone(), + Addr::unchecked(exec_1.name), + ) + .unwrap(); + + // executor 2 reveals + helper_reveal_result( + &mut app, + proxy_contract.clone(), + dr_id_1, + reveal2, + reveal2_sig, + Addr::unchecked(exec_2.name), + ) + .unwrap(); + + // pool is now of size two, the position of dr 2 and 3 should be swapped + let msg = ProxyQueryMsg::GetDataRequestsFromPool { + position: None, + limit: None, + }; + let res: GetDataRequestsFromPoolResponse = app + .wrap() + .query_wasm_smart(proxy_contract.addr(), &msg) + .unwrap(); + let fetched_drs = res.value; + assert_eq!(fetched_drs.len(), 2); + // TODO + // assert_eq!(fetched_drs[0].dr_id, dr_id_3); + // assert_eq!(fetched_drs[1].dr_id, dr_id_2); + + // `GetDataRequestsFromPool` with position = 1 should return dr 2 + let msg = ProxyQueryMsg::GetDataRequestsFromPool { + position: Some(1), + limit: None, + }; + let res: GetDataRequestsFromPoolResponse = app + .wrap() + .query_wasm_smart(proxy_contract.addr(), &msg) + .unwrap(); + let fetched_drs = res.value; + assert_eq!(fetched_drs.len(), 1); + // assert_eq!(fetched_drs[0].dr_id, dr_id_2); // TODO + + // `GetDataRequestsFromPool` with limit = 1 should return dr 3 + let msg = ProxyQueryMsg::GetDataRequestsFromPool { + position: None, + limit: Some(1), + }; + let res: GetDataRequestsFromPoolResponse = app + .wrap() + .query_wasm_smart(proxy_contract.addr(), &msg) + .unwrap(); + let fetched_drs = res.value; + assert_eq!(fetched_drs.len(), 1); + // assert_eq!(fetched_drs[0].dr_id, dr_id_3); // TODO + + // `GetDataRequestsFromPool` with position = 2 or 3 should return empty array + let msg = ProxyQueryMsg::GetDataRequestsFromPool { + position: Some(2), + limit: None, + }; + let res: GetDataRequestsFromPoolResponse = app + .wrap() + .query_wasm_smart(proxy_contract.addr(), &msg) + .unwrap(); + let fetched_drs = res.value; + assert_eq!(fetched_drs.len(), 0); + let msg = ProxyQueryMsg::GetDataRequestsFromPool { + position: Some(3), + limit: None, + }; + let res: GetDataRequestsFromPoolResponse = app + .wrap() + .query_wasm_smart(proxy_contract.addr(), &msg) + .unwrap(); + let fetched_drs = res.value; + assert_eq!(fetched_drs.len(), 0); + + // `GetDataRequestsFromPool` with limit = 0 should return empty array + let msg = ProxyQueryMsg::GetDataRequestsFromPool { + position: None, + limit: Some(0), + }; + let res: GetDataRequestsFromPoolResponse = app + .wrap() + .query_wasm_smart(proxy_contract.addr(), &msg) + .unwrap(); + let fetched_drs = res.value; + assert_eq!(fetched_drs.len(), 0); +}