diff --git a/.github/workflows/csaf_2.1_cpe.yml b/.github/workflows/csaf_2.1_cpe.yml index c9fcf423..f5ca85f2 100644 --- a/.github/workflows/csaf_2.1_cpe.yml +++ b/.github/workflows/csaf_2.1_cpe.yml @@ -19,4 +19,6 @@ jobs: with: node-version: '20' - name: Perform CPE Dictionary Test - run: ./csaf_2.1/test/cpe/run_tests.sh + run: ./csaf_2.1/test/cpe/run_dictionary_tests.sh + - name: Perform CPE local examples Test + run: ./csaf_2.1/test/cpe/run_local_tests.sh diff --git a/csaf_2.1/test/cpe/data/invalid/cpe.txt b/csaf_2.1/test/cpe/data/invalid/cpe.txt new file mode 100644 index 00000000..f48cc39a --- /dev/null +++ b/csaf_2.1/test/cpe/data/invalid/cpe.txt @@ -0,0 +1,5 @@ +PREFIXcpe:/o:redhat:rhel_aus:7.6::server +cpe:/o:redhat:rhel_aus:7.6::server::SUFFIX +PREFIXcpe:2.3:a:admin_management_xtended_project:admin_management_xtended:0.8:*:*:*:*:wordpress:*:* +cpe:2.3:a:admin_management_xtended_project:admin_management_xtended:0.8:*:*:*:*:wordpress:*:*" +cpe:2.3:a:admin_management_xtended_project:admin_management_xtended:0.8:*:*:*:*:wordpress:*:** diff --git a/csaf_2.1/test/cpe/data/valid/cpe.txt b/csaf_2.1/test/cpe/data/valid/cpe.txt new file mode 100644 index 00000000..9a5d7be9 --- /dev/null +++ b/csaf_2.1/test/cpe/data/valid/cpe.txt @@ -0,0 +1,3 @@ +cpe:2.3:a:admin_management_xtended_project:admin_management_xtended:0.8:*:*:*:*:wordpress:*:*other* +cpe:2.3:a:admin_management_xtended_project:admin_management_xtended:0.8:*:*:*:*:wordpress:*:*other???? +cpe:/o:redhat:rhel_aus:7.6::server diff --git a/csaf_2.1/test/cpe/run_tests.sh b/csaf_2.1/test/cpe/run_dictionary_tests.sh similarity index 100% rename from csaf_2.1/test/cpe/run_tests.sh rename to csaf_2.1/test/cpe/run_dictionary_tests.sh diff --git a/csaf_2.1/test/cpe/run_local_tests.sh b/csaf_2.1/test/cpe/run_local_tests.sh new file mode 100755 index 00000000..38f22480 --- /dev/null +++ b/csaf_2.1/test/cpe/run_local_tests.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +SCHEMA=csaf_2.1/json_schema/csaf_json_schema.json +VALIDATOR=csaf_2.1/test/cpe/test-regex.js +DATA_VALID=csaf_2.1/test/cpe/data/valid/cpe.txt +DATA_INVALID=csaf_2.1/test/cpe/data/invalid/cpe.txt + +FAIL=0 + +# go to root of git repository +cd "$(dirname "$0")"/../../.. || exit + + +validate() { + printf "Testing file %s against cpe regex from %s ... \n" "$1" "$SCHEMA" + if node "$VALIDATOR" "$SCHEMA" "$1" "$2"; then + printf "SUCCESS\n" + else + printf "FAILED\n" + FAIL=1 + fi + +} + +echo -n "Test conforming (not necessary existing) CPEs... " +DATA=$DATA_VALID +validate $DATA true +printf "done\n" + +echo -n "Test non-conforming CPEs... " +DATA=$DATA_INVALID +validate $DATA false +printf "done\n" + + +exit $FAIL diff --git a/csaf_2.1/test/cpe/test-regex.js b/csaf_2.1/test/cpe/test-regex.js index 567ba08e..98e4d2f9 100644 --- a/csaf_2.1/test/cpe/test-regex.js +++ b/csaf_2.1/test/cpe/test-regex.js @@ -10,15 +10,16 @@ const r = new RegExp(pattern) console.log('Current regex to test:', '\n', pattern) const cpeStr = fs.readFileSync(args[1], 'utf8').split('\n') +const assertion = !((args[2] ?? true) === "false") let failed = false cpeStr.forEach(element => { if (element.length > 0) { const result = (r.exec(element) != null) - failed = failed | !result - if (!result) { - console.log(result, '\t', element) + failed = failed | (result !== assertion) + if (result !== assertion) { + console.log(result,'but expected', assertion, '\t', element) } } });