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) ) (match 1 2 (null) )
(fail :error:) (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(); .to_string();

View File

@ -66,10 +66,7 @@ impl Behavior {
use Behavior::*; use Behavior::*;
match self { match self {
Echo => { Echo => echo_call_service()(params),
println!("echo_call_service() {:#?}", params);
echo_call_service()(params)
}
Unit => unit_call_service()(params), Unit => unit_call_service()(params),
Function => CallServiceResult::ok(params.function_name.into()), Function => CallServiceResult::ok(params.function_name.into()),
Service => CallServiceResult::ok(params.service_id.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). /// Some known service by name: "echo", "unit" (more to follow).
#[strum_discriminants(strum(serialize = "behaviour"))] #[strum_discriminants(strum(serialize = "behaviour"))]
Behaviour(Behavior), 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 /// Maps first argument to a value
#[strum_discriminants(strum(serialize = "map"))] #[strum_discriminants(strum(serialize = "map"))]
Map(HashMap<String, JValue>), Map(HashMap<String, JValue>),
@ -103,6 +106,7 @@ impl ServiceDefinition {
call_map, call_map,
} => call_seq_error(call_number_seq, call_map), } => call_seq_error(call_number_seq, call_map),
ServiceDefinition::Behaviour(name) => name.call(params), ServiceDefinition::Behaviour(name) => name.call(params),
ServiceDefinition::DbgBehaviour(name) => dbg!(name.call(dbg!(params))),
ServiceDefinition::Map(map) => call_map_service(map, 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(ServiceDefinition::seq_error)
}, },
), ),
map(
preceded(
pair(tag(ServiceTagName::DbgBehaviour.as_ref()), equal()),
cut(parse_behaviour),
),
ServiceDefinition::DbgBehaviour,
),
map( map(
preceded( preceded(
pair(tag(ServiceTagName::Behaviour.as_ref()), equal()), pair(tag(ServiceTagName::Behaviour.as_ref()), equal()),
@ -230,6 +237,12 @@ mod tests {
assert_eq!(res, Ok(ServiceDefinition::Behaviour(Behavior::Echo)),); 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] #[test]
fn test_map() { fn test_map() {
let res = ServiceDefinition::from_str(r#"map = {"42": [], "a": 2}"#); let res = ServiceDefinition::from_str(r#"map = {"42": [], "a": 2}"#);

View File

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