chore(testing-framework): a new behavior to print service call parameters/result out to console (#723)

This commit is contained in:
raftedproc 2023-11-08 14:10:05 +03:00 committed by GitHub
parent 523dd6b219
commit 1b7de5e659
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 89 additions and 16 deletions

View File

@ -29,9 +29,9 @@ fn fail_with_rebubble_error() {
(match 1 2 (null) )
(fail :error:)
)
(call "peer_id" ("m" "f1") [:error:] scalar1) ; behaviour = echo
(call "peer_id" ("m" "f1") [:error:] scalar1) ; dbg_behaviour = echo
)
(call "peer_id" ("m" "f2") [:error:] scalar2) ; behaviour = echo
(call "peer_id" ("m" "f2") [:error:] scalar2) ; dbg_behaviour = echo
)
"#
.to_string();

View File

@ -66,10 +66,7 @@ impl Behavior {
use Behavior::*;
match self {
Echo => {
println!("echo_call_service() {:#?}", params);
echo_call_service()(params)
}
Echo => echo_call_service()(params),
Unit => unit_call_service()(params),
Function => CallServiceResult::ok(params.function_name.into()),
Service => CallServiceResult::ok(params.service_id.into()),

View File

@ -54,6 +54,9 @@ pub enum ServiceDefinition {
/// Some known service by name: "echo", "unit" (more to follow).
#[strum_discriminants(strum(serialize = "behaviour"))]
Behaviour(Behavior),
/// Same services as defined by the enum element above with dbg! applied to the arguments.
#[strum_discriminants(strum(serialize = "dbg_behaviour"))]
DbgBehaviour(Behavior),
/// Maps first argument to a value
#[strum_discriminants(strum(serialize = "map"))]
Map(HashMap<String, JValue>),
@ -103,6 +106,7 @@ impl ServiceDefinition {
call_map,
} => call_seq_error(call_number_seq, call_map),
ServiceDefinition::Behaviour(name) => name.call(params),
ServiceDefinition::DbgBehaviour(name) => dbg!(name.call(dbg!(params))),
ServiceDefinition::Map(map) => call_map_service(map, params),
}
}

View File

@ -90,6 +90,13 @@ pub fn parse_kw(inp: &str) -> IResult<&str, ServiceDefinition, ParseError> {
.map(ServiceDefinition::seq_error)
},
),
map(
preceded(
pair(tag(ServiceTagName::DbgBehaviour.as_ref()), equal()),
cut(parse_behaviour),
),
ServiceDefinition::DbgBehaviour,
),
map(
preceded(
pair(tag(ServiceTagName::Behaviour.as_ref()), equal()),
@ -230,6 +237,12 @@ mod tests {
assert_eq!(res, Ok(ServiceDefinition::Behaviour(Behavior::Echo)),);
}
#[test]
fn test_dbg_behaviour() {
let res = ServiceDefinition::from_str(r#"dbg_behaviour=echo"#);
assert_eq!(res, Ok(ServiceDefinition::DbgBehaviour(Behavior::Echo)),);
}
#[test]
fn test_map() {
let res = ServiceDefinition::from_str(r#"map = {"42": [], "a": 2}"#);

View File

@ -771,14 +771,12 @@ mod tests {
}
}
#[test]
fn test_behaviour_service() {
let peer_name = "peer1";
fn run_behaviour_service(peer_name: &str, air_script: &str) {
let exec = AirScriptExecutor::<NativeAirRunner>::new(
TestRunParameters::from_init_peer_id(peer_name),
vec![],
std::iter::empty(),
r#"(call "peer1" ("service" "func") [1 22] arg) ; behaviour=service"#,
air_script,
)
.unwrap();
@ -802,14 +800,28 @@ mod tests {
}
#[test]
fn test_behaviour_function() {
fn test_behaviour_service() {
let peer_name = "peer1";
let air_script =
&format!(r#"(call "{peer_name}" ("service" "func") [1 22] arg) ; behaviour=service"#);
run_behaviour_service(peer_name, air_script)
}
#[test]
fn test_dbg_behaviour_service() {
let peer_name = "peer1";
let air_script = &format!(
r#"(call "{peer_name}" ("service" "func") [1 22] arg) ; dbg_behaviour=service"#
);
run_behaviour_service(peer_name, air_script)
}
fn run_behaviour_function(peer_name: &str, air_script: &str) {
let exec = AirScriptExecutor::<NativeAirRunner>::new(
TestRunParameters::from_init_peer_id(peer_name),
vec![],
std::iter::empty(),
r#"(call "peer1" ("service" "func") [1 22] arg) ; behaviour=function"#,
air_script,
)
.unwrap();
@ -833,14 +845,28 @@ mod tests {
}
#[test]
fn test_behaviour_arg() {
fn test_behaviour_function() {
let peer_name = "peer1";
let air_script =
&format!(r#"(call "{peer_name}" ("service" "func") [1 22] arg) ; behaviour=function"#);
run_behaviour_function(peer_name, air_script)
}
#[test]
fn test_dbg_behaviour_function() {
let peer_name = "peer1";
let air_script = &format!(
r#"(call "{peer_name}" ("service" "func") [1 22] arg) ; dbg_behaviour=function"#
);
run_behaviour_function(peer_name, air_script)
}
fn run_behaviour_arg(peer_name: &str, air_script: &str) {
let exec = AirScriptExecutor::<NativeAirRunner>::new(
TestRunParameters::from_init_peer_id(peer_name),
vec![],
std::iter::empty(),
r#"(call "peer1" ("service" "func") [1 22] arg) ; behaviour=arg.1"#,
air_script,
)
.unwrap();
@ -864,15 +890,31 @@ mod tests {
}
#[test]
fn test_behaviour_tetraplet() {
fn test_behaviour_arg() {
let peer_name = "peer1";
let air_script =
&format!(r#"(call "{peer_name}" ("service" "func") [1 22] arg) ; behaviour=arg.1"#);
run_behaviour_arg(peer_name, air_script)
}
#[test]
fn test_dbg_behaviour_arg() {
let peer_name = "peer1";
let air_script =
&format!(r#"(call "{peer_name}" ("service" "func") [1 22] arg) ; dbg_behaviour=arg.1"#);
run_behaviour_arg(peer_name, air_script)
}
fn run_behaviour_tetraplet(peer_name: &str, air_script: &str) {
let (_peer_pk, peer_id) = derive_dummy_keypair(peer_name);
let exec = AirScriptExecutor::<NativeAirRunner>::new(
TestRunParameters::from_init_peer_id(peer_name),
vec![],
std::iter::empty(),
&format!(r#"(call "{peer_name}" ("service" "func") [1 22] arg) ; behaviour=tetraplet"#),
air_script,
)
.unwrap();
@ -904,4 +946,21 @@ mod tests {
)]),
)
}
#[test]
fn test_behaviour_tetraplet() {
let peer_name = "peer1";
let air_script =
&format!(r#"(call "{peer_name}" ("service" "func") [1 22] arg) ; behaviour=tetraplet"#);
run_behaviour_tetraplet(peer_name, air_script)
}
#[test]
fn test_dbg_behaviour_tetraplet() {
let peer_name = "peer1";
let air_script = &format!(
r#"(call "{peer_name}" ("service" "func") [1 22] arg) ; dbg_behaviour=tetraplet"#
);
run_behaviour_tetraplet(peer_name, air_script)
}
}