From 32a822dd297bb6563dbbc1c002ca6294b702a93e Mon Sep 17 00:00:00 2001 From: Andre Maroneze <andre.maroneze@cea.fr> Date: Wed, 14 Oct 2020 23:06:22 +0200 Subject: [PATCH] [Markdown-report] add option -mdr-sarif-deterministic and test --- src/plugins/markdown-report/Makefile.in | 2 +- src/plugins/markdown-report/mdr_params.ml | 7 +++++ src/plugins/markdown-report/mdr_params.mli | 3 ++ src/plugins/markdown-report/sarif_gen.ml | 19 +++++++++--- .../markdown-report/tests/sarif/libc.c | 8 +++-- .../tests/sarif/oracle/libc.0.res.oracle | 23 ++++++++++++++ .../tests/sarif/oracle/libc.1.res.oracle | 23 ++++++++++++++ .../tests/sarif/oracle/libc.res.oracle | 1 - ...{with-libc.sarif.clean => with-libc.sarif} | 31 ++++++++----------- ...ut-libc.sarif.clean => without-libc.sarif} | 31 ++++++++----------- 10 files changed, 102 insertions(+), 46 deletions(-) create mode 100644 src/plugins/markdown-report/tests/sarif/oracle/libc.0.res.oracle create mode 100644 src/plugins/markdown-report/tests/sarif/oracle/libc.1.res.oracle delete mode 100644 src/plugins/markdown-report/tests/sarif/oracle/libc.res.oracle rename src/plugins/markdown-report/tests/sarif/oracle/{with-libc.sarif.clean => with-libc.sarif} (99%) rename src/plugins/markdown-report/tests/sarif/oracle/{without-libc.sarif.clean => without-libc.sarif} (68%) diff --git a/src/plugins/markdown-report/Makefile.in b/src/plugins/markdown-report/Makefile.in index 7b32d90509d..b599f8a4d68 100644 --- a/src/plugins/markdown-report/Makefile.in +++ b/src/plugins/markdown-report/Makefile.in @@ -39,7 +39,7 @@ PLUGIN_CMO:=\ PLUGIN_DISTRIBUTED:=$(PLUGIN_ENABLE) PLUGIN_REQUIRES:=ppx_deriving ppx_deriving_yojson yojson PLUGIN_DISTRIB_EXTERNAL:= Makefile.in configure.ac configure share/acsl.xml -PLUGIN_TESTS_DIRS:= eva +PLUGIN_TESTS_DIRS:= eva sarif include $(FRAMAC_SHARE)/Makefile.dynamic diff --git a/src/plugins/markdown-report/mdr_params.ml b/src/plugins/markdown-report/mdr_params.ml index 6f1cbcdc05b..249abea7136 100644 --- a/src/plugins/markdown-report/mdr_params.ml +++ b/src/plugins/markdown-report/mdr_params.ml @@ -119,3 +119,10 @@ module PrintLibc = True( let help = "when set (default), reports include information about libc elements." end) + +module SarifDeterministic = False( + struct + let option_name = "-mdr-sarif-deterministic" + let help = "omits non-deterministic data from SARIF reports, such as \ + absolute file URIs and timestamps." + end) diff --git a/src/plugins/markdown-report/mdr_params.mli b/src/plugins/markdown-report/mdr_params.mli index b626fb52271..08b54d5c06f 100644 --- a/src/plugins/markdown-report/mdr_params.mli +++ b/src/plugins/markdown-report/mdr_params.mli @@ -48,3 +48,6 @@ module Stubs: Parameter_sig.String_list (** Value of [-mdr-print-libc]. *) module PrintLibc: Parameter_sig.Bool + +(** Value of [-mdr-sarif-deterministic]. *) +module SarifDeterministic: Parameter_sig.Bool diff --git a/src/plugins/markdown-report/sarif_gen.ml b/src/plugins/markdown-report/sarif_gen.ml index a68a627085d..028ed32caaf 100644 --- a/src/plugins/markdown-report/sarif_gen.ml +++ b/src/plugins/markdown-report/sarif_gen.ml @@ -22,10 +22,14 @@ open Sarif -let frama_c_sarif = +let frama_c_sarif () = let name = "frama-c" in - let version = Fc_config.version_and_codename in - let semanticVersion = Fc_config.version in + let version, semanticVersion = + if Mdr_params.SarifDeterministic.get () then + "omitted-for-deterministic-output", "" + else + Fc_config.version_and_codename, Fc_config.version + in let fullName = name ^ "-" ^ version in let downloadUri = "https://frama-c.com/download.html" in let informationUri = "https://frama-c.com" in @@ -209,7 +213,7 @@ let add_rule id desc l = let make_taxonomies rules = Datatype.String.Map.fold add_rule rules [] let gen_run remarks = - let tool = frama_c_sarif in + let tool = frama_c_sarif () in let name = "frama-c" in let invocations = [gen_invocation ()] in let rules, results = gen_results remarks in @@ -228,7 +232,12 @@ let gen_run remarks = let uriBases = ("PWD", Sys.getcwd ()) :: Filepath.all_symbolic_dirs () in let uriBasesJson = List.fold_left (fun acc (name, dir) -> - (name, `Assoc [("uri", `String ("file://" ^ dir ^ "/"))]) :: acc + let baseUri = + if Mdr_params.SarifDeterministic.get () then + "omitted-for-deterministic-output/" + else "file://" ^ dir ^ "/" + in + (name, `Assoc [("uri", `String baseUri)]) :: acc ) [] uriBases in let originalUriBaseIds = diff --git a/src/plugins/markdown-report/tests/sarif/libc.c b/src/plugins/markdown-report/tests/sarif/libc.c index b2458ae9458..2f7438beff3 100644 --- a/src/plugins/markdown-report/tests/sarif/libc.c +++ b/src/plugins/markdown-report/tests/sarif/libc.c @@ -1,7 +1,9 @@ /* run.config - LOG: @PTEST_DIR@/oracle/with-libc.sarif.clean - EXECNOW: @frama-c@ @PTEST_FILE@ -no-autoload-plugins -load-module eva,from,scope,markdown_report -eva -mdr-gen sarif -mdr-out @PTEST_DIR@/oracle/with-libc.sarif && sed -e "s:$FRAMAC_SHARE:REPLACED_FOR_PTESTS_FRAMAC_SHARE:g" -e "s:$FRAMAC_LIB:REPLACED_FOR_PTESTS_FRAMAC_LIB:g" -e "s:$FRAMAC_PLUGIN:REPLACED_FOR_PTESTS_FRAMAC_PLUGIN:g" -e "s:$PWD:REPLACED_FOR_PTESTS_PWD:g" @PTEST_DIR@/oracle/with-libc.sarif > @PTEST_DIR@/oracle/with-libc.sarif.clean && rm -f @PTEST_DIR@/oracle/with-libc.sarif - EXECNOW: @frama-c@ @PTEST_FILE@ -no-autoload-plugins -load-module eva,from,scope,markdown_report -eva -mdr-gen sarif -mdr-out @PTEST_DIR@/oracle/without-libc.sarif -mdr-no-print-libc && sed -e "s:$FRAMAC_SHARE:REPLACED_FOR_PTESTS_FRAMAC_SHARE:g" -e "s:$FRAMAC_LIB:REPLACED_FOR_PTESTS_FRAMAC_LIB:g" -e "s:$FRAMAC_PLUGIN:REPLACED_FOR_PTESTS_FRAMAC_PLUGIN:g" -e "s:$PWD:REPLACED_FOR_PTESTS_PWD:g" @PTEST_DIR@/oracle/without-libc.sarif > @PTEST_DIR@/oracle/without-libc.sarif.clean && rm -f @PTEST_DIR@/oracle/without-libc.sarif + CMD: @frama-c@ @PTEST_FILE@ -no-autoload-plugins -load-module eva,from,scope,markdown_report -eva -eva-no-results -mdr-gen sarif -mdr-sarif-deterministic + LOG: with-libc.sarif + OPT: -mdr-out @PTEST_DIR@/result/with-libc.sarif + LOG: without-libc.sarif + OPT: -mdr-no-print-libc -mdr-out @PTEST_DIR@/result/without-libc.sarif */ #include <string.h> diff --git a/src/plugins/markdown-report/tests/sarif/oracle/libc.0.res.oracle b/src/plugins/markdown-report/tests/sarif/oracle/libc.0.res.oracle new file mode 100644 index 00000000000..a64989bb4dd --- /dev/null +++ b/src/plugins/markdown-report/tests/sarif/oracle/libc.0.res.oracle @@ -0,0 +1,23 @@ +[kernel] Parsing tests/sarif/libc.c (with preprocessing) +[eva] Analyzing a complete application starting at main +[eva] Computing initial state +[eva] Initial state computed +[eva:initial-state] Values of globals at initialization + +[eva] done for function main +[eva] ====== VALUES COMPUTED ====== +[eva:summary] ====== ANALYSIS SUMMARY ====== + ---------------------------------------------------------------------------- + 1 function analyzed (out of 1): 100% coverage. + In this function, 4 statements reached (out of 4): 100% coverage. + ---------------------------------------------------------------------------- + No errors or warnings raised during the analysis. + ---------------------------------------------------------------------------- + 0 alarms generated by the analysis. + ---------------------------------------------------------------------------- + Evaluation of the logical properties reached by the analysis: + Assertions 0 valid 0 unknown 0 invalid 0 total + Preconditions 1 valid 0 unknown 0 invalid 1 total + 100% of the logical properties reached have been proven. + ---------------------------------------------------------------------------- +[mdr] Report tests/sarif/result/with-libc.sarif generated diff --git a/src/plugins/markdown-report/tests/sarif/oracle/libc.1.res.oracle b/src/plugins/markdown-report/tests/sarif/oracle/libc.1.res.oracle new file mode 100644 index 00000000000..48818092e72 --- /dev/null +++ b/src/plugins/markdown-report/tests/sarif/oracle/libc.1.res.oracle @@ -0,0 +1,23 @@ +[kernel] Parsing tests/sarif/libc.c (with preprocessing) +[eva] Analyzing a complete application starting at main +[eva] Computing initial state +[eva] Initial state computed +[eva:initial-state] Values of globals at initialization + +[eva] done for function main +[eva] ====== VALUES COMPUTED ====== +[eva:summary] ====== ANALYSIS SUMMARY ====== + ---------------------------------------------------------------------------- + 1 function analyzed (out of 1): 100% coverage. + In this function, 4 statements reached (out of 4): 100% coverage. + ---------------------------------------------------------------------------- + No errors or warnings raised during the analysis. + ---------------------------------------------------------------------------- + 0 alarms generated by the analysis. + ---------------------------------------------------------------------------- + Evaluation of the logical properties reached by the analysis: + Assertions 0 valid 0 unknown 0 invalid 0 total + Preconditions 1 valid 0 unknown 0 invalid 1 total + 100% of the logical properties reached have been proven. + ---------------------------------------------------------------------------- +[mdr] Report tests/sarif/result/without-libc.sarif generated diff --git a/src/plugins/markdown-report/tests/sarif/oracle/libc.res.oracle b/src/plugins/markdown-report/tests/sarif/oracle/libc.res.oracle deleted file mode 100644 index 189063ded53..00000000000 --- a/src/plugins/markdown-report/tests/sarif/oracle/libc.res.oracle +++ /dev/null @@ -1 +0,0 @@ -[kernel] Parsing tests/sarif/libc.c (with preprocessing) diff --git a/src/plugins/markdown-report/tests/sarif/oracle/with-libc.sarif.clean b/src/plugins/markdown-report/tests/sarif/oracle/with-libc.sarif similarity index 99% rename from src/plugins/markdown-report/tests/sarif/oracle/with-libc.sarif.clean rename to src/plugins/markdown-report/tests/sarif/oracle/with-libc.sarif index 5ab08127ec0..5ea3f5bbff8 100644 --- a/src/plugins/markdown-report/tests/sarif/oracle/with-libc.sarif.clean +++ b/src/plugins/markdown-report/tests/sarif/oracle/with-libc.sarif @@ -7,9 +7,8 @@ "tool": { "driver": { "name": "frama-c", - "fullName": "frama-c-21.1+dev (Scandium)", - "version": "21.1+dev (Scandium)", - "semanticVersion": "21.1+dev", + "fullName": "frama-c-omitted-for-deterministic-output", + "version": "omitted-for-deterministic-output", "downloadUri": "https://frama-c.com/download.html", "informationUri": "https://frama-c.com" } @@ -17,27 +16,23 @@ "invocations": [ { "commandLine": - "frama-c -check tests/sarif/libc.c -no-autoload-plugins -load-module eva,from,scope,markdown_report -eva -mdr-gen sarif -mdr-out tests/sarif/oracle/with-libc.sarif", + "frama-c -check tests/sarif/libc.c -no-autoload-plugins -load-module eva,from,scope,markdown_report -eva -eva-no-results -mdr-gen sarif -mdr-sarif-deterministic -mdr-out tests/sarif/result/with-libc.sarif", "arguments": [ "-check", "tests/sarif/libc.c", "-no-autoload-plugins", "-load-module", "eva,from,scope,markdown_report", "-eva", - "-mdr-gen", "sarif", "-mdr-out", - "tests/sarif/oracle/with-libc.sarif" + "-eva-no-results", "-mdr-gen", "sarif", + "-mdr-sarif-deterministic", "-mdr-out", + "tests/sarif/result/with-libc.sarif" ], "exitCode": 0, "executionSuccessful": true } ], "originalUriBaseIds": { - "FRAMAC_SHARE": { "uri": "file://REPLACED_FOR_PTESTS_FRAMAC_SHARE/" }, - "FRAMAC_LIB": { "uri": "file://REPLACED_FOR_PTESTS_FRAMAC_LIB/" }, - "FRAMAC_PLUGIN": { - "uri": "file://REPLACED_FOR_PTESTS_FRAMAC_PLUGIN/" - }, - "PWD": { - "uri": - "file://REPLACED_FOR_PTESTS_PWD/" - } + "FRAMAC_SHARE": { "uri": "omitted-for-deterministic-output/" }, + "FRAMAC_LIB": { "uri": "omitted-for-deterministic-output/" }, + "FRAMAC_PLUGIN": { "uri": "omitted-for-deterministic-output/" }, + "PWD": { "uri": "omitted-for-deterministic-output/" } }, "artifacts": [ { @@ -8686,12 +8681,12 @@ "physicalLocation": { "artifactLocation": { "uri": - "REPLACED_FOR_PTESTS_PWD/tests/sarif/libc.c" + "/home/andr/git/frama-c-2/src/plugins/markdown-report/tests/sarif/libc.c" }, "region": { - "startLine": 11, + "startLine": 13, "startColumn": 10, - "endLine": 11, + "endLine": 13, "endColumn": 19, "byteLength": 9 } diff --git a/src/plugins/markdown-report/tests/sarif/oracle/without-libc.sarif.clean b/src/plugins/markdown-report/tests/sarif/oracle/without-libc.sarif similarity index 68% rename from src/plugins/markdown-report/tests/sarif/oracle/without-libc.sarif.clean rename to src/plugins/markdown-report/tests/sarif/oracle/without-libc.sarif index c874741c93b..d8cbdb4af85 100644 --- a/src/plugins/markdown-report/tests/sarif/oracle/without-libc.sarif.clean +++ b/src/plugins/markdown-report/tests/sarif/oracle/without-libc.sarif @@ -7,9 +7,8 @@ "tool": { "driver": { "name": "frama-c", - "fullName": "frama-c-21.1+dev (Scandium)", - "version": "21.1+dev (Scandium)", - "semanticVersion": "21.1+dev", + "fullName": "frama-c-omitted-for-deterministic-output", + "version": "omitted-for-deterministic-output", "downloadUri": "https://frama-c.com/download.html", "informationUri": "https://frama-c.com" } @@ -17,27 +16,23 @@ "invocations": [ { "commandLine": - "frama-c -check tests/sarif/libc.c -no-autoload-plugins -load-module eva,from,scope,markdown_report -eva -mdr-gen sarif -mdr-out tests/sarif/oracle/without-libc.sarif -mdr-no-print-libc", + "frama-c -check tests/sarif/libc.c -no-autoload-plugins -load-module eva,from,scope,markdown_report -eva -eva-no-results -mdr-gen sarif -mdr-sarif-deterministic -mdr-no-print-libc -mdr-out tests/sarif/result/without-libc.sarif", "arguments": [ "-check", "tests/sarif/libc.c", "-no-autoload-plugins", "-load-module", "eva,from,scope,markdown_report", "-eva", - "-mdr-gen", "sarif", "-mdr-out", - "tests/sarif/oracle/without-libc.sarif", "-mdr-no-print-libc" + "-eva-no-results", "-mdr-gen", "sarif", + "-mdr-sarif-deterministic", "-mdr-no-print-libc", "-mdr-out", + "tests/sarif/result/without-libc.sarif" ], "exitCode": 0, "executionSuccessful": true } ], "originalUriBaseIds": { - "FRAMAC_SHARE": { "uri": "file://REPLACED_FOR_PTESTS_FRAMAC_SHARE/" }, - "FRAMAC_LIB": { "uri": "file://REPLACED_FOR_PTESTS_FRAMAC_LIB/" }, - "FRAMAC_PLUGIN": { - "uri": "file://REPLACED_FOR_PTESTS_FRAMAC_PLUGIN/" - }, - "PWD": { - "uri": - "file://REPLACED_FOR_PTESTS_PWD/" - } + "FRAMAC_SHARE": { "uri": "omitted-for-deterministic-output/" }, + "FRAMAC_LIB": { "uri": "omitted-for-deterministic-output/" }, + "FRAMAC_PLUGIN": { "uri": "omitted-for-deterministic-output/" }, + "PWD": { "uri": "omitted-for-deterministic-output/" } }, "artifacts": [ { @@ -59,12 +54,12 @@ "physicalLocation": { "artifactLocation": { "uri": - "REPLACED_FOR_PTESTS_PWD/tests/sarif/libc.c" + "/home/andr/git/frama-c-2/src/plugins/markdown-report/tests/sarif/libc.c" }, "region": { - "startLine": 11, + "startLine": 13, "startColumn": 10, - "endLine": 11, + "endLine": 13, "endColumn": 19, "byteLength": 9 } -- GitLab