zeek-setup: Load scrips before running unit tests

It is currently not possible to call a->Conn()->GetVal() or construct a
zeek/file_analysis/File object from within doctests, as these quickly
reference the unpopulated zeek::id namespace to construct Val objects
of various types, making it hard write basic tests without completely
re-organizing.

Move running of the unit tests after parsing the scripts, so it is possible
for some basic exercising of File objects within tests.
This commit is contained in:
Arne Welzel 2023-03-27 13:54:09 +02:00
parent 71f487bd20
commit 9f8eb682b1
2 changed files with 13 additions and 17 deletions

View file

@ -679,7 +679,7 @@ SetupResult setup(int argc, char** argv, Options* zopts)
if ( options.plugins_to_load.empty() && options.scripts_to_load.empty() &&
options.script_options_to_set.empty() && ! options.pcap_file && ! options.interface &&
! options.identifier_to_print && ! command_line_policy && ! options.print_plugins &&
! options.supervisor_mode && ! Supervisor::ThisNode() )
! options.supervisor_mode && ! Supervisor::ThisNode() && ! options.run_unit_tests )
add_input_file("-");
for ( const auto& script_option : options.script_options_to_set )
@ -726,17 +726,6 @@ SetupResult setup(int argc, char** argv, Options* zopts)
plugin_mgr->ActivateDynamicPlugins(! options.bare_mode);
// Delay the unit test until here so that plugins have been loaded.
if ( options.run_unit_tests )
{
set_signal_mask(false); // Allow ctrl-c to abort the tests early
doctest::Context context;
auto dargs = to_cargs(options.doctest_args);
context.applyCommandLine(dargs.size(), dargs.data());
ZEEK_LSAN_ENABLE();
exit(context.run());
}
// Print usage after plugins load so that any path extensions are properly shown.
if ( options.print_usage )
usage(argv[0], 0);
@ -808,6 +797,18 @@ SetupResult setup(int argc, char** argv, Options* zopts)
init_net_var();
run_bif_initializers();
// Delay the unit test until here so that plugins and script
// types have been fully loaded.
if ( options.run_unit_tests )
{
set_signal_mask(false); // Allow ctrl-c to abort the tests early
doctest::Context context;
auto dargs = to_cargs(options.doctest_args);
context.applyCommandLine(dargs.size(), dargs.data());
ZEEK_LSAN_ENABLE();
exit(context.run());
}
// Assign the script_args for command line processing in Zeek scripts.
if ( ! options.script_args.empty() )
{