All "struct stmt_ops" really must have a json hook set, to handle the statement. And almost all of them do, except "struct chain_stmt_ops". Soon a unit test will be added, to check that all stmt_ops have a json() hook. Also, the missing hook in "struct chain_stmt_ops" is a bug, that is now understood and shall be fixed soon/later. Note that we can already hit the bug, if we would call `nft -j list ruleset` at the end of test "tests/shell/testcases/nft-f/sample-ruleset": warning: stmt ops chain have no json callback Soon tests will be added, that hit this condition. Printing a message to stderr breaks those tests, and blocks adding the tests. Drop this warning on stderr, so we can add those other tests sooner, as those tests are useful for testing JSON code in general. The warning stderr was useful for finding the problem, but the problem is now understood and will be addressed separately. Drop the message to unblock adding those tests. Signed-off-by: Thomas Haller <thaller@xxxxxxxxxx> --- src/json.c | 10 ++++++++-- src/statement.c | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/json.c b/src/json.c index 25e349155394..8fff401dfb3e 100644 --- a/src/json.c +++ b/src/json.c @@ -83,8 +83,14 @@ static json_t *stmt_print_json(const struct stmt *stmt, struct output_ctx *octx) if (stmt->ops->json) return stmt->ops->json(stmt, octx); - fprintf(stderr, "warning: stmt ops %s have no json callback\n", - stmt->ops->name); + /* In general, all "struct stmt_ops" must implement json() hook. Otherwise + * we have a bug, and a unit test should check that all ops are correct. + * + * Currently, "chain_stmt_ops.json" is known to be NULL. That is a bug that + * needs fixing. + * + * After the bug is fixed, and the unit test in place, this fallback code + * can be dropped. */ fp = octx->output_fp; octx->output_fp = fmemopen(buf, 1024, "w"); diff --git a/src/statement.c b/src/statement.c index f5176e6d87f9..d52b01b9099a 100644 --- a/src/statement.c +++ b/src/statement.c @@ -141,6 +141,7 @@ static const struct stmt_ops chain_stmt_ops = { .type = STMT_CHAIN, .name = "chain", .print = chain_stmt_print, + .json = NULL, /* BUG: must be implemented! */ .destroy = chain_stmt_destroy, }; -- 2.41.0