From b6e9776a11c52b5ee186e4f36aa7097520f7a5d5 Mon Sep 17 00:00:00 2001 From: Vern Paxson Date: Tue, 1 Jun 2021 09:25:30 -0700 Subject: [PATCH] updates to test suite tests for compatibility with upcoming ZAM functionality --- testing/btest/bifs/bloomfilter.zeek | 22 ++++++++++---- testing/btest/bifs/topk.zeek | 4 +-- .../broker/remote_event_index_types.zeek | 2 +- .../btest/broker/store/invalid-handle.zeek | 5 ++++ testing/btest/core/div-by-zero.zeek | 15 ++++++++++ .../btest/core/parse-only-usage-issues.zeek | 5 ++++ .../btest/coverage/zeek-profiler-file.zeek | 2 ++ testing/btest/language/common-mistakes.zeek | 24 --------------- testing/btest/language/common-mistakes2.zeek | 30 +++++++++++++++++++ testing/btest/language/function-sending.zeek | 2 +- .../language/index-assignment-invalid.zeek | 2 ++ .../btest/language/type-coerce-numerics.zeek | 5 ++++ .../btest/language/uninitialized-local2.zeek | 3 ++ .../btest/language/uninitialized-local3.zeek | 1 + testing/btest/plugins/func-hook.zeek | 3 ++ .../frameworks/netcontrol/basic-cluster.zeek | 5 ++-- .../frameworks/sumstats/sample-cluster.zeek | 3 +- testing/btest/supervisor/create.zeek | 6 ++++ 18 files changed, 103 insertions(+), 36 deletions(-) create mode 100644 testing/btest/language/common-mistakes2.zeek diff --git a/testing/btest/bifs/bloomfilter.zeek b/testing/btest/bifs/bloomfilter.zeek index 26b5cdbf5f..dcd900d203 100644 --- a/testing/btest/bifs/bloomfilter.zeek +++ b/testing/btest/bifs/bloomfilter.zeek @@ -1,4 +1,5 @@ -# @TEST-EXEC: zeek -b %INPUT >output 2>err +# Use -D so that the induced FPs checked for below are consistent. +# @TEST-EXEC: zeek -D -b %INPUT >output 2>err # @TEST-EXEC: btest-diff output # @TEST-EXEC: btest-diff err @@ -40,10 +41,6 @@ function test_basic_bloom_filter() local bf_edge2 = bloomfilter_basic_init(0.9999999, 1); local bf_edge3 = bloomfilter_basic_init(0.9999999, 100000000000); - # Invalid parameters. - local bf_bug0 = bloomfilter_basic_init(-0.5, 42); - local bf_bug1 = bloomfilter_basic_init(1.1, 42); - # Merging local bf_cnt2 = bloomfilter_basic_init(0.1, 1000); bloomfilter_add(bf_cnt2, 42); @@ -61,6 +58,19 @@ function test_basic_bloom_filter() print bloomfilter_lookup(bf_empty_merged, 42); } +# We split off the following into their own tests because ZAM error handling +# needs to terminate the current function's execution when these generate +# run-time errors. +function test_bad_param1() + { + local bf_bug0 = bloomfilter_basic_init(-0.5, 42); + } + +function test_bad_param2() + { + local bf_bug1 = bloomfilter_basic_init(1.1, 42); + } + function test_counting_bloom_filter() { local bf = bloomfilter_counting_init(3, 32, 3); @@ -94,4 +104,6 @@ event zeek_init() { test_basic_bloom_filter(); test_counting_bloom_filter(); + test_bad_param1(); + test_bad_param2(); } diff --git a/testing/btest/bifs/topk.zeek b/testing/btest/bifs/topk.zeek index 9646eaab27..4fade9f69b 100644 --- a/testing/btest/bifs/topk.zeek +++ b/testing/btest/bifs/topk.zeek @@ -148,10 +148,10 @@ event zeek_init() print topk_count(k3, "d"); print topk_epsilon(k3, "d"); - local styped: vector of count; + local styped: vector of string; styped = topk_get_top(k3, 3); for ( i in styped ) - print i, styped[i]; + print i, styped[i]; local anytyped: vector of any; anytyped = topk_get_top(k3, 3); diff --git a/testing/btest/broker/remote_event_index_types.zeek b/testing/btest/broker/remote_event_index_types.zeek index cfe12696a2..b0cc81efc9 100644 --- a/testing/btest/broker/remote_event_index_types.zeek +++ b/testing/btest/broker/remote_event_index_types.zeek @@ -1,6 +1,6 @@ # @TEST-PORT: BROKER_PORT # -# @TEST-EXEC: btest-bg-run recv "zeek -B broker -b ../recv.zeek >recv.out" +# @TEST-EXEC: btest-bg-run recv "ZEEK_COMPILE_ALL=1 zeek -B broker -b ../recv.zeek >recv.out" # @TEST-EXEC: btest-bg-run send "zeek -B broker -b ../send.zeek >send.out" # # @TEST-EXEC: btest-bg-wait 45 diff --git a/testing/btest/broker/store/invalid-handle.zeek b/testing/btest/broker/store/invalid-handle.zeek index c97669af60..3b270fa945 100644 --- a/testing/btest/broker/store/invalid-handle.zeek +++ b/testing/btest/broker/store/invalid-handle.zeek @@ -1,3 +1,8 @@ +# This crashes with ZAM because it explicitly violates typing, which happens +# to work in the intepreter, but isn't sound. +# +# @TEST-REQUIRES: test "${ZEEK_ZAM}" != "1" +# # @TEST-EXEC: zeek -b %INPUT >out 2>&1 # @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff out diff --git a/testing/btest/core/div-by-zero.zeek b/testing/btest/core/div-by-zero.zeek index d1c95db88c..77556aeccf 100644 --- a/testing/btest/core/div-by-zero.zeek +++ b/testing/btest/core/div-by-zero.zeek @@ -1,6 +1,9 @@ # @TEST-EXEC: zeek -b %INPUT >out 2>&1 # @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff out +global v1 = vector(10, 20, 30); +global v2 = vector(5, 2, 0); + event div_int(a: int, b: int) { print a / b; @@ -16,6 +19,11 @@ event div_double(a: double, b: double) print a / b; } +event div_vec() + { + print v1 / v2; + } + event mod_int(a: int, b: int) { print a % b; @@ -26,6 +34,11 @@ event mod_count(a: count, b: count) print a % b; } +event mod_vec() + { + print v1 % v2; + } + event zeek_init() { event div_int(10, 0); @@ -33,4 +46,6 @@ event zeek_init() event div_double(10.0, 0.0); event mod_int(10, 0); event mod_count(10, 0); + event div_vec(); + event mod_vec(); } diff --git a/testing/btest/core/parse-only-usage-issues.zeek b/testing/btest/core/parse-only-usage-issues.zeek index 7ed3b1792e..551d8ce3b6 100644 --- a/testing/btest/core/parse-only-usage-issues.zeek +++ b/testing/btest/core/parse-only-usage-issues.zeek @@ -1,3 +1,8 @@ +# Skip this test when using ZAM, as it will generate a hard error (since it's +# certain that the variable is used w/o initialization) rather than just +# a warning. +# @TEST-REQUIRES: test "${ZEEK_ZAM}" != "1" +# # @TEST-DOC: ``zeek -a -u`` should detect usage issues without executing code # @TEST-EXEC: zeek -b -a -u %INPUT >out 2>&1 # @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff out diff --git a/testing/btest/coverage/zeek-profiler-file.zeek b/testing/btest/coverage/zeek-profiler-file.zeek index 087f850231..05f2845fa5 100644 --- a/testing/btest/coverage/zeek-profiler-file.zeek +++ b/testing/btest/coverage/zeek-profiler-file.zeek @@ -1,3 +1,5 @@ +# @TEST-REQUIRES: test "${ZEEK_ZAM}" != "1" +# # @TEST-EXEC: ZEEK_PROFILER_FILE=cov.txt zeek -b -r $TRACES/http/get.trace profiling-test1.zeek # @TEST-EXEC: grep profiling-test1.zeek cov.txt > step1.out # @TEST-EXEC: btest-diff step1.out diff --git a/testing/btest/language/common-mistakes.zeek b/testing/btest/language/common-mistakes.zeek index b810dd22ea..6837219431 100644 --- a/testing/btest/language/common-mistakes.zeek +++ b/testing/btest/language/common-mistakes.zeek @@ -10,10 +10,6 @@ # @TEST-EXEC: btest-diff 2.out # @TEST-EXEC: btest-diff 2.err -# @TEST-EXEC: zeek -b 3.zeek >3.out 2>3.err -# @TEST-EXEC: btest-diff 3.out -# @TEST-EXEC: btest-diff 3.err - @TEST-START-FILE 1.zeek type myrec: record { f: string &optional; @@ -76,23 +72,3 @@ event zeek_init() } @TEST-END-FILE - -@TEST-START-FILE 3.zeek -function foo(v: vector of any) - { - print "in foo"; - # Vector append incompatible element type - v += "ok"; - # Unreachable - print "foo done"; - } - -event zeek_init() - { - local v: vector of count; - v += 1; - foo(v); - # Unreachable - print "zeek_init done", v; - } -@TEST-END-FILE diff --git a/testing/btest/language/common-mistakes2.zeek b/testing/btest/language/common-mistakes2.zeek new file mode 100644 index 0000000000..3ee26a21a4 --- /dev/null +++ b/testing/btest/language/common-mistakes2.zeek @@ -0,0 +1,30 @@ +# A companion tonguage/common-mistakes.zeek. Split off because we skip this +# test when using ZAM, since it employs a type-checking violation via +# vector-of-any, which doesn't seem worth going out of our way to support +# in ZAM (and it isn't dead simple to do so). + +# @TEST-REQUIRES: test "${ZEEK_ZAM}" != "1" + +# @TEST-EXEC: zeek -b 3.zeek >3.out 2>3.err +# @TEST-EXEC: btest-diff 3.out +# @TEST-EXEC: btest-diff 3.err + +@TEST-START-FILE 3.zeek +function foo(v: vector of any) + { + print "in foo"; + # Vector append incompatible element type + v += "ok"; + # Unreachable + print "foo done"; + } + +event zeek_init() + { + local v: vector of count; + v += 1; + foo(v); + # Unreachable + print "zeek_init done", v; + } +@TEST-END-FILE diff --git a/testing/btest/language/function-sending.zeek b/testing/btest/language/function-sending.zeek index 234e0a5431..07c0f921b8 100644 --- a/testing/btest/language/function-sending.zeek +++ b/testing/btest/language/function-sending.zeek @@ -1,6 +1,6 @@ # @TEST-PORT: BROKER_PORT # -# @TEST-EXEC: btest-bg-run recv "zeek -D -B broker -b ../recv.zeek >recv.out" +# @TEST-EXEC: btest-bg-run recv "ZEEK_COMPILE_ALL=1 zeek -D -B broker -b ../recv.zeek >recv.out" # @TEST-EXEC: btest-bg-run send "zeek -D -B broker -b ../send.zeek >send.out" # # @TEST-EXEC: btest-bg-wait 20 diff --git a/testing/btest/language/index-assignment-invalid.zeek b/testing/btest/language/index-assignment-invalid.zeek index a42c81320b..5c1f3b2839 100644 --- a/testing/btest/language/index-assignment-invalid.zeek +++ b/testing/btest/language/index-assignment-invalid.zeek @@ -1,3 +1,5 @@ +# @TEST-REQUIRES: test "${ZEEK_ZAM}" != "1" +# # @TEST-EXEC: zeek -b %INPUT >output 2>&1 # @TEST-EXEC: grep "error" output >output2 # @TEST-EXEC: for i in 1 2 3 4 5; do cat output2 | cut -d'|' -f$i >>out; done diff --git a/testing/btest/language/type-coerce-numerics.zeek b/testing/btest/language/type-coerce-numerics.zeek index d31d877b35..80e475ae12 100644 --- a/testing/btest/language/type-coerce-numerics.zeek +++ b/testing/btest/language/type-coerce-numerics.zeek @@ -1,3 +1,8 @@ +# We skip this test for ZAM, because it will optimize away the values +# that are created to induce overflows. An alternative would be to change +# the test to print those values. +# @TEST-REQUIRES: test "${ZEEK_ZAM}" != "1" +# # @TEST-EXEC: zeek -b first_set.zeek >first_set.out 2>first_set.err # @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff first_set.out # @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff first_set.err diff --git a/testing/btest/language/uninitialized-local2.zeek b/testing/btest/language/uninitialized-local2.zeek index 118ab77c83..4d30dad5c3 100644 --- a/testing/btest/language/uninitialized-local2.zeek +++ b/testing/btest/language/uninitialized-local2.zeek @@ -1,3 +1,6 @@ +# For ZAM, this test generates a hard error rather than a warning. +# @TEST-REQUIRES: test "${ZEEK_ZAM}" != "1" +# # @TEST-EXEC: zeek -b %INPUT >out 2>err # @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff out # @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff err diff --git a/testing/btest/language/uninitialized-local3.zeek b/testing/btest/language/uninitialized-local3.zeek index 79629d2138..6f6261e470 100644 --- a/testing/btest/language/uninitialized-local3.zeek +++ b/testing/btest/language/uninitialized-local3.zeek @@ -1,3 +1,4 @@ +# @TEST-REQUIRES: test "${ZEEK_ZAM}" != "1" # @TEST-EXEC: ZEEK_USAGE_ISSUES=2 zeek -b %INPUT >out 2>err # @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff out # @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff err diff --git a/testing/btest/plugins/func-hook.zeek b/testing/btest/plugins/func-hook.zeek index e5787b0b56..ccfe04c0d8 100644 --- a/testing/btest/plugins/func-hook.zeek +++ b/testing/btest/plugins/func-hook.zeek @@ -1,3 +1,6 @@ +# This doesn't work for ZAM due to inlining making the "foo" hook ineffectual. +# @TEST-REQUIRES: test "${ZEEK_ZAM}" != "1" +# # @TEST-EXEC: ${DIST}/auxil/zeek-aux/plugin-support/init-plugin -u . Demo Hooks # @TEST-EXEC: cp -r %DIR/func-hook-plugin/* . # @TEST-EXEC: ./configure --zeek-dist=${DIST} && make diff --git a/testing/btest/scripts/base/frameworks/netcontrol/basic-cluster.zeek b/testing/btest/scripts/base/frameworks/netcontrol/basic-cluster.zeek index 61b44d6692..55bc9776db 100644 --- a/testing/btest/scripts/base/frameworks/netcontrol/basic-cluster.zeek +++ b/testing/btest/scripts/base/frameworks/netcontrol/basic-cluster.zeek @@ -5,10 +5,11 @@ # @TEST-EXEC: btest-bg-run manager-1 "cp ../cluster-layout.zeek . && CLUSTER_NODE=manager-1 zeek -b %INPUT" # @TEST-EXEC: btest-bg-run worker-1 "cp ../cluster-layout.zeek . && CLUSTER_NODE=worker-1 zeek -b --pseudo-realtime -C -r $TRACES/tls/ecdhe.pcap %INPUT" -# @TEST-EXEC: $SCRIPTS/wait-for-file manager-1/lost 15 || (btest-bg-wait -k 1 && false) +# @TEST-EXEC: $SCRIPTS/wait-for-file manager-1/lost 45 || (btest-bg-wait -k 1 && false) # @TEST-EXEC: btest-bg-run worker-2 "cp ../cluster-layout.zeek . && CLUSTER_NODE=worker-2 zeek -b --pseudo-realtime -C -r $TRACES/tls/ecdhe.pcap %INPUT" -# @TEST-EXEC: btest-bg-wait 30 +# This timeout needs to be large to accommodate ZAM compilation delays. +# @TEST-EXEC: btest-bg-wait 90 # @TEST-EXEC: btest-diff worker-1/.stdout # @TEST-EXEC: btest-diff worker-2/.stdout diff --git a/testing/btest/scripts/base/frameworks/sumstats/sample-cluster.zeek b/testing/btest/scripts/base/frameworks/sumstats/sample-cluster.zeek index c5057760fa..fc19dfad2f 100644 --- a/testing/btest/scripts/base/frameworks/sumstats/sample-cluster.zeek +++ b/testing/btest/scripts/base/frameworks/sumstats/sample-cluster.zeek @@ -5,7 +5,8 @@ # @TEST-EXEC: btest-bg-run manager-1 ZEEKPATH=$ZEEKPATH:.. CLUSTER_NODE=manager-1 zeek -b %INPUT # @TEST-EXEC: btest-bg-run worker-1 ZEEKPATH=$ZEEKPATH:.. CLUSTER_NODE=worker-1 zeek -b %INPUT # @TEST-EXEC: btest-bg-run worker-2 ZEEKPATH=$ZEEKPATH:.. CLUSTER_NODE=worker-2 zeek -b %INPUT -# @TEST-EXEC: btest-bg-wait 45 +# This timeout needs to be large to accommodate ZAM compilation delays. +# @TEST-EXEC: btest-bg-wait 90 # @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-sort btest-diff manager-1/.stdout @load base/frameworks/sumstats diff --git a/testing/btest/supervisor/create.zeek b/testing/btest/supervisor/create.zeek index 6e4bfe518d..4288e992aa 100644 --- a/testing/btest/supervisor/create.zeek +++ b/testing/btest/supervisor/create.zeek @@ -19,6 +19,12 @@ event zeek_init() print supervisor_output_file, "supervisor zeek_init()"; local f = open(pid_file); print f, getpid(); + + # The following is needed for ZAM code, which will otherwise + # keep the file open until the corresponding frame slot + # is reused or (finally) goes out of scope. + close(f); + local sn = Supervisor::NodeConfig($name="grault"); local res = Supervisor::create(sn);