mirror of https://gerrit.osmocom.org/libosmocore
logging/vty: fix: actually ignore deprecated logging commands
We shall not prevent programs from starting if their configuration files contain deprecated 'logging level ...' commands. Just print a warning and return CMD_SUCCESS instead of CMD_WARNING. While writing a unit test, another funny bug has been uncovered. Parsing of a deprecated command indeed triggers a deprecation warning, originated from libosmovty's log_deprecated_func(). This function simply calls vty_out(), but... Since the invocation of the vty_out() happens _before_ the VTY is initialized, the process is actually writing that warning to its own stdin! Most likely, because we use talloc_zero() to allocate a new instance of struct 'vty'. As a side effect, the evil warning magically appears in the output of 'make check', breaking the test statistics. Let's work around this bug for now by redirecting stdin to /dev/null. Change-Id: Ia934581410cd41594791d4e14ee74c16abe1009a Fixes: Ic9c1b566ec4a459f03e6319cf369691903cf9d00
This commit is contained in:
parent
75c242e6a2
commit
4abda9ea26
|
@ -998,7 +998,7 @@ static int config_write_log(struct vty *vty)
|
|||
static int log_deprecated_func(struct cmd_element *cmd, struct vty *vty, int argc, const char *argv[])
|
||||
{
|
||||
vty_out(vty, "%% Ignoring deprecated '%s'%s", cmd->string, VTY_NEWLINE);
|
||||
return CMD_WARNING;
|
||||
return CMD_SUCCESS; /* Otherwise the process would terminate */
|
||||
}
|
||||
|
||||
void logging_vty_add_deprecated_subsys(void *ctx, const char *name)
|
||||
|
|
|
@ -306,6 +306,7 @@ EXTRA_DIST = testsuite.at $(srcdir)/package.m4 $(TESTSUITE) \
|
|||
vty/ok_more_spaces.cfg \
|
||||
vty/ok_tabs_and_spaces.cfg \
|
||||
vty/ok_tabs.cfg \
|
||||
vty/ok_deprecated_logging.cfg \
|
||||
comp128/comp128_test.ok bits/bitfield_test.ok \
|
||||
utils/utils_test.ok utils/utils_test.err stats/stats_test.ok \
|
||||
bitvec/bitvec_test.ok msgb/msgb_test.ok bits/bitcomp_test.ok \
|
||||
|
|
|
@ -199,7 +199,10 @@ AT_SETUP([vty])
|
|||
AT_KEYWORDS([vty])
|
||||
cat $abs_srcdir/vty/vty_test.ok > expout
|
||||
cp $abs_srcdir/vty/*.cfg .
|
||||
AT_CHECK([$abs_top_builddir/tests/vty/vty_test], [0], [expout], [ignore])
|
||||
# FIXME: calling vty_out() during initialization of the VTY interface would cause
|
||||
# the process write to its own *stdin*! This breaks the output of 'make check'.
|
||||
# Let's work this around untill the bug in libosmovty is fixed.
|
||||
AT_CHECK([$abs_top_builddir/tests/vty/vty_test 0>/dev/null], [0], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([gprs-bssgp])
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
log stderr
|
||||
logging filter all 1
|
||||
logging level depr debug
|
|
@ -29,6 +29,7 @@
|
|||
|
||||
#include <osmocom/core/application.h>
|
||||
#include <osmocom/core/talloc.h>
|
||||
#include <osmocom/core/logging_internal.h>
|
||||
#include <osmocom/core/logging.h>
|
||||
#include <osmocom/core/stats.h>
|
||||
#include <osmocom/core/utils.h>
|
||||
|
@ -442,6 +443,8 @@ void test_vty_add_cmds()
|
|||
install_element(CONFIG_NODE, &cfg_ret_warning_cmd);
|
||||
install_element(CONFIG_NODE, &cfg_ret_success_cmd);
|
||||
|
||||
logging_vty_add_deprecated_subsys(tall_log_ctx, "depr");
|
||||
|
||||
install_element(CONFIG_NODE, &cfg_level1_cmd);
|
||||
install_node(&level1_node, NULL);
|
||||
install_element(LEVEL1_NODE, &cfg_level1_child_cmd);
|
||||
|
@ -544,6 +547,7 @@ int main(int argc, char **argv)
|
|||
test_exit_by_indent("ok_indented_root.cfg", 0);
|
||||
test_exit_by_indent("ok_empty_parent.cfg", 0);
|
||||
test_exit_by_indent("fail_cmd_ret_warning.cfg", -EINVAL);
|
||||
test_exit_by_indent("ok_deprecated_logging.cfg", 0);
|
||||
|
||||
test_is_cmd_ambiguous();
|
||||
|
||||
|
|
|
@ -290,6 +290,8 @@ reading file fail_cmd_ret_warning.cfg, expecting rc=-22
|
|||
Called: 'return-success'
|
||||
Called: 'return-warning'
|
||||
got rc=-22
|
||||
reading file ok_deprecated_logging.cfg, expecting rc=0
|
||||
got rc=0
|
||||
Going to test is_cmd_ambiguous()
|
||||
Going to execute 'ambiguous_nr'
|
||||
Called: 'ambiguous_nr [<0-23>]' (argc=0)
|
||||
|
|
Loading…
Reference in New Issue