From 947294efaba4c5801c565ec1a1ae5325f7d52950 Mon Sep 17 00:00:00 2001 From: Arne Welzel Date: Thu, 22 Feb 2024 09:53:12 +0100 Subject: [PATCH] utils: Introduce packages.zeek with can_load() helper --- scripts/base/init-default.zeek | 1 + scripts/base/utils/packages.zeek | 16 ++++++++++ .../canonified_loaded_scripts.log | 1 + .../scripts.base.utils.packages/output | 4 +++ .../btest/scripts/base/utils/packages.zeek | 32 +++++++++++++++++++ 5 files changed, 54 insertions(+) create mode 100644 scripts/base/utils/packages.zeek create mode 100644 testing/btest/Baseline/scripts.base.utils.packages/output create mode 100644 testing/btest/scripts/base/utils/packages.zeek diff --git a/scripts/base/init-default.zeek b/scripts/base/init-default.zeek index 3a3efb6853..3c65158182 100644 --- a/scripts/base/init-default.zeek +++ b/scripts/base/init-default.zeek @@ -17,6 +17,7 @@ @load base/utils/geoip-distance @load base/utils/hash_hrw @load base/utils/numbers +@load base/utils/packages @load base/utils/paths @load base/utils/patterns @load base/utils/queue diff --git a/scripts/base/utils/packages.zeek b/scripts/base/utils/packages.zeek new file mode 100644 index 0000000000..24d6197bbd --- /dev/null +++ b/scripts/base/utils/packages.zeek @@ -0,0 +1,16 @@ +##! Rudimentary functions for helping with Zeek packages. + +## Checks whether @load of a given package name could +## be successful. +## +## This tests for the existence of corresponding script files +## in ZEEKPATH. It does not attempt to parse and validate +## any actual Zeek script code. +## +## path: The filename, package or path to test. +## +## Returns: T if the given filename, package or path may load. +function can_load(p: string): bool + { + return find_in_zeekpath(p) != ""; + } diff --git a/testing/btest/Baseline/coverage.default-load-baseline/canonified_loaded_scripts.log b/testing/btest/Baseline/coverage.default-load-baseline/canonified_loaded_scripts.log index 77e4e88706..a34d335a26 100644 --- a/testing/btest/Baseline/coverage.default-load-baseline/canonified_loaded_scripts.log +++ b/testing/btest/Baseline/coverage.default-load-baseline/canonified_loaded_scripts.log @@ -290,6 +290,7 @@ scripts/base/init-default.zeek scripts/base/utils/files.zeek scripts/base/utils/geoip-distance.zeek scripts/base/utils/numbers.zeek + scripts/base/utils/packages.zeek scripts/base/utils/queue.zeek scripts/base/utils/strings.zeek scripts/base/utils/thresholds.zeek diff --git a/testing/btest/Baseline/scripts.base.utils.packages/output b/testing/btest/Baseline/scripts.base.utils.packages/output new file mode 100644 index 0000000000..459feb4f3f --- /dev/null +++ b/testing/btest/Baseline/scripts.base.utils.packages/output @@ -0,0 +1,4 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +no pkg3 +pkg1! +pkg2! diff --git a/testing/btest/scripts/base/utils/packages.zeek b/testing/btest/scripts/base/utils/packages.zeek new file mode 100644 index 0000000000..f9636def0a --- /dev/null +++ b/testing/btest/scripts/base/utils/packages.zeek @@ -0,0 +1,32 @@ +# @TEST-EXEC: zeek -b %INPUT >output +# @TEST-EXEC: btest-diff output + +@load base/utils/packages + +@if ( can_load("pkg1") ) +@load pkg1 +@endif + +@if ( can_load("pkg2") ) +@load pkg2 +@endif + +@if ( can_load("pkg3") ) +@load pkg3 +@else +print "no pkg3"; +@endif + +@TEST-START-FILE pkg1.zeek +event zeek_init() + { + print "pkg1!"; + } +@TEST-END-FILE + +@TEST-START-FILE pkg2/__load__.zeek +event zeek_init() + { + print "pkg2!"; + } +@TEST-END-FILE