From c11ea7631f361eca5e3544afa26a727184dd3a6b Mon Sep 17 00:00:00 2001 From: Valentin Perrelle <valentin.perrelle@cea.fr> Date: Thu, 12 Sep 2019 14:27:35 +0200 Subject: [PATCH] [Server] Basic testing --- src/plugins/server/Makefile.in | 2 +- src/plugins/server/server_batch.ml | 26 +++++++++++++++---- src/plugins/server/tests/.gitignore | 1 + src/plugins/server/tests/batch/ast_services.i | 2 ++ .../server/tests/batch/ast_services.json | 4 +++ .../server/tests/batch/kernel_services.i | 0 .../server/tests/batch/kernel_services.json | 4 +++ .../tests/batch/oracle/ast_services.out.json | 14 ++++++++++ .../batch/oracle/ast_services.res.oracle | 5 ++++ .../batch/oracle/kernel_services.out.json | 1 + .../batch/oracle/kernel_services.res.oracle | 5 ++++ .../server/tests/batch/oracle/wrong.out.json | 14 ++++++++++ .../tests/batch/oracle/wrong.res.oracle | 9 +++++++ src/plugins/server/tests/batch/test_config | 2 ++ src/plugins/server/tests/batch/wrong.i | 0 src/plugins/server/tests/batch/wrong.json | 4 +++ 16 files changed, 87 insertions(+), 6 deletions(-) create mode 100644 src/plugins/server/tests/.gitignore create mode 100644 src/plugins/server/tests/batch/ast_services.i create mode 100644 src/plugins/server/tests/batch/ast_services.json create mode 100644 src/plugins/server/tests/batch/kernel_services.i create mode 100644 src/plugins/server/tests/batch/kernel_services.json create mode 100644 src/plugins/server/tests/batch/oracle/ast_services.out.json create mode 100644 src/plugins/server/tests/batch/oracle/ast_services.res.oracle create mode 100644 src/plugins/server/tests/batch/oracle/kernel_services.out.json create mode 100644 src/plugins/server/tests/batch/oracle/kernel_services.res.oracle create mode 100644 src/plugins/server/tests/batch/oracle/wrong.out.json create mode 100644 src/plugins/server/tests/batch/oracle/wrong.res.oracle create mode 100644 src/plugins/server/tests/batch/test_config create mode 100644 src/plugins/server/tests/batch/wrong.i create mode 100644 src/plugins/server/tests/batch/wrong.json diff --git a/src/plugins/server/Makefile.in b/src/plugins/server/Makefile.in index f70395724da..62bd6ee0526 100644 --- a/src/plugins/server/Makefile.in +++ b/src/plugins/server/Makefile.in @@ -52,7 +52,7 @@ PLUGIN_CMO:= \ PLUGIN_UNDOC:= server_batch.ml server_zmq.ml PLUGIN_GENERATED:= $(PLUGIN_DIR)/Server.mli -PLUGIN_TESTS := +PLUGIN_TESTS_DIRS := batch # -------------------------------------------------------------------------- # --- ZeroMQ Support diff --git a/src/plugins/server/server_batch.ml b/src/plugins/server/server_batch.ml index 0aa3c03b310..87a3fd9c490 100644 --- a/src/plugins/server/server_batch.ml +++ b/src/plugins/server/server_batch.ml @@ -41,8 +41,19 @@ module Batch = Senv.String_list associated results in <file.out.json>." end) +let () = Parameter_customize.set_group batch_group +module BatchOutputDir = Senv.Empty_string + (struct + let option_name = "-server-batch-output-dir" + let arg_name = "path" + let help = + "Outputs the results of -server-batch in <path> instead of the input \ + directory." + end) + let _ = Doc.page `Protocol ~title:"Batch Protocol" ~filename:"server_batch.md" + (* -------------------------------------------------------------------------- *) (* --- Execute JSON --- *) (* -------------------------------------------------------------------------- *) @@ -64,9 +75,8 @@ let execute_command js = try Senv.feedback "[%a] %s" Main.pp_kind kind request ; `Assoc [ "id" , id ; "data" , handler data ] - with Ju.Type_error(msg,js) -> - Senv.error "[%s] incorrect encoding:@\n%s@\n@[<hov 2>At: %a@]@." - request msg pretty js ; + with Data.InputError(msg) -> + Senv.error "[%s] %s@." request msg ; `Assoc [ "id" , id ; "error" , `String msg ; "at" , js ] let rec execute_batch js = @@ -90,9 +100,15 @@ let execute () = begin fun file -> Senv.feedback "Script %S" file ; let response = execute_batch (Js.from_file file) in - let output = Filename.remove_extension file ^ ".out.js" in + let output = Filename.remove_extension file ^ ".out.json" in + let output = match BatchOutputDir.get () with + | "" -> output + | dir -> Filename.(dir ^ dir_sep ^ basename output) + in Senv.feedback "Output %S" output ; - Js.to_file output response ; + let out = open_out output in + Js.pretty_to_channel out response ; + close_out out end (Batch.get()) ; end diff --git a/src/plugins/server/tests/.gitignore b/src/plugins/server/tests/.gitignore new file mode 100644 index 00000000000..e2f5dd2eb20 --- /dev/null +++ b/src/plugins/server/tests/.gitignore @@ -0,0 +1 @@ +result \ No newline at end of file diff --git a/src/plugins/server/tests/batch/ast_services.i b/src/plugins/server/tests/batch/ast_services.i new file mode 100644 index 00000000000..b875167edd1 --- /dev/null +++ b/src/plugins/server/tests/batch/ast_services.i @@ -0,0 +1,2 @@ +void main() {} +void f() {} \ No newline at end of file diff --git a/src/plugins/server/tests/batch/ast_services.json b/src/plugins/server/tests/batch/ast_services.json new file mode 100644 index 00000000000..45254f96445 --- /dev/null +++ b/src/plugins/server/tests/batch/ast_services.json @@ -0,0 +1,4 @@ +[ + { id:"getFunctions", request:"kernel.ast.getFunctions", data:null }, + { id:"printFunction", request:"kernel.ast.printFunction", data:"f" } +] \ No newline at end of file diff --git a/src/plugins/server/tests/batch/kernel_services.i b/src/plugins/server/tests/batch/kernel_services.i new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/plugins/server/tests/batch/kernel_services.json b/src/plugins/server/tests/batch/kernel_services.json new file mode 100644 index 00000000000..5b58c627bfe --- /dev/null +++ b/src/plugins/server/tests/batch/kernel_services.json @@ -0,0 +1,4 @@ +[ + { id:"getLogs", request:"kernel.getLogs", data:null }, + { id:"setLogs", request:"kernel.setLogs", data:false } +] \ No newline at end of file diff --git a/src/plugins/server/tests/batch/oracle/ast_services.out.json b/src/plugins/server/tests/batch/oracle/ast_services.out.json new file mode 100644 index 00000000000..40a40546e0d --- /dev/null +++ b/src/plugins/server/tests/batch/oracle/ast_services.out.json @@ -0,0 +1,14 @@ +[ + { "id": "getFunctions", "data": [ "f", "main" ] }, + { + "id": "printFunction", + "data": [ + "", + [ "#v19", "void f(void)" ], + "\n{\n ", + [ "#s7", [ "#k7", "return;" ] ], + "\n}\n", + "\n" + ] + } +] \ No newline at end of file diff --git a/src/plugins/server/tests/batch/oracle/ast_services.res.oracle b/src/plugins/server/tests/batch/oracle/ast_services.res.oracle new file mode 100644 index 00000000000..f91a4f9d11d --- /dev/null +++ b/src/plugins/server/tests/batch/oracle/ast_services.res.oracle @@ -0,0 +1,5 @@ +[kernel] Parsing tests/batch/ast_services.i (no preprocessing) +[server] Script "tests/batch/ast_services.json" +[server] [GET] kernel.ast.getFunctions +[server] [GET] kernel.ast.printFunction +[server] Output "tests/batch/result/ast_services.out.json" diff --git a/src/plugins/server/tests/batch/oracle/kernel_services.out.json b/src/plugins/server/tests/batch/oracle/kernel_services.out.json new file mode 100644 index 00000000000..80065331f07 --- /dev/null +++ b/src/plugins/server/tests/batch/oracle/kernel_services.out.json @@ -0,0 +1 @@ +[ { "id": "getLogs", "data": [] }, { "id": "setLogs", "data": null } ] \ No newline at end of file diff --git a/src/plugins/server/tests/batch/oracle/kernel_services.res.oracle b/src/plugins/server/tests/batch/oracle/kernel_services.res.oracle new file mode 100644 index 00000000000..7e1c091eeec --- /dev/null +++ b/src/plugins/server/tests/batch/oracle/kernel_services.res.oracle @@ -0,0 +1,5 @@ +[kernel] Parsing tests/batch/kernel_services.i (no preprocessing) +[server] Script "tests/batch/kernel_services.json" +[server] [GET] kernel.getLogs +[server] [SET] kernel.setLogs +[server] Output "tests/batch/result/kernel_services.out.json" diff --git a/src/plugins/server/tests/batch/oracle/wrong.out.json b/src/plugins/server/tests/batch/oracle/wrong.out.json new file mode 100644 index 00000000000..4bf1761a32d --- /dev/null +++ b/src/plugins/server/tests/batch/oracle/wrong.out.json @@ -0,0 +1,14 @@ +[ + { "id": "unknown request", "error": "request not found" }, + { + "id": "wrong data", + "error": + "Expected string, got object:\n{ \"f1\": 1, \"f2\": { \"x\": 1, \"y\": 2 }, \"f3\": null }", + "at": { + "id": "wrong data", + "request": "kernel.ast.printFunction", + "data": { "f1": 1, "f2": { "x": 1, "y": 2 }, "f3": null }, + "comment": "ident is expected, object is given" + } + } +] \ No newline at end of file diff --git a/src/plugins/server/tests/batch/oracle/wrong.res.oracle b/src/plugins/server/tests/batch/oracle/wrong.res.oracle new file mode 100644 index 00000000000..76ac96361f0 --- /dev/null +++ b/src/plugins/server/tests/batch/oracle/wrong.res.oracle @@ -0,0 +1,9 @@ +[kernel] Parsing tests/batch/wrong.i (no preprocessing) +[server] Script "tests/batch/wrong.json" +[server] User Error: [batch] "unknown request": request "kernel.unknown" not found +[server] [GET] kernel.ast.printFunction +[server] User Error: [kernel.ast.printFunction] Expected string, got object: + { "f1": 1, "f2": { "x": 1, "y": 2 }, "f3": null } +[server] Output "tests/batch/result/wrong.out.json" +[server] User Error: Deferred error message was emitted during execution. See above messages for more information. +[kernel] Plug-in server aborted: invalid user input. diff --git a/src/plugins/server/tests/batch/test_config b/src/plugins/server/tests/batch/test_config new file mode 100644 index 00000000000..15a16cd4f95 --- /dev/null +++ b/src/plugins/server/tests/batch/test_config @@ -0,0 +1,2 @@ +LOG: @PTEST_NAME@.out.json +OPT: -no-autoload-plugins -load-module server -check -server-batch @PTEST_DIR@/@PTEST_NAME@.json -server-batch-output-dir @PTEST_RESULT@ diff --git a/src/plugins/server/tests/batch/wrong.i b/src/plugins/server/tests/batch/wrong.i new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/plugins/server/tests/batch/wrong.json b/src/plugins/server/tests/batch/wrong.json new file mode 100644 index 00000000000..0178e8af295 --- /dev/null +++ b/src/plugins/server/tests/batch/wrong.json @@ -0,0 +1,4 @@ +[ + { id:"unknown request", request:"kernel.unknown", data:null, comment:"the request doesn't exist" }, + { id:"wrong data", request:"kernel.ast.printFunction", data:{f1:1, f2:{x:1, y:2}, f3:null}, comment:"ident is expected, object is given" } +] \ No newline at end of file -- GitLab