mirror of
https://github.com/fluencelabs/aquavm
synced 2025-03-15 04:30:48 +00:00
chore(testing-framework)!: restore WASM test executor (#609)
* chore(testing-framework)!: fix WASM test runner Native mode was used before because some package used native runner for its tests. This PR allows to explicitly select test runner for tests. Many testing-framework types are now parametrized with a runner type with almost compatible defaults. * chore(testing-framework): Add `ReleaseWasmAirRunner` * chore(testing-framework)!: Rename `AirScriptExecutor::simple` to `AirScriptExecutor::from_annotated`.
This commit is contained in:
parent
c6627fe437
commit
c332cca6b7
@ -6,7 +6,9 @@ use criterion::Criterion;
|
||||
|
||||
use std::cell::RefCell;
|
||||
|
||||
thread_local!(static VM: RefCell<TestRunner> = RefCell::new(create_avm(unit_call_service(), "test_peer_id")));
|
||||
thread_local!(static VM: RefCell<TestRunner<ReleaseWasmAirRunner>> = RefCell::new(
|
||||
create_custom_avm(unit_call_service(), "test_peer_id"))
|
||||
);
|
||||
thread_local!(static SCRIPT: String = String::from(
|
||||
r#"
|
||||
(call "test_peer_id" ("local_service_id" "local_fn_name") [] result_name)
|
||||
|
@ -7,17 +7,25 @@ use serde_json::json;
|
||||
|
||||
use std::cell::RefCell;
|
||||
|
||||
thread_local!(static RELAY_1_VM: RefCell<TestRunner> = RefCell::new(create_avm(unit_call_service(), "Relay1")));
|
||||
thread_local!(static RELAY_2_VM: RefCell<TestRunner> = RefCell::new(create_avm(unit_call_service(), "Relay2")));
|
||||
thread_local!(static REMOTE_VM: RefCell<TestRunner> = RefCell::new({
|
||||
thread_local!(static RELAY_1_VM: RefCell<TestRunner<ReleaseWasmAirRunner>> = RefCell::new(
|
||||
create_custom_avm(unit_call_service(), "Relay1")
|
||||
));
|
||||
thread_local!(static RELAY_2_VM: RefCell<TestRunner<ReleaseWasmAirRunner>> = RefCell::new(
|
||||
create_custom_avm(unit_call_service(), "Relay2")
|
||||
));
|
||||
thread_local!(static REMOTE_VM: RefCell<TestRunner<ReleaseWasmAirRunner>> = RefCell::new({
|
||||
let members_call_service: CallServiceClosure = Box::new(|_| -> CallServiceResult {
|
||||
CallServiceResult::ok(json!([["A", "Relay1"], ["B", "Relay2"]]))
|
||||
});
|
||||
|
||||
create_avm(members_call_service, "Remote")
|
||||
create_custom_avm(members_call_service, "Remote")
|
||||
}));
|
||||
thread_local!(static CLIENT_1_VM: RefCell<TestRunner> = RefCell::new(create_avm(unit_call_service(), "A")));
|
||||
thread_local!(static CLIENT_2_VM: RefCell<TestRunner> = RefCell::new(create_avm(unit_call_service(), "B")));
|
||||
thread_local!(static CLIENT_1_VM: RefCell<TestRunner<ReleaseWasmAirRunner>> = RefCell::new(
|
||||
create_custom_avm(unit_call_service(), "A")
|
||||
));
|
||||
thread_local!(static CLIENT_2_VM: RefCell<TestRunner<ReleaseWasmAirRunner>> = RefCell::new(
|
||||
create_custom_avm(unit_call_service(), "B")
|
||||
));
|
||||
|
||||
fn chat_sent_message_benchmark() -> Result<RawAVMOutcome, String> {
|
||||
let script = r#"
|
||||
|
@ -8,7 +8,7 @@ use criterion::Criterion;
|
||||
|
||||
use std::cell::RefCell;
|
||||
|
||||
thread_local!(static VM: RefCell<TestRunner> = RefCell::new({
|
||||
thread_local!(static VM: RefCell<TestRunner<ReleaseWasmAirRunner>> = RefCell::new({
|
||||
let add_module_response = String::from("add_module response");
|
||||
let add_blueprint_response = String::from("add_blueprint response");
|
||||
let create_response = String::from("create response");
|
||||
@ -24,10 +24,10 @@ thread_local!(static VM: RefCell<TestRunner> = RefCell::new({
|
||||
CallServiceResult::ok(json!(response))
|
||||
});
|
||||
|
||||
create_avm(call_service, "A")
|
||||
create_custom_avm(call_service, "A")
|
||||
}));
|
||||
|
||||
thread_local!(static SET_VARIABLES_VM: RefCell<TestRunner> = RefCell::new({
|
||||
thread_local!(static SET_VARIABLES_VM: RefCell<TestRunner<ReleaseWasmAirRunner>> = RefCell::new({
|
||||
let module = "greeting";
|
||||
let module_config = json!(
|
||||
{
|
||||
@ -51,7 +51,7 @@ thread_local!(static SET_VARIABLES_VM: RefCell<TestRunner> = RefCell::new({
|
||||
String::from("blueprint") => json!(blueprint),
|
||||
);
|
||||
|
||||
create_avm(set_variables_call_service(variables_mapping, VariableOptionSource::Argument(0)), "set_variables")
|
||||
create_custom_avm(set_variables_call_service(variables_mapping, VariableOptionSource::Argument(0)), "set_variables")
|
||||
}));
|
||||
|
||||
fn create_service_benchmark() -> Result<RawAVMOutcome, String> {
|
||||
|
@ -7,7 +7,9 @@ use serde_json::Value;
|
||||
|
||||
use std::cell::RefCell;
|
||||
|
||||
thread_local!(static VM: RefCell<TestRunner> = RefCell::new(create_avm(unit_call_service(), "test_peer_id")));
|
||||
thread_local!(static VM: RefCell<TestRunner<ReleaseWasmAirRunner>> = RefCell::new(
|
||||
create_custom_avm(unit_call_service(), "test_peer_id")
|
||||
));
|
||||
|
||||
const SCRIPT: &str = include_str!("data/big.air");
|
||||
// this is the data with smaller number of huge values; it contains only calls and
|
||||
|
@ -7,7 +7,9 @@ use serde_json::Value;
|
||||
|
||||
use std::cell::RefCell;
|
||||
|
||||
thread_local!(static VM: RefCell<TestRunner> = RefCell::new(create_avm(unit_call_service(), "test_peer_id")));
|
||||
thread_local!(static VM: RefCell<TestRunner<ReleaseWasmAirRunner>> = RefCell::new(
|
||||
create_custom_avm(unit_call_service(), "test_peer_id")
|
||||
));
|
||||
// effectively, we measure just loading time
|
||||
const SCRIPT: &str = "(par (null) (null))";
|
||||
|
||||
|
@ -35,7 +35,8 @@ fn test_canon_ok() {
|
||||
)"#
|
||||
);
|
||||
|
||||
let executor = AirScriptExecutor::simple(TestRunParameters::from_init_peer_id(init_peer_id), &script).unwrap();
|
||||
let executor =
|
||||
AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), &script).unwrap();
|
||||
let result = executor.execute_one(init_peer_id).unwrap();
|
||||
let data = data_from_result(&result);
|
||||
|
||||
@ -110,7 +111,8 @@ fn test_canon_ok_multi() {
|
||||
)"#
|
||||
);
|
||||
|
||||
let executor = AirScriptExecutor::simple(TestRunParameters::from_init_peer_id(init_peer_id), &script).unwrap();
|
||||
let executor =
|
||||
AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), &script).unwrap();
|
||||
let _result1 = executor.execute_one(init_peer_id).unwrap();
|
||||
let _result2 = executor.execute_one(other_peer_id).unwrap();
|
||||
let result3 = executor.execute_one(init_peer_id).unwrap();
|
||||
|
@ -78,13 +78,9 @@ fn test_scalar_cid() {
|
||||
(call "{vm_peer_id}" ("service" "call2") [] y) ; ok="ipld"
|
||||
)"#
|
||||
);
|
||||
let executor = AirScriptExecutor::new(
|
||||
TestRunParameters::from_init_peer_id(vm_peer_id),
|
||||
vec![],
|
||||
std::iter::empty(),
|
||||
&annotated_air_script,
|
||||
)
|
||||
.unwrap();
|
||||
let executor =
|
||||
AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(vm_peer_id), &annotated_air_script)
|
||||
.unwrap();
|
||||
|
||||
let result = executor.execute_one(vm_peer_id).unwrap();
|
||||
let data = data_from_result(&result);
|
||||
@ -127,13 +123,9 @@ fn test_stream_cid() {
|
||||
(call "{vm_peer_id}" ("service" "call2") [] $x) ; ok="ipld"
|
||||
)"#
|
||||
);
|
||||
let executor = AirScriptExecutor::new(
|
||||
TestRunParameters::from_init_peer_id(vm_peer_id),
|
||||
vec![],
|
||||
std::iter::empty(),
|
||||
&annotated_air_script,
|
||||
)
|
||||
.unwrap();
|
||||
let executor =
|
||||
AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(vm_peer_id), &annotated_air_script)
|
||||
.unwrap();
|
||||
|
||||
let result = executor.execute_one(vm_peer_id).unwrap();
|
||||
let data = data_from_result(&result);
|
||||
@ -178,13 +170,9 @@ fn test_unused_cid() {
|
||||
(call "{vm_peer_id}" ("service" "call2") []) ; ok="ipld"
|
||||
)"#
|
||||
);
|
||||
let executor = AirScriptExecutor::new(
|
||||
TestRunParameters::from_init_peer_id(vm_peer_id),
|
||||
vec![],
|
||||
std::iter::empty(),
|
||||
&annotated_air_script,
|
||||
)
|
||||
.unwrap();
|
||||
let executor =
|
||||
AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(vm_peer_id), &annotated_air_script)
|
||||
.unwrap();
|
||||
|
||||
let result = executor.execute_one(vm_peer_id).unwrap();
|
||||
let data = data_from_result(&result);
|
||||
|
@ -32,7 +32,7 @@ fn length_functor_for_array_scalar() {
|
||||
"#;
|
||||
|
||||
let init_peer_id = "init_peer_id";
|
||||
let executor = AirScriptExecutor::simple(TestRunParameters::from_init_peer_id(init_peer_id), script)
|
||||
let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), script)
|
||||
.expect("invalid test AIR script");
|
||||
|
||||
let result = executor.execute_one(init_peer_id).unwrap();
|
||||
@ -56,7 +56,7 @@ fn length_functor_for_non_array_scalar() {
|
||||
"#);
|
||||
|
||||
let init_peer_id = "init_peer_id";
|
||||
let executor = AirScriptExecutor::simple(TestRunParameters::from_init_peer_id(init_peer_id), &script)
|
||||
let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), &script)
|
||||
.expect("invalid test AIR script");
|
||||
|
||||
let result = executor.execute_one(init_peer_id).unwrap();
|
||||
@ -81,7 +81,7 @@ fn length_functor_for_stream() {
|
||||
"#;
|
||||
|
||||
let init_peer_id = "init_peer_id";
|
||||
let executor = AirScriptExecutor::simple(TestRunParameters::from_init_peer_id(init_peer_id), script)
|
||||
let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), script)
|
||||
.expect("invalid test AIR script");
|
||||
|
||||
let result = executor.execute_one(init_peer_id).unwrap();
|
||||
@ -122,7 +122,7 @@ fn length_functor_for_empty_stream() {
|
||||
"#;
|
||||
|
||||
let init_peer_id = "init_peer_id";
|
||||
let executor = AirScriptExecutor::simple(TestRunParameters::from_init_peer_id(init_peer_id), script)
|
||||
let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), script)
|
||||
.expect("invalid test AIR script");
|
||||
|
||||
let result = executor.execute_one(init_peer_id).unwrap();
|
||||
@ -153,7 +153,7 @@ fn length_functor_for_canon_stream() {
|
||||
"#;
|
||||
|
||||
let init_peer_id = "init_peer_id";
|
||||
let executor = AirScriptExecutor::simple(TestRunParameters::from_init_peer_id(init_peer_id), script)
|
||||
let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), script)
|
||||
.expect("invalid test AIR script");
|
||||
|
||||
let result = executor.execute_one(init_peer_id).unwrap();
|
||||
@ -185,7 +185,7 @@ fn length_functor_for_empty_canon_stream() {
|
||||
"#;
|
||||
|
||||
let init_peer_id = "init_peer_id";
|
||||
let executor = AirScriptExecutor::simple(TestRunParameters::from_init_peer_id(init_peer_id), script)
|
||||
let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), script)
|
||||
.expect("invalid test AIR script");
|
||||
|
||||
let result = executor.execute_one(init_peer_id).unwrap();
|
||||
|
@ -27,7 +27,7 @@ fn test_signature_empty() {
|
||||
let init_peer_id = "init_peer_id";
|
||||
let (keypair, _) = derive_dummy_keypair(init_peer_id);
|
||||
|
||||
let exec = AirScriptExecutor::new(
|
||||
let exec = <AirScriptExecutor>::new(
|
||||
TestRunParameters::from_init_peer_id(init_peer_id),
|
||||
vec![],
|
||||
vec![PeerId::from(init_peer_id)].into_iter(),
|
||||
@ -54,7 +54,8 @@ fn test_signature_call_var() {
|
||||
(call "{init_peer_id}" ("" "") [] var) ; ok = "ok"
|
||||
"#
|
||||
);
|
||||
let exec = AirScriptExecutor::simple(TestRunParameters::from_init_peer_id(init_peer_id), &air_script).unwrap();
|
||||
let exec =
|
||||
AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), &air_script).unwrap();
|
||||
|
||||
let res = exec.execution_iter(init_peer_id).unwrap().last().unwrap();
|
||||
assert_eq!(res.ret_code, 0, "{:?}", res);
|
||||
@ -79,7 +80,8 @@ fn test_signature_call_stream() {
|
||||
(call "{init_peer_id}" ("" "") [] $var) ; ok = "ok"
|
||||
"#
|
||||
);
|
||||
let exec = AirScriptExecutor::simple(TestRunParameters::from_init_peer_id(init_peer_id), &air_script).unwrap();
|
||||
let exec =
|
||||
AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), &air_script).unwrap();
|
||||
|
||||
let res = exec.execution_iter(init_peer_id).unwrap().last().unwrap();
|
||||
assert_eq!(res.ret_code, 0, "{:?}", res);
|
||||
@ -106,7 +108,8 @@ fn test_signature_call_ununsed() {
|
||||
(call "{init_peer_id}" ("" "") []) ; ok = "ok"
|
||||
"#
|
||||
);
|
||||
let exec = AirScriptExecutor::simple(TestRunParameters::from_init_peer_id(init_peer_id), &air_script).unwrap();
|
||||
let exec =
|
||||
AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), &air_script).unwrap();
|
||||
|
||||
let res = exec.execution_iter(init_peer_id).unwrap().last().unwrap();
|
||||
assert_eq!(res.ret_code, 0, "{:?}", res);
|
||||
@ -137,7 +140,8 @@ fn test_signature_call_merged() {
|
||||
"#
|
||||
);
|
||||
|
||||
let exec = AirScriptExecutor::simple(TestRunParameters::from_init_peer_id(init_peer_id), &air_script).unwrap();
|
||||
let exec =
|
||||
AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), &air_script).unwrap();
|
||||
let _ = exec.execute_one(init_peer_id).unwrap();
|
||||
let _ = exec.execute_one(other_peer_id).unwrap();
|
||||
let res2 = exec.execute_one(init_peer_id).unwrap();
|
||||
@ -173,7 +177,8 @@ fn test_signature_call_double() {
|
||||
(next i))))
|
||||
"#
|
||||
);
|
||||
let exec = AirScriptExecutor::simple(TestRunParameters::from_init_peer_id(init_peer_id), &air_script).unwrap();
|
||||
let exec =
|
||||
AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), &air_script).unwrap();
|
||||
|
||||
let res = exec.execution_iter(init_peer_id).unwrap().last().unwrap();
|
||||
assert_eq!(res.ret_code, 0, "{:?}", res);
|
||||
@ -216,7 +221,8 @@ fn test_signature_canon_basic() {
|
||||
(canon "{init_peer_id}" $stream #canon)))
|
||||
"#
|
||||
);
|
||||
let exec = AirScriptExecutor::simple(TestRunParameters::from_init_peer_id(init_peer_id), &air_script).unwrap();
|
||||
let exec =
|
||||
AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), &air_script).unwrap();
|
||||
|
||||
let last_result = exec.execution_iter(init_peer_id).unwrap().last().unwrap();
|
||||
let last_data = data_from_result(&last_result);
|
||||
@ -293,7 +299,8 @@ fn test_signature_canon_merge() {
|
||||
(call "{init_peer_id}" ("" "") []))) ; ok = "ok"
|
||||
"#
|
||||
);
|
||||
let exec = AirScriptExecutor::simple(TestRunParameters::from_init_peer_id(init_peer_id), &air_script).unwrap();
|
||||
let exec =
|
||||
AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), &air_script).unwrap();
|
||||
|
||||
exec.execute_all(init_peer_id);
|
||||
exec.execute_one(other_peer_id);
|
||||
@ -371,7 +378,8 @@ fn test_signature_canon_result() {
|
||||
(canon "{init_peer_id}" $stream #canon)))
|
||||
"#
|
||||
);
|
||||
let exec = AirScriptExecutor::simple(TestRunParameters::from_init_peer_id(init_peer_id), &air_script).unwrap();
|
||||
let exec =
|
||||
AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), &air_script).unwrap();
|
||||
|
||||
let last_result = exec.execution_iter(init_peer_id).unwrap().last().unwrap();
|
||||
let last_data = data_from_result(&last_result);
|
||||
|
@ -82,7 +82,7 @@ fn merging_fold_iterations_extensively() {
|
||||
)
|
||||
"#;
|
||||
|
||||
let engine = AirScriptExecutor::new(
|
||||
let engine = <AirScriptExecutor>::new(
|
||||
TestRunParameters::from_init_peer_id("client"),
|
||||
vec![],
|
||||
vec!["relay", "p1", "p2", "p3"].into_iter().map(Into::into),
|
||||
@ -219,7 +219,7 @@ fn merging_fold_iterations_extensively_2() {
|
||||
)
|
||||
"#;
|
||||
|
||||
let engine = AirScriptExecutor::new(
|
||||
let engine = <AirScriptExecutor>::new(
|
||||
TestRunParameters::from_init_peer_id("client"),
|
||||
vec![],
|
||||
vec!["relay", "p1", "p2", "p3"].into_iter().map(Into::into),
|
||||
|
@ -26,7 +26,8 @@ fn call_result() {
|
||||
(call "B" ("service" "func") [] $s) ; ok = "some_data"
|
||||
(canon "B" $s #c))
|
||||
"#;
|
||||
let runner = AirScriptExecutor::simple(TestRunParameters::from_init_peer_id(init_peer_id), air_script).unwrap();
|
||||
let runner =
|
||||
AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), air_script).unwrap();
|
||||
|
||||
let result = runner.execute_one(init_peer_id).unwrap();
|
||||
assert_eq!(result.ret_code, 0, "{:?}", result.error_message);
|
||||
@ -78,7 +79,8 @@ fn call_result_iteration() {
|
||||
(next a))))
|
||||
(canon "A" $s #c))
|
||||
"#;
|
||||
let runner = AirScriptExecutor::simple(TestRunParameters::from_init_peer_id(init_peer_id), air_script).unwrap();
|
||||
let runner =
|
||||
AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), air_script).unwrap();
|
||||
|
||||
let result = runner.execute_one(init_peer_id).unwrap();
|
||||
assert_eq!(result.ret_code, 0, "{:?}", result.error_message);
|
||||
@ -143,7 +145,8 @@ fn literal() {
|
||||
(ap 1 $s)
|
||||
(canon "B" $s #c))
|
||||
"#;
|
||||
let runner = AirScriptExecutor::simple(TestRunParameters::from_init_peer_id(init_peer_id), air_script).unwrap();
|
||||
let runner =
|
||||
AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), air_script).unwrap();
|
||||
|
||||
let result = runner.execute_one(init_peer_id).unwrap();
|
||||
assert_eq!(result.ret_code, 0, "{:?}", result.error_message);
|
||||
@ -186,7 +189,8 @@ fn canon_in_canon() {
|
||||
(ap #c $s)
|
||||
(canon "B" $s #d)))
|
||||
"#;
|
||||
let runner = AirScriptExecutor::simple(TestRunParameters::from_init_peer_id(init_peer_id), air_script).unwrap();
|
||||
let runner =
|
||||
AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), air_script).unwrap();
|
||||
|
||||
let result = runner.execute_one(init_peer_id).unwrap();
|
||||
assert_eq!(result.ret_code, 0, "{:?}", result.error_message);
|
||||
@ -261,7 +265,8 @@ fn lambda_result_iteration() {
|
||||
(next y))))
|
||||
(canon "A" $s #c))
|
||||
"#;
|
||||
let runner = AirScriptExecutor::simple(TestRunParameters::from_init_peer_id(init_peer_id), air_script).unwrap();
|
||||
let runner =
|
||||
AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), air_script).unwrap();
|
||||
|
||||
let result = runner.execute_one(init_peer_id).unwrap();
|
||||
assert_eq!(result.ret_code, 0, "{:?}", result.error_message);
|
||||
|
@ -109,10 +109,8 @@ fn fold_stream_with_inner_call() {
|
||||
(call "init_peer_id" ("" "") [i] $s2) ; behaviour = tetraplet
|
||||
(next i))))
|
||||
"#;
|
||||
let executor = air_test_framework::AirScriptExecutor::new(
|
||||
let executor = air_test_framework::AirScriptExecutor::from_annotated(
|
||||
TestRunParameters::from_init_peer_id(init_peer_id),
|
||||
vec![],
|
||||
std::iter::empty(),
|
||||
&air_script,
|
||||
)
|
||||
.unwrap();
|
||||
@ -157,10 +155,8 @@ fn fold_canon_with_inner_call() {
|
||||
(call "init_peer_id" ("" "") [x] $s2) ; behaviour=tetraplet
|
||||
(next x)))))
|
||||
"#;
|
||||
let executor = air_test_framework::AirScriptExecutor::new(
|
||||
let executor = air_test_framework::AirScriptExecutor::from_annotated(
|
||||
TestRunParameters::from_init_peer_id(init_peer_id),
|
||||
vec![],
|
||||
std::iter::empty(),
|
||||
&air_script,
|
||||
)
|
||||
.unwrap();
|
||||
|
@ -40,8 +40,9 @@ fn par_ap_behaviour() {
|
||||
)
|
||||
"#);
|
||||
|
||||
let engine = air_test_framework::AirScriptExecutor::simple(TestRunParameters::new("client_id", 0, 1, ""), &script)
|
||||
.expect("invalid test executor config");
|
||||
let engine =
|
||||
air_test_framework::AirScriptExecutor::from_annotated(TestRunParameters::new("client_id", 0, 1, ""), &script)
|
||||
.expect("invalid test executor config");
|
||||
|
||||
let client_result_1 = engine.execute_one(client_id).unwrap();
|
||||
assert_next_pks!(&client_result_1.next_peer_pks, [relay_id, variable_setter_id]);
|
||||
|
@ -68,8 +68,8 @@ fn issue_211() {
|
||||
|
||||
let run_params = TestRunParameters::from_init_peer_id(peer_1_id);
|
||||
|
||||
let engine =
|
||||
air_test_framework::AirScriptExecutor::simple(run_params, &script).expect("invalid test executor config");
|
||||
let engine = air_test_framework::AirScriptExecutor::from_annotated(run_params, &script)
|
||||
.expect("invalid test executor config");
|
||||
|
||||
let result = engine.execute_one(peer_1_id).unwrap();
|
||||
|
||||
|
@ -68,7 +68,7 @@ fn issue_221() {
|
||||
)
|
||||
"#);
|
||||
|
||||
let executor = AirScriptExecutor::new(
|
||||
let executor = <AirScriptExecutor>::new(
|
||||
TestRunParameters::from_init_peer_id("set_variable_id"),
|
||||
vec![],
|
||||
vec![peer_1_id, peer_2_id].into_iter().map(Into::into),
|
||||
|
@ -33,7 +33,7 @@ fn issue_304() {
|
||||
"#;
|
||||
|
||||
let init_peer_id = "init_peer_id";
|
||||
let executor = AirScriptExecutor::simple(TestRunParameters::from_init_peer_id(init_peer_id), script)
|
||||
let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(init_peer_id), script)
|
||||
.expect("invalid test AIR script");
|
||||
|
||||
let res = executor.execute_one(init_peer_id).unwrap();
|
||||
|
@ -51,7 +51,7 @@ fn issue_356() {
|
||||
)
|
||||
"#;
|
||||
|
||||
let engine = AirScriptExecutor::new(
|
||||
let engine = <AirScriptExecutor>::new(
|
||||
TestRunParameters::from_init_peer_id("client"),
|
||||
vec![],
|
||||
vec!["p1", "p2", "p3"].into_iter().map(Into::into),
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
{"version":"0.7.0","interpreter_version":"0.39.0","trace":[{"call":{"executed":{"scalar":"bagaaierac7ero3zlwycmoidfsejn2gjdk7kx7lrerhajn6lqm7dhcd2dfxla"}}},{"call":{"sent_by":{"PeerId":"12D3KooWPeUMWXdtEveZonecW8hhFdt4wfT4AyYpp4yrFGti7w5m"}}}],"streams":{},"r_streams":{},"lcid":1,"cid_info":{"value_store":{"bagaaiera3cpk4hkdc462bup4ab7i6dnl6rs2wludga6f666i5wzwt6nv7noa":["val0","val1","val2","val3","val4","val5","val6","val7","val8","val9"]},"tetraplet_store":{"bagaaierazalcvolvfdovxuklvznoyrhn5gg4drlbbplrf7rrwullfw2zjd7q":{"peer_pk":"12D3KooWPeUMWXdtEveZonecW8hhFdt4wfT4AyYpp4yrFGti7w5m","service_id":"..0","function_name":"init","json_path":""}},"canon_element_store":{},"canon_result_store":{},"service_result_store":{"bagaaierac7ero3zlwycmoidfsejn2gjdk7kx7lrerhajn6lqm7dhcd2dfxla":{"value_cid":"bagaaiera3cpk4hkdc462bup4ab7i6dnl6rs2wludga6f666i5wzwt6nv7noa","argument_hash":"bagaaieraj5j43immfovaya2uxnpzupwl4xwrfk2nryi3vbz4f4irmeqcxfcq","tetraplet_cid":"bagaaierazalcvolvfdovxuklvznoyrhn5gg4drlbbplrf7rrwullfw2zjd7q"}}},"signatures":{"1Eq7BmQ4B42P5Pu9BsXxMUqoETLQR9HULrUcpsHjpDzMq":"163VbjpvwdXKcCN7tQb9XZACcf4md1uze1WgP1pzXoUSFJw1vmwNBc2YX88xzmBiQVLBKW3iEBAhQujPTeWrJ1twq"}}
|
||||
{"version":"0.8.0","interpreter_version":"0.40.0","trace":[{"call":{"executed":{"scalar":"bagaaierac7ero3zlwycmoidfsejn2gjdk7kx7lrerhajn6lqm7dhcd2dfxla"}}},{"call":{"sent_by":{"PeerId":"12D3KooWPeUMWXdtEveZonecW8hhFdt4wfT4AyYpp4yrFGti7w5m"}}}],"streams":{},"r_streams":{},"lcid":1,"cid_info":{"value_store":{"bagaaiera3cpk4hkdc462bup4ab7i6dnl6rs2wludga6f666i5wzwt6nv7noa":["val0","val1","val2","val3","val4","val5","val6","val7","val8","val9"]},"tetraplet_store":{"bagaaierazalcvolvfdovxuklvznoyrhn5gg4drlbbplrf7rrwullfw2zjd7q":{"peer_pk":"12D3KooWPeUMWXdtEveZonecW8hhFdt4wfT4AyYpp4yrFGti7w5m","service_id":"..0","function_name":"init","json_path":""}},"canon_element_store":{},"canon_result_store":{},"service_result_store":{"bagaaierac7ero3zlwycmoidfsejn2gjdk7kx7lrerhajn6lqm7dhcd2dfxla":{"value_cid":"bagaaiera3cpk4hkdc462bup4ab7i6dnl6rs2wludga6f666i5wzwt6nv7noa","argument_hash":"bagaaieraj5j43immfovaya2uxnpzupwl4xwrfk2nryi3vbz4f4irmeqcxfcq","tetraplet_cid":"bagaaierazalcvolvfdovxuklvznoyrhn5gg4drlbbplrf7rrwullfw2zjd7q"}}},"signatures":{"1Eq7BmQ4B42P5Pu9BsXxMUqoETLQR9HULrUcpsHjpDzMq":"163VbjpvwdXKcCN7tQb9XZACcf4md1uze1WgP1pzXoUSFJw1vmwNBc2YX88xzmBiQVLBKW3iEBAhQujPTeWrJ1twq"}}
|
||||
|
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
{"version":"0.7.0","interpreter_version":"0.39.0","trace":[{"call":{"executed":{"scalar":"bagaaiera6ekp5lr72eqti3rsxz2oikgzhaluu6hzcjc5uybasul2czpxuuda"}}},{"call":{"sent_by":{"PeerId":"12D3KooWPeUMWXdtEveZonecW8hhFdt4wfT4AyYpp4yrFGti7w5m"}}}],"streams":{},"r_streams":{},"lcid":1,"cid_info":{"value_store":{"bagaaierardh4fnqkydva35bnwiolv43gej6pwwbt75zacvktcbv3x55tyaza":["val0","val1","val2","val3","val4","val5","val6","val7","val8","val9","val10","val11","val12","val13","val14","val15","val16","val17","val18","val19","val20","val21","val22","val23","val24","val25","val26","val27","val28","val29","val30","val31","val32","val33","val34","val35","val36","val37","val38","val39","val40","val41","val42","val43","val44","val45","val46","val47","val48","val49"]},"tetraplet_store":{"bagaaierazalcvolvfdovxuklvznoyrhn5gg4drlbbplrf7rrwullfw2zjd7q":{"peer_pk":"12D3KooWPeUMWXdtEveZonecW8hhFdt4wfT4AyYpp4yrFGti7w5m","service_id":"..0","function_name":"init","json_path":""}},"canon_element_store":{},"canon_result_store":{},"service_result_store":{"bagaaiera6ekp5lr72eqti3rsxz2oikgzhaluu6hzcjc5uybasul2czpxuuda":{"value_cid":"bagaaierardh4fnqkydva35bnwiolv43gej6pwwbt75zacvktcbv3x55tyaza","argument_hash":"bagaaieraj5j43immfovaya2uxnpzupwl4xwrfk2nryi3vbz4f4irmeqcxfcq","tetraplet_cid":"bagaaierazalcvolvfdovxuklvznoyrhn5gg4drlbbplrf7rrwullfw2zjd7q"}}},"signatures":{"1Eq7BmQ4B42P5Pu9BsXxMUqoETLQR9HULrUcpsHjpDzMq":"13vWGqDZQHGDm5dqJZqDD8hkGq9bVPs2Y1dq9yDwj6WVDWccg4YhGFXGXVriWN4ESAMDu4Do6nBxi223JxWsbPytD"}}
|
||||
{"version":"0.8.0","interpreter_version":"0.40.0","trace":[{"call":{"executed":{"scalar":"bagaaiera6ekp5lr72eqti3rsxz2oikgzhaluu6hzcjc5uybasul2czpxuuda"}}},{"call":{"sent_by":{"PeerId":"12D3KooWPeUMWXdtEveZonecW8hhFdt4wfT4AyYpp4yrFGti7w5m"}}}],"streams":{},"r_streams":{},"lcid":1,"cid_info":{"value_store":{"bagaaierardh4fnqkydva35bnwiolv43gej6pwwbt75zacvktcbv3x55tyaza":["val0","val1","val2","val3","val4","val5","val6","val7","val8","val9","val10","val11","val12","val13","val14","val15","val16","val17","val18","val19","val20","val21","val22","val23","val24","val25","val26","val27","val28","val29","val30","val31","val32","val33","val34","val35","val36","val37","val38","val39","val40","val41","val42","val43","val44","val45","val46","val47","val48","val49"]},"tetraplet_store":{"bagaaierazalcvolvfdovxuklvznoyrhn5gg4drlbbplrf7rrwullfw2zjd7q":{"peer_pk":"12D3KooWPeUMWXdtEveZonecW8hhFdt4wfT4AyYpp4yrFGti7w5m","service_id":"..0","function_name":"init","json_path":""}},"canon_element_store":{},"canon_result_store":{},"service_result_store":{"bagaaiera6ekp5lr72eqti3rsxz2oikgzhaluu6hzcjc5uybasul2czpxuuda":{"value_cid":"bagaaierardh4fnqkydva35bnwiolv43gej6pwwbt75zacvktcbv3x55tyaza","argument_hash":"bagaaieraj5j43immfovaya2uxnpzupwl4xwrfk2nryi3vbz4f4irmeqcxfcq","tetraplet_cid":"bagaaierazalcvolvfdovxuklvznoyrhn5gg4drlbbplrf7rrwullfw2zjd7q"}}},"signatures":{"1Eq7BmQ4B42P5Pu9BsXxMUqoETLQR9HULrUcpsHjpDzMq":"13vWGqDZQHGDm5dqJZqDD8hkGq9bVPs2Y1dq9yDwj6WVDWccg4YhGFXGXVriWN4ESAMDu4Do6nBxi223JxWsbPytD"}}
|
||||
|
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
{"version":"0.7.0","interpreter_version":"0.39.0","trace":[{"call":{"executed":{"scalar":"bagaaieran57a2jmc23bun7cvrungjal2vf4tht5torcwfl6exgno2ow4ynma"}}},{"call":{"sent_by":{"PeerId":"12D3KooWPeUMWXdtEveZonecW8hhFdt4wfT4AyYpp4yrFGti7w5m"}}}],"streams":{},"r_streams":{},"lcid":1,"cid_info":{"value_store":{"bagaaieramm3kz5cu4bw4rx45bqdvunoc766s5tiqq57kedlgohklidri22wa":["12D3KooWQ8ZKGDbSPp33JLaum9bQ3afhLinWr8vdfKHaorTdBeTw","12D3KooWKdFJFg5FPo1ygEJd5uMf6dzpaMC7HqLgvirYnSjmBxcZ","12D3KooWRwuE9mscEw6aZeWoTtkFazxUsLqmmkvecxF1yTNuoskn","12D3KooWShXhXkEaUVvXAJVVV5SLQc5zPJv1hdwcMxkVynaDRGCy","12D3KooWRVTWjeg8GDY5zYqM5owEcvRu9zEqDsd7WM8fcr2Vd38v","12D3KooWJp1ZVpuZzDpSJtKjuyzGYzEAbtDhUhxm9PM1LbcXxVbo","12D3KooWNbiW2fn1nwW1PcyMHkmHU9LqTqT3a9DURmJPZtuS5b3H","12D3KooWMc1jRhKBCXoREqZHWfrNqDCY9PmmxtDh5vNPU3umMDsb","12D3KooWCay13DtvvYhyJYas3QibP2NEuKHQMa6ssa49Z7wkyfpt","12D3KooWFbsZYLjRHyzWzeR9QqT5aFqweZdWLfZv1fqxfGWLZhNu","12D3KooWQU52GYFBv5uoDCsVMN8RCAHrbysXdErHX89uBZBmhfey","12D3KooWPHLYKqP2ZgXaW21dUZSe8KjDF9LuEtm798FhsAVmFVXc","12D3KooWEmryJZH7YRHDX8FPfLL4gnaySunmigmWCXwpSfcN4bPD","12D3KooWFuQ7u5HJ13d49RGbABqzGJYdXdNPMnEFMrbt81ukUgJT"]},"tetraplet_store":{"bagaaierazalcvolvfdovxuklvznoyrhn5gg4drlbbplrf7rrwullfw2zjd7q":{"peer_pk":"12D3KooWPeUMWXdtEveZonecW8hhFdt4wfT4AyYpp4yrFGti7w5m","service_id":"..0","function_name":"init","json_path":""}},"canon_element_store":{},"canon_result_store":{},"service_result_store":{"bagaaieran57a2jmc23bun7cvrungjal2vf4tht5torcwfl6exgno2ow4ynma":{"value_cid":"bagaaieramm3kz5cu4bw4rx45bqdvunoc766s5tiqq57kedlgohklidri22wa","argument_hash":"bagaaieraj5j43immfovaya2uxnpzupwl4xwrfk2nryi3vbz4f4irmeqcxfcq","tetraplet_cid":"bagaaierazalcvolvfdovxuklvznoyrhn5gg4drlbbplrf7rrwullfw2zjd7q"}}},"signatures":{"1Eq7BmQ4B42P5Pu9BsXxMUqoETLQR9HULrUcpsHjpDzMq":"1zhzoi14gLACPYcePf64bun2VwayjXP4b9THmazJ8NLx2vhe1zXeVZx1T2MJY2Ve78JhQZeaniBGWgXn6EEJ8y1R"}}
|
||||
{"version":"0.8.0","interpreter_version":"0.40.0","trace":[{"call":{"executed":{"scalar":"bagaaieran57a2jmc23bun7cvrungjal2vf4tht5torcwfl6exgno2ow4ynma"}}},{"call":{"sent_by":{"PeerId":"12D3KooWPeUMWXdtEveZonecW8hhFdt4wfT4AyYpp4yrFGti7w5m"}}}],"streams":{},"r_streams":{},"lcid":1,"cid_info":{"value_store":{"bagaaieramm3kz5cu4bw4rx45bqdvunoc766s5tiqq57kedlgohklidri22wa":["12D3KooWQ8ZKGDbSPp33JLaum9bQ3afhLinWr8vdfKHaorTdBeTw","12D3KooWKdFJFg5FPo1ygEJd5uMf6dzpaMC7HqLgvirYnSjmBxcZ","12D3KooWRwuE9mscEw6aZeWoTtkFazxUsLqmmkvecxF1yTNuoskn","12D3KooWShXhXkEaUVvXAJVVV5SLQc5zPJv1hdwcMxkVynaDRGCy","12D3KooWRVTWjeg8GDY5zYqM5owEcvRu9zEqDsd7WM8fcr2Vd38v","12D3KooWJp1ZVpuZzDpSJtKjuyzGYzEAbtDhUhxm9PM1LbcXxVbo","12D3KooWNbiW2fn1nwW1PcyMHkmHU9LqTqT3a9DURmJPZtuS5b3H","12D3KooWMc1jRhKBCXoREqZHWfrNqDCY9PmmxtDh5vNPU3umMDsb","12D3KooWCay13DtvvYhyJYas3QibP2NEuKHQMa6ssa49Z7wkyfpt","12D3KooWFbsZYLjRHyzWzeR9QqT5aFqweZdWLfZv1fqxfGWLZhNu","12D3KooWQU52GYFBv5uoDCsVMN8RCAHrbysXdErHX89uBZBmhfey","12D3KooWPHLYKqP2ZgXaW21dUZSe8KjDF9LuEtm798FhsAVmFVXc","12D3KooWEmryJZH7YRHDX8FPfLL4gnaySunmigmWCXwpSfcN4bPD","12D3KooWFuQ7u5HJ13d49RGbABqzGJYdXdNPMnEFMrbt81ukUgJT"]},"tetraplet_store":{"bagaaierazalcvolvfdovxuklvznoyrhn5gg4drlbbplrf7rrwullfw2zjd7q":{"peer_pk":"12D3KooWPeUMWXdtEveZonecW8hhFdt4wfT4AyYpp4yrFGti7w5m","service_id":"..0","function_name":"init","json_path":""}},"canon_element_store":{},"canon_result_store":{},"service_result_store":{"bagaaieran57a2jmc23bun7cvrungjal2vf4tht5torcwfl6exgno2ow4ynma":{"value_cid":"bagaaieramm3kz5cu4bw4rx45bqdvunoc766s5tiqq57kedlgohklidri22wa","argument_hash":"bagaaieraj5j43immfovaya2uxnpzupwl4xwrfk2nryi3vbz4f4irmeqcxfcq","tetraplet_cid":"bagaaierazalcvolvfdovxuklvznoyrhn5gg4drlbbplrf7rrwullfw2zjd7q"}}},"signatures":{"1Eq7BmQ4B42P5Pu9BsXxMUqoETLQR9HULrUcpsHjpDzMq":"1zhzoi14gLACPYcePf64bun2VwayjXP4b9THmazJ8NLx2vhe1zXeVZx1T2MJY2Ve78JhQZeaniBGWgXn6EEJ8y1R"}}
|
||||
|
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
{"version":"0.7.0","interpreter_version":"0.39.0","trace":[{"call":{"executed":{"scalar":"bagaaieralvgoep7cg4zpsc7zb57xmf3gw5amoj53qgk4i3m5yi4uc2kpmjva"}}},{"call":{"sent_by":{"PeerId":"12D3KooWPeUMWXdtEveZonecW8hhFdt4wfT4AyYpp4yrFGti7w5m"}}}],"streams":{},"r_streams":{},"lcid":1,"cid_info":{"value_store":{"bagaaieraoft5qanrf4ofex3agido463fnnr4cdmiy2pjepl5ajdx4x5sawgq":["12D3KooWQ8ZKGDbSPp33JLaum9bQ3afhLinWr8vdfKHaorTdBeTw","12D3KooWKdFJFg5FPo1ygEJd5uMf6dzpaMC7HqLgvirYnSjmBxcZ","12D3KooWRwuE9mscEw6aZeWoTtkFazxUsLqmmkvecxF1yTNuoskn","12D3KooWShXhXkEaUVvXAJVVV5SLQc5zPJv1hdwcMxkVynaDRGCy","12D3KooWRVTWjeg8GDY5zYqM5owEcvRu9zEqDsd7WM8fcr2Vd38v"]},"tetraplet_store":{"bagaaierazalcvolvfdovxuklvznoyrhn5gg4drlbbplrf7rrwullfw2zjd7q":{"peer_pk":"12D3KooWPeUMWXdtEveZonecW8hhFdt4wfT4AyYpp4yrFGti7w5m","service_id":"..0","function_name":"init","json_path":""}},"canon_element_store":{},"canon_result_store":{},"service_result_store":{"bagaaieralvgoep7cg4zpsc7zb57xmf3gw5amoj53qgk4i3m5yi4uc2kpmjva":{"value_cid":"bagaaieraoft5qanrf4ofex3agido463fnnr4cdmiy2pjepl5ajdx4x5sawgq","argument_hash":"bagaaieraj5j43immfovaya2uxnpzupwl4xwrfk2nryi3vbz4f4irmeqcxfcq","tetraplet_cid":"bagaaierazalcvolvfdovxuklvznoyrhn5gg4drlbbplrf7rrwullfw2zjd7q"}}},"signatures":{"1Eq7BmQ4B42P5Pu9BsXxMUqoETLQR9HULrUcpsHjpDzMq":"13S3GJqcvVxRh61JNwxnmWP7rcfwtNedfew328pGaG2JzrZpj7QFUvwgMTZijymbHeBV5oym19nNRUhkqtmVh7Piv"}}
|
||||
{"version":"0.8.0","interpreter_version":"0.40.0","trace":[{"call":{"executed":{"scalar":"bagaaieralvgoep7cg4zpsc7zb57xmf3gw5amoj53qgk4i3m5yi4uc2kpmjva"}}},{"call":{"sent_by":{"PeerId":"12D3KooWPeUMWXdtEveZonecW8hhFdt4wfT4AyYpp4yrFGti7w5m"}}}],"streams":{},"r_streams":{},"lcid":1,"cid_info":{"value_store":{"bagaaieraoft5qanrf4ofex3agido463fnnr4cdmiy2pjepl5ajdx4x5sawgq":["12D3KooWQ8ZKGDbSPp33JLaum9bQ3afhLinWr8vdfKHaorTdBeTw","12D3KooWKdFJFg5FPo1ygEJd5uMf6dzpaMC7HqLgvirYnSjmBxcZ","12D3KooWRwuE9mscEw6aZeWoTtkFazxUsLqmmkvecxF1yTNuoskn","12D3KooWShXhXkEaUVvXAJVVV5SLQc5zPJv1hdwcMxkVynaDRGCy","12D3KooWRVTWjeg8GDY5zYqM5owEcvRu9zEqDsd7WM8fcr2Vd38v"]},"tetraplet_store":{"bagaaierazalcvolvfdovxuklvznoyrhn5gg4drlbbplrf7rrwullfw2zjd7q":{"peer_pk":"12D3KooWPeUMWXdtEveZonecW8hhFdt4wfT4AyYpp4yrFGti7w5m","service_id":"..0","function_name":"init","json_path":""}},"canon_element_store":{},"canon_result_store":{},"service_result_store":{"bagaaieralvgoep7cg4zpsc7zb57xmf3gw5amoj53qgk4i3m5yi4uc2kpmjva":{"value_cid":"bagaaieraoft5qanrf4ofex3agido463fnnr4cdmiy2pjepl5ajdx4x5sawgq","argument_hash":"bagaaieraj5j43immfovaya2uxnpzupwl4xwrfk2nryi3vbz4f4irmeqcxfcq","tetraplet_cid":"bagaaierazalcvolvfdovxuklvznoyrhn5gg4drlbbplrf7rrwullfw2zjd7q"}}},"signatures":{"1Eq7BmQ4B42P5Pu9BsXxMUqoETLQR9HULrUcpsHjpDzMq":"13S3GJqcvVxRh61JNwxnmWP7rcfwtNedfew328pGaG2JzrZpj7QFUvwgMTZijymbHeBV5oym19nNRUhkqtmVh7Piv"}}
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -31,10 +31,8 @@ pub mod executed_state;
|
||||
pub mod key_utils;
|
||||
pub mod test_runner;
|
||||
|
||||
#[cfg(feature = "test_with_native_code")]
|
||||
mod native_test_runner;
|
||||
#[cfg(not(feature = "test_with_native_code"))]
|
||||
mod wasm_test_runner;
|
||||
pub mod native_test_runner;
|
||||
pub mod wasm_test_runner;
|
||||
|
||||
pub use air::interpreter_data::*;
|
||||
use air::ExecutionCidState;
|
||||
|
@ -16,9 +16,13 @@
|
||||
|
||||
use crate::key_utils::derive_dummy_keypair;
|
||||
#[cfg(feature = "test_with_native_code")]
|
||||
use crate::native_test_runner::NativeAirRunner as AirRunnerImpl;
|
||||
pub use crate::native_test_runner::NativeAirRunner as DefaultAirRunner;
|
||||
#[cfg(not(feature = "test_with_native_code"))]
|
||||
use crate::wasm_test_runner::WasmAirRunner as AirRunnerImpl;
|
||||
pub use crate::wasm_test_runner::WasmAirRunner as DefaultAirRunner;
|
||||
|
||||
pub use crate::native_test_runner::NativeAirRunner;
|
||||
pub use crate::wasm_test_runner::ReleaseWasmAirRunner;
|
||||
pub use crate::wasm_test_runner::WasmAirRunner;
|
||||
|
||||
use super::CallServiceClosure;
|
||||
|
||||
@ -47,7 +51,7 @@ pub trait AirRunner {
|
||||
) -> Result<RawAVMOutcome, Box<dyn std::error::Error>>;
|
||||
}
|
||||
|
||||
pub struct TestRunner<R = AirRunnerImpl> {
|
||||
pub struct TestRunner<R = DefaultAirRunner> {
|
||||
pub runner: R,
|
||||
call_service: CallServiceClosure,
|
||||
keypair: KeyPair,
|
||||
@ -155,11 +159,18 @@ pub fn create_avm(
|
||||
call_service: CallServiceClosure,
|
||||
current_peer_id: impl Into<String>,
|
||||
) -> TestRunner {
|
||||
create_custom_avm(call_service, current_peer_id)
|
||||
}
|
||||
|
||||
pub fn create_custom_avm<R: AirRunner>(
|
||||
call_service: CallServiceClosure,
|
||||
current_peer_id: impl Into<String>,
|
||||
) -> TestRunner<R> {
|
||||
let current_peer_id = current_peer_id.into();
|
||||
|
||||
let (keypair, _) = derive_dummy_keypair(¤t_peer_id);
|
||||
|
||||
let runner = AirRunnerImpl::new(current_peer_id);
|
||||
let runner = R::new(current_peer_id);
|
||||
|
||||
TestRunner {
|
||||
runner,
|
||||
@ -212,15 +223,13 @@ mod tests {
|
||||
use crate::call_services::{set_variables_call_service, VariableOptionSource};
|
||||
|
||||
use avm_interface::CallRequestParams;
|
||||
use fstrings::f;
|
||||
use fstrings::format_args_f;
|
||||
use serde_json::json;
|
||||
|
||||
#[test]
|
||||
fn test_override_current_peer_id() {
|
||||
let spell_id = "spell_id";
|
||||
let host_peer_id = "host_peer_id";
|
||||
let script = f!(r#"(call "{}" ("service" "func") [])"#, spell_id);
|
||||
let script = format!(r#"(call "{spell_id}" ("service" "func") [])"#);
|
||||
|
||||
let variables = maplit::hashmap! {
|
||||
"func".to_owned() => json!("success"),
|
||||
@ -230,7 +239,7 @@ mod tests {
|
||||
let keypair = KeyPair::generate(key_format);
|
||||
let keypair2 = KeyPair::generate(key_format);
|
||||
|
||||
let mut client = create_avm(
|
||||
let mut client = create_custom_avm::<NativeAirRunner>(
|
||||
set_variables_call_service(variables, VariableOptionSource::FunctionName),
|
||||
host_peer_id,
|
||||
);
|
||||
|
@ -25,6 +25,7 @@ use std::path::PathBuf;
|
||||
// 10 Mb
|
||||
const AVM_MAX_HEAP_SIZE: u64 = 10 * 1024 * 1024;
|
||||
const AIR_WASM_PATH: &str = "../target/wasm32-wasi/debug/air_interpreter_server.wasm";
|
||||
const RELEASE_AIR_WASM_PATH: &str = "../target/wasm32-wasi/release/air_interpreter_server.wasm";
|
||||
|
||||
pub struct WasmAirRunner {
|
||||
current_peer_id: String,
|
||||
@ -92,3 +93,58 @@ impl AirRunner for WasmAirRunner {
|
||||
)?)
|
||||
}
|
||||
}
|
||||
|
||||
/// WASM runner that runs release build form benchmarking.
|
||||
pub struct ReleaseWasmAirRunner {
|
||||
current_peer_id: String,
|
||||
// these instances are not cached, as benches create relatively small number of instances
|
||||
runner: AVMRunner,
|
||||
}
|
||||
|
||||
impl AirRunner for ReleaseWasmAirRunner {
|
||||
fn new(current_peer_id: impl Into<String>) -> Self {
|
||||
let logging_mask = i32::MAX;
|
||||
|
||||
let runner = AVMRunner::new(
|
||||
PathBuf::from(RELEASE_AIR_WASM_PATH),
|
||||
Some(AVM_MAX_HEAP_SIZE),
|
||||
logging_mask,
|
||||
)
|
||||
.expect("vm should be created");
|
||||
|
||||
Self {
|
||||
current_peer_id: current_peer_id.into(),
|
||||
runner,
|
||||
}
|
||||
}
|
||||
|
||||
fn call(
|
||||
&mut self,
|
||||
air: impl Into<String>,
|
||||
prev_data: impl Into<Vec<u8>>,
|
||||
data: impl Into<Vec<u8>>,
|
||||
init_peer_id: impl Into<String>,
|
||||
timestamp: u64,
|
||||
ttl: u32,
|
||||
override_current_peer_id: Option<String>,
|
||||
call_results: avm_server::CallResults,
|
||||
keypair: &KeyPair,
|
||||
particle_id: String,
|
||||
) -> Result<RawAVMOutcome, Box<dyn std::error::Error>> {
|
||||
let current_peer_id =
|
||||
override_current_peer_id.unwrap_or_else(|| self.current_peer_id.clone());
|
||||
|
||||
Ok(self.runner.call(
|
||||
air,
|
||||
prev_data,
|
||||
data,
|
||||
init_peer_id,
|
||||
timestamp,
|
||||
ttl,
|
||||
current_peer_id,
|
||||
call_results,
|
||||
keypair,
|
||||
particle_id,
|
||||
)?)
|
||||
}
|
||||
}
|
||||
|
@ -26,6 +26,3 @@ serde_json = "1.0.95"
|
||||
[dev-dependencies]
|
||||
maplit = "1.0.2"
|
||||
pretty_assertions = "1.3.0"
|
||||
|
||||
# We do not want to depend on wasm binary path
|
||||
air-test-utils = { version = "0.6.0", path = "../air-lib/test-utils", features = ["test_with_native_code"] }
|
||||
|
@ -23,7 +23,7 @@ use crate::{
|
||||
};
|
||||
|
||||
use air_test_utils::{
|
||||
test_runner::{create_avm, TestRunParameters, TestRunner},
|
||||
test_runner::{create_custom_avm, AirRunner, DefaultAirRunner, TestRunParameters, TestRunner},
|
||||
RawAVMOutcome,
|
||||
};
|
||||
|
||||
@ -57,16 +57,16 @@ impl Borrow<str> for PeerId {
|
||||
|
||||
pub type Data = Vec<u8>;
|
||||
|
||||
pub struct Peer {
|
||||
pub struct Peer<R> {
|
||||
pub(crate) peer_id: PeerId,
|
||||
runner: TestRunner,
|
||||
runner: TestRunner<R>,
|
||||
}
|
||||
|
||||
impl Peer {
|
||||
impl<R: AirRunner> Peer<R> {
|
||||
pub fn new(peer_id: impl Into<PeerId>, services: Rc<[MarineServiceHandle]>) -> Self {
|
||||
let peer_id = Into::into(peer_id);
|
||||
let call_service = services_to_call_service_closure(services);
|
||||
let runner = create_avm(call_service, &*peer_id.0);
|
||||
let runner = create_custom_avm(call_service, &*peer_id.0);
|
||||
|
||||
Self { peer_id, runner }
|
||||
}
|
||||
@ -87,7 +87,7 @@ impl Peer {
|
||||
}
|
||||
}
|
||||
|
||||
impl std::fmt::Debug for Peer {
|
||||
impl<R: AirRunner> std::fmt::Debug for Peer<R> {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
f.debug_struct("Peer")
|
||||
.field("peer_id", &self.peer_id)
|
||||
@ -96,16 +96,21 @@ impl std::fmt::Debug for Peer {
|
||||
}
|
||||
}
|
||||
|
||||
pub struct Network {
|
||||
peers: RefCell<HashMap<PeerId, Rc<RefCell<PeerEnv>>>>,
|
||||
pub struct Network<R = DefaultAirRunner> {
|
||||
peers: RefCell<HashMap<PeerId, Rc<RefCell<PeerEnv<R>>>>>,
|
||||
services: Rc<NetworkServices>,
|
||||
}
|
||||
|
||||
impl Network {
|
||||
// it is implemented only for the default runner for compatibility reasons
|
||||
// Rust fails to deduce type for `Network::empty()` without
|
||||
// extencive test code changes
|
||||
impl Network<DefaultAirRunner> {
|
||||
pub fn empty() -> Rc<Self> {
|
||||
Self::new(std::iter::empty::<PeerId>(), vec![])
|
||||
}
|
||||
}
|
||||
|
||||
impl<R: AirRunner> Network<R> {
|
||||
pub fn new(
|
||||
peers: impl Iterator<Item = impl Into<PeerId>>,
|
||||
common_services: Vec<MarineServiceHandle>,
|
||||
@ -120,8 +125,8 @@ impl Network {
|
||||
network
|
||||
}
|
||||
|
||||
pub fn from_peers(nodes: Vec<Peer>) -> Rc<Self> {
|
||||
let network = Self::empty();
|
||||
pub fn from_peers(nodes: Vec<Peer<R>>) -> Rc<Self> {
|
||||
let network = Self::new(std::iter::empty::<PeerId>(), vec![]);
|
||||
let neighborhood: PeerSet = nodes.iter().map(|peer| peer.peer_id.clone()).collect();
|
||||
for peer in nodes {
|
||||
network.add_peer_env(peer, neighborhood.iter().cloned());
|
||||
@ -131,7 +136,7 @@ impl Network {
|
||||
|
||||
pub fn add_peer_env(
|
||||
self: &Rc<Self>,
|
||||
peer: Peer,
|
||||
peer: Peer<R>,
|
||||
neighborhood: impl IntoIterator<Item = impl Into<PeerId>>,
|
||||
) {
|
||||
let peer_id = peer.peer_id.clone();
|
||||
@ -153,13 +158,13 @@ impl Network {
|
||||
}
|
||||
|
||||
/// Add a peer with default neighborhood.
|
||||
pub fn add_peer(self: &Rc<Self>, peer: Peer) {
|
||||
pub fn add_peer(self: &Rc<Self>, peer: Peer<R>) {
|
||||
let peer_id = peer.peer_id.clone();
|
||||
let peer_env = PeerEnv::new(peer, self);
|
||||
self.insert_peer_env_entry(peer_id, peer_env);
|
||||
}
|
||||
|
||||
fn insert_peer_env_entry(&self, peer_id: PeerId, peer_env: PeerEnv) {
|
||||
fn insert_peer_env_entry(&self, peer_id: PeerId, peer_env: PeerEnv<R>) {
|
||||
let mut peers_ref = self.peers.borrow_mut();
|
||||
let peer_env = Rc::new(peer_env.into());
|
||||
// It will be simplified with entry_insert stabilization
|
||||
@ -222,7 +227,7 @@ impl Network {
|
||||
|
||||
// TODO there is some kind of unsymmetry between these methods and the fail/unfail:
|
||||
// the latters panic on unknown peer; perhaps, it's OK
|
||||
pub fn get_peer_env<Id>(&self, peer_id: &Id) -> Option<Rc<RefCell<PeerEnv>>>
|
||||
pub fn get_peer_env<Id>(&self, peer_id: &Id) -> Option<Rc<RefCell<PeerEnv<R>>>>
|
||||
where
|
||||
PeerId: Borrow<Id>,
|
||||
Id: Hash + Eq + ?Sized,
|
||||
|
@ -17,7 +17,7 @@
|
||||
use super::{Network, Peer, PeerId};
|
||||
use crate::queue::ExecutionQueue;
|
||||
|
||||
use air_test_utils::test_runner::TestRunParameters;
|
||||
use air_test_utils::test_runner::{AirRunner, DefaultAirRunner, TestRunParameters};
|
||||
|
||||
use std::{
|
||||
borrow::Borrow,
|
||||
@ -39,15 +39,15 @@ pub enum AlterState {
|
||||
|
||||
/// Neighbors of particular node, including set of nodes unreachable from this one (but they might be
|
||||
/// reachable from others).
|
||||
pub struct Neighborhood {
|
||||
pub struct Neighborhood<R = DefaultAirRunner> {
|
||||
// the value is true is link from this peer to neighbor is failng
|
||||
network: Weak<Network>,
|
||||
network: Weak<Network<R>>,
|
||||
unreachable: HashSet<PeerId>,
|
||||
altered: HashMap<PeerId, AlterState>,
|
||||
}
|
||||
|
||||
impl Neighborhood {
|
||||
pub fn new(network: &Rc<Network>) -> Self {
|
||||
impl<R: AirRunner> Neighborhood<R> {
|
||||
pub fn new(network: &Rc<Network<R>>) -> Self {
|
||||
Self {
|
||||
network: Rc::downgrade(network),
|
||||
unreachable: <_>::default(),
|
||||
@ -109,7 +109,7 @@ impl Neighborhood {
|
||||
}
|
||||
}
|
||||
|
||||
impl std::iter::IntoIterator for &Neighborhood {
|
||||
impl<R: AirRunner> std::iter::IntoIterator for &Neighborhood<R> {
|
||||
type Item = PeerId;
|
||||
|
||||
type IntoIter = std::collections::hash_set::IntoIter<PeerId>;
|
||||
@ -129,15 +129,15 @@ impl std::iter::IntoIterator for &Neighborhood {
|
||||
}
|
||||
}
|
||||
|
||||
pub struct PeerEnv {
|
||||
pub(crate) peer: Peer,
|
||||
pub struct PeerEnv<R> {
|
||||
pub(crate) peer: Peer<R>,
|
||||
// failed for everyone
|
||||
failed: bool,
|
||||
neighborhood: Neighborhood,
|
||||
neighborhood: Neighborhood<R>,
|
||||
}
|
||||
|
||||
impl PeerEnv {
|
||||
pub fn new(peer: Peer, network: &Rc<Network>) -> Self {
|
||||
impl<R: AirRunner> PeerEnv<R> {
|
||||
pub fn new(peer: Peer<R>, network: &Rc<Network<R>>) -> Self {
|
||||
Self {
|
||||
peer,
|
||||
failed: false,
|
||||
@ -180,11 +180,11 @@ impl PeerEnv {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_neighborhood(&self) -> &Neighborhood {
|
||||
pub fn get_neighborhood(&self) -> &Neighborhood<R> {
|
||||
&self.neighborhood
|
||||
}
|
||||
|
||||
pub fn get_neighborhood_mut(&mut self) -> &mut Neighborhood {
|
||||
pub fn get_neighborhood_mut(&mut self) -> &mut Neighborhood<R> {
|
||||
&mut self.neighborhood
|
||||
}
|
||||
|
||||
@ -195,7 +195,7 @@ impl PeerEnv {
|
||||
pub(crate) fn execute_once(
|
||||
&mut self,
|
||||
air: impl Into<String>,
|
||||
network: &Network,
|
||||
network: &Network<R>,
|
||||
queue: &ExecutionQueue,
|
||||
test_parameters: &TestRunParameters,
|
||||
) -> Option<Result<air_test_utils::RawAVMOutcome, String>> {
|
||||
@ -217,9 +217,9 @@ impl PeerEnv {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> IntoIterator for &'a PeerEnv {
|
||||
type Item = <&'a Neighborhood as IntoIterator>::Item;
|
||||
type IntoIter = <&'a Neighborhood as IntoIterator>::IntoIter;
|
||||
impl<'a, R: AirRunner> IntoIterator for &'a PeerEnv<R> {
|
||||
type Item = <&'a Neighborhood<R> as IntoIterator>::Item;
|
||||
type IntoIter = <&'a Neighborhood<R> as IntoIterator>::IntoIter;
|
||||
|
||||
fn into_iter(self) -> Self::IntoIter {
|
||||
self.neighborhood.into_iter()
|
||||
@ -228,13 +228,15 @@ impl<'a> IntoIterator for &'a PeerEnv {
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use std::{iter::FromIterator, rc::Rc};
|
||||
|
||||
use super::*;
|
||||
|
||||
use air_test_utils::prelude::*;
|
||||
|
||||
use std::{iter::FromIterator, rc::Rc};
|
||||
|
||||
#[test]
|
||||
fn test_empty_neighborhood() {
|
||||
let network = Network::empty();
|
||||
let network = Network::<NativeAirRunner>::new(std::iter::empty::<PeerId>(), vec![]);
|
||||
let peer_id: PeerId = "someone".into();
|
||||
let other_id: PeerId = "other".into();
|
||||
let penv = PeerEnv::new(Peer::new(peer_id.clone(), Rc::from(vec![])), &network);
|
||||
@ -244,7 +246,7 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_no_self_disconnect() {
|
||||
let network = Network::empty();
|
||||
let network = Network::<NativeAirRunner>::new(std::iter::empty::<PeerId>(), vec![]);
|
||||
let peer_id: PeerId = "someone".into();
|
||||
let other_id: PeerId = "other".into();
|
||||
let mut penv = PeerEnv::new(Peer::new(peer_id.clone(), Rc::from(vec![])), &network);
|
||||
@ -268,7 +270,7 @@ mod tests {
|
||||
let peer_id: PeerId = "someone".into();
|
||||
let other_id1: PeerId = "other1".into();
|
||||
let other_id2: PeerId = "other2".into();
|
||||
let network = Network::empty();
|
||||
let network = Network::<NativeAirRunner>::new(std::iter::empty::<PeerId>(), vec![]);
|
||||
|
||||
let penv = PeerEnv::new(Peer::new(peer_id, Rc::from(vec![])), &network);
|
||||
// iter is empty
|
||||
@ -282,7 +284,7 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_insert() {
|
||||
let network = Network::empty();
|
||||
let network = Network::<NativeAirRunner>::new(std::iter::empty::<PeerId>(), vec![]);
|
||||
let peer_id: PeerId = "someone".into();
|
||||
let other_id1: PeerId = "other1".into();
|
||||
let other_id2: PeerId = "other2".into();
|
||||
@ -299,7 +301,7 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_ensure() {
|
||||
let network = Network::empty();
|
||||
let network = Network::<NativeAirRunner>::new(std::iter::empty::<PeerId>(), vec![]);
|
||||
let peer_id: PeerId = "someone".into();
|
||||
let other_id1: PeerId = "other1".into();
|
||||
let other_id2: PeerId = "other2".into();
|
||||
@ -317,7 +319,7 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_insert_insert() {
|
||||
let network = Network::empty();
|
||||
let network = Network::<NativeAirRunner>::new(std::iter::empty::<PeerId>(), vec![]);
|
||||
let peer_id: PeerId = "someone".into();
|
||||
let other_id1: PeerId = "other1".into();
|
||||
let mut penv = PeerEnv::new(Peer::new(peer_id, Rc::from(vec![])), &network);
|
||||
@ -335,7 +337,7 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_extend_neighborhood() {
|
||||
let network = Network::empty();
|
||||
let network = Network::<NativeAirRunner>::new(std::iter::empty::<PeerId>(), vec![]);
|
||||
let peer_id: PeerId = "someone".into();
|
||||
let mut penv = PeerEnv::new(Peer::new(peer_id, Rc::from(vec![])), &network);
|
||||
penv.get_neighborhood_mut()
|
||||
@ -350,7 +352,7 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_remove_from_neiborhood() {
|
||||
let network = Network::empty();
|
||||
let network = Network::<NativeAirRunner>::new(std::iter::empty::<PeerId>(), vec![]);
|
||||
let peer_id: PeerId = "someone".into();
|
||||
let mut penv = PeerEnv::new(Peer::new(peer_id, Rc::from(vec![])), &network);
|
||||
penv.get_neighborhood_mut()
|
||||
@ -367,7 +369,7 @@ mod tests {
|
||||
}
|
||||
#[test]
|
||||
fn test_fail() {
|
||||
let network = Network::empty();
|
||||
let network = Network::<NativeAirRunner>::new(std::iter::empty::<PeerId>(), vec![]);
|
||||
let peer_id: PeerId = "someone".into();
|
||||
let other_id: PeerId = "other".into();
|
||||
let mut penv = PeerEnv::new(Peer::new(peer_id, Rc::from(vec![])), &network);
|
||||
@ -383,7 +385,7 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_fail_remove() {
|
||||
let network = Network::empty();
|
||||
let network = Network::<NativeAirRunner>::new(std::iter::empty::<PeerId>(), vec![]);
|
||||
let peer_id: PeerId = "someone".into();
|
||||
let other_id: PeerId = "other".into();
|
||||
let mut penv = PeerEnv::new(Peer::new(peer_id, Rc::from(vec![])), &network);
|
||||
@ -404,7 +406,7 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_fail_unfail() {
|
||||
let network = Network::empty();
|
||||
let network = Network::<NativeAirRunner>::new(std::iter::empty::<PeerId>(), vec![]);
|
||||
let peer_id: PeerId = "someone".into();
|
||||
let other_id: PeerId = "other".into();
|
||||
let mut penv = PeerEnv::new(Peer::new(peer_id, Rc::from(vec![])), &network);
|
||||
@ -421,7 +423,7 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_failed() {
|
||||
let network = Network::empty();
|
||||
let network = Network::<NativeAirRunner>::new(std::iter::empty::<PeerId>(), vec![]);
|
||||
let peer_id: PeerId = "someone".into();
|
||||
let other_id: PeerId = "other".into();
|
||||
let remote_id: PeerId = "remote".into();
|
||||
|
@ -21,22 +21,43 @@ use crate::{
|
||||
transform::walker::TransformedAirScript,
|
||||
};
|
||||
|
||||
use air_test_utils::{test_runner::TestRunParameters, RawAVMOutcome};
|
||||
use air_test_utils::{
|
||||
test_runner::{AirRunner, DefaultAirRunner, TestRunParameters},
|
||||
RawAVMOutcome,
|
||||
};
|
||||
|
||||
use std::{borrow::Borrow, hash::Hash, rc::Rc};
|
||||
|
||||
/// A executor for an AIR script. Several executors may share same TransformedAirScript
|
||||
/// and its state.
|
||||
pub struct AirScriptExecutor {
|
||||
transformed_air_script: TransformedAirScript,
|
||||
pub struct AirScriptExecutor<R = DefaultAirRunner> {
|
||||
transformed_air_script: TransformedAirScript<R>,
|
||||
test_parameters: TestRunParameters,
|
||||
queue: ExecutionQueue,
|
||||
}
|
||||
|
||||
impl AirScriptExecutor {
|
||||
// it is implemented only for the default runner for compatibility reasons
|
||||
// Rust fails to deduce type for `AirScriptExecutor::simple()` without
|
||||
// extencive test code changes
|
||||
impl AirScriptExecutor<DefaultAirRunner> {
|
||||
/// Simple constructor where everything is generated from the annotated_air_script.
|
||||
pub fn from_annotated(
|
||||
test_parameters: TestRunParameters,
|
||||
annotated_air_script: &str,
|
||||
) -> Result<Self, String> {
|
||||
Self::new(
|
||||
test_parameters,
|
||||
vec![],
|
||||
std::iter::empty(),
|
||||
annotated_air_script,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
impl<R: AirRunner> AirScriptExecutor<R> {
|
||||
pub fn from_transformed_air_script(
|
||||
test_parameters: TestRunParameters,
|
||||
transformed_air_script: TransformedAirScript,
|
||||
transformed_air_script: TransformedAirScript<R>,
|
||||
) -> Result<Self, String> {
|
||||
let network = transformed_air_script.get_network();
|
||||
let init_peer_id = test_parameters.init_peer_id.as_str();
|
||||
@ -69,22 +90,9 @@ impl AirScriptExecutor {
|
||||
Self::from_transformed_air_script(test_parameters, transformed)
|
||||
}
|
||||
|
||||
/// Simple constructor where everything is generated from the annotated_air_script.
|
||||
pub fn simple(
|
||||
test_parameters: TestRunParameters,
|
||||
annotated_air_script: &str,
|
||||
) -> Result<Self, String> {
|
||||
Self::new(
|
||||
test_parameters,
|
||||
vec![],
|
||||
std::iter::empty(),
|
||||
annotated_air_script,
|
||||
)
|
||||
}
|
||||
|
||||
pub fn from_network(
|
||||
test_parameters: TestRunParameters,
|
||||
network: Rc<Network>,
|
||||
network: Rc<Network<R>>,
|
||||
annotated_air_script: &str,
|
||||
) -> Result<Self, String> {
|
||||
let transformed = TransformedAirScript::new(annotated_air_script, network)?;
|
||||
@ -142,7 +150,7 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_execution() {
|
||||
let exec = AirScriptExecutor::new(
|
||||
let exec = AirScriptExecutor::<NativeAirRunner>::new(
|
||||
TestRunParameters::from_init_peer_id("init_peer_id"),
|
||||
vec![],
|
||||
std::iter::empty(),
|
||||
@ -173,7 +181,7 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_call_result_success() {
|
||||
let exec = AirScriptExecutor::new(
|
||||
let exec = AirScriptExecutor::<NativeAirRunner>::new(
|
||||
TestRunParameters::from_init_peer_id("init_peer_id"),
|
||||
vec![],
|
||||
std::iter::empty(),
|
||||
@ -202,7 +210,7 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_call_result_error() {
|
||||
let exec = AirScriptExecutor::new(
|
||||
let exec = AirScriptExecutor::<NativeAirRunner>::new(
|
||||
TestRunParameters::from_init_peer_id("init_peer_id"),
|
||||
vec![],
|
||||
std::iter::empty(),
|
||||
@ -240,7 +248,7 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_seq_ok() {
|
||||
let exec = AirScriptExecutor::new(
|
||||
let exec = AirScriptExecutor::<NativeAirRunner>::new(
|
||||
TestRunParameters::from_init_peer_id("init_peer_id"),
|
||||
vec![],
|
||||
IntoIterator::into_iter(["peer2", "peer3"]).map(Into::into),
|
||||
@ -337,7 +345,7 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_map() {
|
||||
let exec = AirScriptExecutor::new(
|
||||
let exec = AirScriptExecutor::<NativeAirRunner>::new(
|
||||
TestRunParameters::from_init_peer_id("peer1"),
|
||||
vec![],
|
||||
IntoIterator::into_iter(["peer2", "peer3"]).map(Into::into),
|
||||
@ -403,7 +411,7 @@ mod tests {
|
||||
#[test]
|
||||
#[should_panic]
|
||||
fn test_map_no_arg() {
|
||||
let exec = AirScriptExecutor::new(
|
||||
let exec = AirScriptExecutor::<NativeAirRunner>::new(
|
||||
TestRunParameters::from_init_peer_id("peer1"),
|
||||
vec![],
|
||||
IntoIterator::into_iter(["peer2", "peer3"]).map(Into::into),
|
||||
@ -417,7 +425,7 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_seq_error() {
|
||||
let exec = AirScriptExecutor::new(
|
||||
let exec = AirScriptExecutor::<NativeAirRunner>::new(
|
||||
TestRunParameters::from_init_peer_id("init_peer_id"),
|
||||
vec![],
|
||||
IntoIterator::into_iter(["peer2", "peer3"]).map(Into::into),
|
||||
@ -515,7 +523,7 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_echo() {
|
||||
let exec = AirScriptExecutor::new(
|
||||
let exec = AirScriptExecutor::<NativeAirRunner>::new(
|
||||
TestRunParameters::from_init_peer_id("init_peer_id"),
|
||||
vec![],
|
||||
std::iter::empty(),
|
||||
@ -559,7 +567,7 @@ mod tests {
|
||||
#[test]
|
||||
fn test_transformed_distinct() {
|
||||
let peer = "peer1";
|
||||
let network = Network::empty();
|
||||
let network = Network::<NativeAirRunner>::new(std::iter::empty::<PeerId>(), vec![]);
|
||||
|
||||
let transformed1 = TransformedAirScript::new(
|
||||
&f!(r#"(call "{}" ("service" "function") []) ; ok = 42"#, peer),
|
||||
@ -621,7 +629,10 @@ mod tests {
|
||||
let service = Service {
|
||||
state: vec![json!(42), json!(24)].into_iter().into(),
|
||||
};
|
||||
let network = Network::new(std::iter::empty::<PeerId>(), vec![service.to_handle()]);
|
||||
let network = Network::<NativeAirRunner>::new(
|
||||
std::iter::empty::<PeerId>(),
|
||||
vec![service.to_handle()],
|
||||
);
|
||||
|
||||
let peer = "peer1";
|
||||
let air_script = f!(r#"(call "{}" ("service" "function") [])"#, peer);
|
||||
@ -664,7 +675,7 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_invalid_air() {
|
||||
let res = AirScriptExecutor::new(
|
||||
let res = AirScriptExecutor::<NativeAirRunner>::new(
|
||||
TestRunParameters::from_init_peer_id("init_peer_id"),
|
||||
vec![],
|
||||
std::iter::empty(),
|
||||
@ -690,7 +701,7 @@ mod tests {
|
||||
#[test]
|
||||
fn test_behaviour_service() {
|
||||
let peer = "peer1";
|
||||
let exec = AirScriptExecutor::new(
|
||||
let exec = AirScriptExecutor::<NativeAirRunner>::new(
|
||||
TestRunParameters::from_init_peer_id(peer),
|
||||
vec![],
|
||||
std::iter::empty(),
|
||||
@ -720,7 +731,7 @@ mod tests {
|
||||
#[test]
|
||||
fn test_behaviour_function() {
|
||||
let peer = "peer1";
|
||||
let exec = AirScriptExecutor::new(
|
||||
let exec = AirScriptExecutor::<NativeAirRunner>::new(
|
||||
TestRunParameters::from_init_peer_id(peer),
|
||||
vec![],
|
||||
std::iter::empty(),
|
||||
@ -750,7 +761,7 @@ mod tests {
|
||||
#[test]
|
||||
fn test_behaviour_arg() {
|
||||
let peer = "peer1";
|
||||
let exec = AirScriptExecutor::new(
|
||||
let exec = AirScriptExecutor::<NativeAirRunner>::new(
|
||||
TestRunParameters::from_init_peer_id(peer),
|
||||
vec![],
|
||||
std::iter::empty(),
|
||||
@ -780,7 +791,7 @@ mod tests {
|
||||
#[test]
|
||||
fn test_behaviour_tetraplet() {
|
||||
let peer = "peer1";
|
||||
let exec = AirScriptExecutor::new(
|
||||
let exec = AirScriptExecutor::<NativeAirRunner>::new(
|
||||
TestRunParameters::from_init_peer_id(peer),
|
||||
vec![],
|
||||
std::iter::empty(),
|
||||
|
@ -16,7 +16,10 @@
|
||||
|
||||
use crate::ephemeral::{Data, Network, PeerId};
|
||||
|
||||
use air_test_utils::{test_runner::TestRunParameters, RawAVMOutcome};
|
||||
use air_test_utils::{
|
||||
test_runner::{AirRunner, TestRunParameters},
|
||||
RawAVMOutcome,
|
||||
};
|
||||
|
||||
use std::{
|
||||
borrow::Borrow,
|
||||
@ -74,10 +77,10 @@ impl ExecutionQueue {
|
||||
|
||||
/// Iterator for handling al the queued data. It borrows peer env's `RefCell` only temporarily.
|
||||
/// Following test-utils' call_vm macro, it panics on failed VM.
|
||||
pub fn execution_iter<'ctx, Id>(
|
||||
pub fn execution_iter<'ctx, Id, R: AirRunner + 'ctx>(
|
||||
&'ctx self,
|
||||
air: &'ctx str,
|
||||
network: Rc<Network>,
|
||||
network: Rc<Network<R>>,
|
||||
test_parameters: &'ctx TestRunParameters,
|
||||
peer_id: &Id,
|
||||
) -> Option<impl Iterator<Item = RawAVMOutcome> + 'ctx>
|
||||
@ -97,8 +100,12 @@ impl ExecutionQueue {
|
||||
})
|
||||
}
|
||||
|
||||
pub fn distribute_to_peers<Id>(&self, network: &Network, peers: &[Id], data: &Data)
|
||||
where
|
||||
pub fn distribute_to_peers<Id, R: AirRunner>(
|
||||
&self,
|
||||
network: &Network<R>,
|
||||
peers: &[Id],
|
||||
data: &Data,
|
||||
) where
|
||||
Id: Deref<Target = str>,
|
||||
{
|
||||
for peer_id in peers {
|
||||
|
@ -14,6 +14,8 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
use air_test_utils::test_runner::{AirRunner, DefaultAirRunner};
|
||||
|
||||
use super::{Call, Sexp};
|
||||
use crate::ephemeral::Network;
|
||||
|
||||
@ -23,13 +25,13 @@ use std::{fmt::Write, ops::Deref, rc::Rc, str::FromStr};
|
||||
/// Executions that use the same transformed script share same generated services' state.
|
||||
/// This struct is cheap to clone, and cloned copies share same internal state.
|
||||
#[derive(Clone)]
|
||||
pub struct TransformedAirScript {
|
||||
network: Rc<Network>,
|
||||
pub struct TransformedAirScript<R = DefaultAirRunner> {
|
||||
network: Rc<Network<R>>,
|
||||
tranformed: Rc<str>,
|
||||
}
|
||||
|
||||
impl TransformedAirScript {
|
||||
pub fn new(annotated_air_script: &str, network: Rc<Network>) -> Result<Self, String> {
|
||||
impl<R: AirRunner> TransformedAirScript<R> {
|
||||
pub fn new(annotated_air_script: &str, network: Rc<Network<R>>) -> Result<Self, String> {
|
||||
// validate the AIR script with the standard parser first
|
||||
air_parser::parse(annotated_air_script)?;
|
||||
|
||||
@ -38,7 +40,7 @@ impl TransformedAirScript {
|
||||
|
||||
pub(crate) fn new_unvalidated(
|
||||
annotated_air_script: &str,
|
||||
network: Rc<Network>,
|
||||
network: Rc<Network<R>>,
|
||||
) -> Result<Self, String> {
|
||||
let transformer = Transformer { network: &network };
|
||||
let mut sexp = Sexp::from_str(annotated_air_script)?;
|
||||
@ -50,12 +52,12 @@ impl TransformedAirScript {
|
||||
})
|
||||
}
|
||||
|
||||
pub(crate) fn get_network(&self) -> Rc<Network> {
|
||||
pub(crate) fn get_network(&self) -> Rc<Network<R>> {
|
||||
self.network.clone()
|
||||
}
|
||||
}
|
||||
|
||||
impl Deref for TransformedAirScript {
|
||||
impl<R> Deref for TransformedAirScript<R> {
|
||||
type Target = str;
|
||||
|
||||
fn deref(&self) -> &Self::Target {
|
||||
@ -63,11 +65,11 @@ impl Deref for TransformedAirScript {
|
||||
}
|
||||
}
|
||||
|
||||
struct Transformer<'net> {
|
||||
network: &'net Rc<Network>,
|
||||
struct Transformer<'net, R> {
|
||||
network: &'net Rc<Network<R>>,
|
||||
}
|
||||
|
||||
impl Transformer<'_> {
|
||||
impl<R: AirRunner> Transformer<'_, R> {
|
||||
pub(crate) fn transform(&self, sexp: &mut Sexp) {
|
||||
match sexp {
|
||||
Sexp::Call(call) => self.handle_call(call),
|
||||
@ -106,6 +108,7 @@ impl Transformer<'_> {
|
||||
mod tests {
|
||||
use super::*;
|
||||
use crate::{asserts::ServiceDefinition, ephemeral::PeerId, services::results::ResultStore};
|
||||
use air_test_utils::test_runner::NativeAirRunner;
|
||||
|
||||
use std::{
|
||||
collections::{HashMap, HashSet},
|
||||
@ -120,14 +123,14 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_translate_null() {
|
||||
let network = Network::empty();
|
||||
let network = Network::<NativeAirRunner>::new(std::iter::empty::<PeerId>(), vec![]);
|
||||
let transformed = TransformedAirScript::new("(null)", network).unwrap();
|
||||
assert_eq!(&*transformed, "(null)");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_translate_call_no_result() {
|
||||
let network = Network::empty();
|
||||
let network = Network::<NativeAirRunner>::new(std::iter::empty::<PeerId>(), vec![]);
|
||||
let script = r#"(call peer_id ("service_id" func) [])"#;
|
||||
let transformed = TransformedAirScript::new_unvalidated(script, network).unwrap();
|
||||
assert_eq!(&*transformed, script);
|
||||
@ -136,7 +139,7 @@ mod tests {
|
||||
#[test]
|
||||
#[should_panic]
|
||||
fn test_translate_call_no_string() {
|
||||
let network = Network::empty();
|
||||
let network = Network::<NativeAirRunner>::new(std::iter::empty::<PeerId>(), vec![]);
|
||||
let script = r#"(call "peer_id" (service_id func) [])"#;
|
||||
let transformed = TransformedAirScript::new(script, network);
|
||||
assert_eq!(transformed.as_deref(), Ok(script));
|
||||
@ -144,7 +147,7 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_translate_call_result() {
|
||||
let network = Network::empty();
|
||||
let network = Network::<NativeAirRunner>::new(std::iter::empty::<PeerId>(), vec![]);
|
||||
let script = r#"(call "peer_id" ("service_id" func) []) ; ok = 42"#;
|
||||
let transformer = TransformedAirScript::new_unvalidated(script, network.clone()).unwrap();
|
||||
assert_eq!(
|
||||
@ -176,7 +179,7 @@ mod tests {
|
||||
(call peer_id ("service_id" func) [1]) ; ok=true
|
||||
))"#;
|
||||
|
||||
let network = Network::empty();
|
||||
let network = Network::<NativeAirRunner>::new(std::iter::empty::<PeerId>(), vec![]);
|
||||
let transformed = TransformedAirScript::new_unvalidated(script, network.clone()).unwrap();
|
||||
assert_eq!(
|
||||
&*transformed,
|
||||
@ -215,7 +218,7 @@ mod tests {
|
||||
(call peer_id3 ("service_id" func) [b])
|
||||
))"#;
|
||||
|
||||
let network = Network::empty();
|
||||
let network = Network::<NativeAirRunner>::new(std::iter::empty::<PeerId>(), vec![]);
|
||||
let _ = TransformedAirScript::new_unvalidated(script, network.clone());
|
||||
|
||||
assert_eq!(
|
||||
|
Loading…
x
Reference in New Issue
Block a user