2021-10-18 23:23:30 +03:00
|
|
|
use air_test_utils::prelude::*;
|
2020-11-01 17:20:25 +03:00
|
|
|
|
|
|
|
use serde_json::json;
|
|
|
|
|
|
|
|
use criterion::criterion_group;
|
|
|
|
use criterion::criterion_main;
|
|
|
|
use criterion::Criterion;
|
|
|
|
|
|
|
|
use std::cell::RefCell;
|
|
|
|
|
2021-10-18 23:23:30 +03:00
|
|
|
thread_local!(static VM: RefCell<TestRunner> = RefCell::new({
|
2020-11-01 17:20:25 +03:00
|
|
|
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");
|
|
|
|
|
2021-10-18 23:23:30 +03:00
|
|
|
let call_service: CallServiceClosure = Box::new(move |args| -> CallServiceResult {
|
|
|
|
let response = match args.service_id.as_str() {
|
2020-11-01 17:20:25 +03:00
|
|
|
"add_module" => add_module_response.clone(),
|
|
|
|
"add_blueprint" => add_blueprint_response.clone(),
|
|
|
|
"create" => create_response.clone(),
|
|
|
|
_ => String::from("unknown response"),
|
|
|
|
};
|
|
|
|
|
2021-10-18 23:23:30 +03:00
|
|
|
CallServiceResult::ok(json!(response))
|
2020-11-01 17:20:25 +03:00
|
|
|
});
|
|
|
|
|
2021-05-10 14:25:34 +03:00
|
|
|
create_avm(call_service, "A")
|
2020-11-01 17:20:25 +03:00
|
|
|
}));
|
|
|
|
|
2021-10-18 23:23:30 +03:00
|
|
|
thread_local!(static SET_VARIABLES_VM: RefCell<TestRunner> = RefCell::new({
|
2020-11-01 17:20:25 +03:00
|
|
|
let module = "greeting";
|
|
|
|
let module_config = json!(
|
|
|
|
{
|
|
|
|
"name": module,
|
|
|
|
"mem_pages_count": 100,
|
|
|
|
"logger_enabled": true,
|
|
|
|
"wasi": {
|
|
|
|
"envs": json!({}),
|
|
|
|
"preopened_files": vec!["/tmp"],
|
|
|
|
"mapped_dirs": json!({}),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
let module_bytes = json!([1, 2]);
|
|
|
|
let blueprint = json!({ "name": "blueprint", "dependencies": [module]});
|
|
|
|
|
|
|
|
let variables_mapping = maplit::hashmap!(
|
2021-10-18 23:23:30 +03:00
|
|
|
String::from("module_bytes") => json!(module_bytes),
|
|
|
|
String::from("module_config") => json!(module_config),
|
|
|
|
String::from("blueprint") => json!(blueprint),
|
2020-11-01 17:20:25 +03:00
|
|
|
);
|
|
|
|
|
2021-11-29 18:35:11 +03:00
|
|
|
create_avm(set_variables_call_service(variables_mapping, VariableOptionSource::Argument(0)), "set_variables")
|
2020-11-01 17:20:25 +03:00
|
|
|
}));
|
|
|
|
|
2021-10-18 23:23:30 +03:00
|
|
|
fn create_service_benchmark() -> Result<RawAVMOutcome, String> {
|
|
|
|
let script = r#"
|
2020-11-03 17:43:58 +03:00
|
|
|
(seq
|
|
|
|
(seq
|
|
|
|
(seq
|
|
|
|
(call "set_variables" ("" "") ["module_bytes"] module_bytes)
|
|
|
|
(call "set_variables" ("" "") ["module_config"] module_config)
|
|
|
|
)
|
|
|
|
(call "set_variables" ("" "") ["blueprint"] blueprint)
|
|
|
|
)
|
|
|
|
(seq
|
|
|
|
(call "A" ("add_module" "") [module_bytes module_config] module)
|
|
|
|
(seq
|
|
|
|
(call "A" ("add_blueprint" "") [blueprint] blueprint_id)
|
|
|
|
(seq
|
|
|
|
(call "A" ("create" "") [blueprint_id] service_id)
|
|
|
|
(call "remote_peer_id" ("" "") [service_id] client_result)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
2021-10-18 23:23:30 +03:00
|
|
|
)"#;
|
2020-11-01 17:20:25 +03:00
|
|
|
|
2022-07-08 17:07:04 +03:00
|
|
|
let run_parameters1 = TestRunParameters::new("set_variables", 0, 1);
|
|
|
|
let run_parameters2 = run_parameters1.clone();
|
2021-08-24 16:14:15 +03:00
|
|
|
let result = SET_VARIABLES_VM
|
2022-07-08 17:07:04 +03:00
|
|
|
.with(|vm| vm.borrow_mut().call(script, "", "", run_parameters1))
|
2020-11-01 17:20:25 +03:00
|
|
|
.unwrap();
|
2022-07-08 17:07:04 +03:00
|
|
|
VM.with(|vm| vm.borrow_mut().call(script, "", result.data, run_parameters2))
|
2020-11-01 17:20:25 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
fn criterion_benchmark(c: &mut Criterion) {
|
|
|
|
c.bench_function("create_service", move |b| b.iter(move || create_service_benchmark()));
|
|
|
|
}
|
|
|
|
|
|
|
|
criterion_group!(benches, criterion_benchmark);
|
|
|
|
criterion_main!(benches);
|