* [PATCH nft 0/7] add and check dump files for JSON in tests/shell
@ 2023-10-31 18:53 Thomas Haller
2023-10-31 18:53 ` [PATCH nft 1/7] json: fix use after free in table_flags_json() Thomas Haller
` (6 more replies)
0 siblings, 7 replies; 13+ messages in thread
From: Thomas Haller @ 2023-10-31 18:53 UTC (permalink / raw)
To: NetFilter; +Cc: Thomas Haller
Like we have .nft dump files to compare the expected result, add
.json-nft files that compare the JSON output.
Thomas Haller (7):
json: fix use after free in table_flags_json()
json: drop messages "warning: stmt ops chain have no json callback"
tests/shell: check and generate JSON dump files
tests/shell: add JSON dump files
tools: simplify error handling in "check-tree.sh" by adding
msg_err()/msg_warn()
tools: check more strictly for bash shebang in "check-tree.sh"
tools: check for consistency of .json-nft dumps in "check-tree.sh"
src/json.c | 8 +-
tests/shell/helpers/test-wrapper.sh | 138 +++++++++++++-----
tests/shell/run-tests.sh | 11 +-
.../bitwise/dumps/0040mark_binop_0.json-nft | 1 +
.../bitwise/dumps/0040mark_binop_1.json-nft | 1 +
.../bitwise/dumps/0040mark_binop_2.json-nft | 1 +
.../bitwise/dumps/0040mark_binop_3.json-nft | 1 +
.../bitwise/dumps/0040mark_binop_4.json-nft | 1 +
.../bitwise/dumps/0040mark_binop_5.json-nft | 1 +
.../bitwise/dumps/0040mark_binop_6.json-nft | 1 +
.../bitwise/dumps/0040mark_binop_7.json-nft | 1 +
.../bitwise/dumps/0040mark_binop_8.json-nft | 1 +
.../bitwise/dumps/0040mark_binop_9.json-nft | 1 +
.../bogons/dumps/assert_failures.json-nft | 1 +
.../dumps/0001_cache_handling_0.json-nft | 1 +
.../cache/dumps/0002_interval_0.json-nft | 1 +
.../cache/dumps/0003_cache_update_0.json-nft | 1 +
.../cache/dumps/0004_cache_update_0.json-nft | 1 +
.../dumps/0005_cache_chain_flush.json-nft | 1 +
.../dumps/0006_cache_table_flush.json-nft | 1 +
.../dumps/0007_echo_cache_init_0.json-nft | 1 +
.../dumps/0008_delete_by_handle_0.json-nft | 1 +
...0009_delete_by_handle_incorrect_0.json-nft | 1 +
.../cache/dumps/0011_index_0.json-nft | 1 +
.../chains/dumps/0001jumps_0.json-nft | 1 +
.../chains/dumps/0002jumps_1.json-nft | 1 +
.../chains/dumps/0003jump_loop_1.json-nft | 1 +
.../chains/dumps/0004busy_1.json-nft | 1 +
.../chains/dumps/0005busy_map_1.json-nft | 1 +
.../chains/dumps/0006masquerade_0.json-nft | 1 +
.../chains/dumps/0007masquerade_1.json-nft | 1 +
.../dumps/0008masquerade_jump_1.json-nft | 1 +
.../dumps/0009masquerade_jump_1.json-nft | 1 +
.../dumps/0010endless_jump_loop_1.json-nft | 1 +
.../chains/dumps/0013rename_0.json-nft | 1 +
.../chains/dumps/0014rename_0.json-nft | 1 +
.../dumps/0015check_jump_loop_1.json-nft | 1 +
.../chains/dumps/0016delete_handle_0.json-nft | 1 +
.../dumps/0017masquerade_jump_1.json-nft | 1 +
.../dumps/0018check_jump_loop_1.json-nft | 1 +
.../dumps/0019masquerade_jump_1.json-nft | 1 +
.../chains/dumps/0020depth_1.json-nft | 1 +
.../chains/dumps/0021prio_0.json-nft | 1 +
.../chains/dumps/0022prio_dummy_1.json-nft | 1 +
.../dumps/0023prio_inet_srcnat_1.json-nft | 1 +
.../dumps/0024prio_inet_dstnat_1.json-nft | 1 +
.../chains/dumps/0025prio_arp_1.json-nft | 1 +
.../chains/dumps/0026prio_netdev_1.json-nft | 1 +
.../dumps/0027prio_bridge_dstnat_1.json-nft | 1 +
.../dumps/0028prio_bridge_out_1.json-nft | 1 +
.../dumps/0029prio_bridge_srcnat_1.json-nft | 1 +
.../chains/dumps/0030create_0.json-nft | 1 +
.../dumps/0031priority_variable_0.json-nft | 1 +
.../dumps/0032priority_variable_0.json-nft | 1 +
.../dumps/0033priority_variable_1.json-nft | 1 +
.../dumps/0034priority_variable_1.json-nft | 1 +
.../dumps/0035policy_variable_0.json-nft | 1 +
.../dumps/0036policy_variable_0.json-nft | 1 +
.../dumps/0037policy_variable_1.json-nft | 1 +
.../dumps/0038policy_variable_1.json-nft | 1 +
.../dumps/0039negative_priority_0.json-nft | 1 +
.../dumps/0042chain_variable_0.json-nft | 1 +
.../chains/dumps/0043chain_ingress_0.json-nft | 1 +
.../chains/dumps/0044chain_destroy_0.json-nft | 1 +
.../chains/dumps/netdev_chain_0.json-nft | 1 +
.../dumps/netdev_chain_autoremove.json-nft | 1 +
.../comments/dumps/comments_0.json-nft | 1 +
.../flowtable/dumps/0001flowtable_0.json-nft | 1 +
.../dumps/0002create_flowtable_0.json-nft | 1 +
.../dumps/0003add_after_flush_0.json-nft | 1 +
.../dumps/0004delete_after_add_0.json-nft | 1 +
.../dumps/0005delete_in_use_1.json-nft | 1 +
.../flowtable/dumps/0006segfault_0.json-nft | 1 +
.../flowtable/dumps/0007prio_0.json-nft | 1 +
.../flowtable/dumps/0008prio_1.json-nft | 1 +
.../dumps/0009deleteafterflush_0.json-nft | 1 +
.../dumps/0010delete_handle_0.json-nft | 1 +
.../dumps/0011deleteafterflush_0.json-nft | 1 +
.../dumps/0012flowtable_variable_0.json-nft | 1 +
.../dumps/0013addafterdelete_0.json-nft | 1 +
.../dumps/0014addafterdelete_0.json-nft | 1 +
.../flowtable/dumps/0015destroy_0.json-nft | 1 +
.../include/dumps/0001absolute_0.json-nft | 1 +
.../include/dumps/0002relative_0.json-nft | 1 +
.../include/dumps/0003includepath_0.json-nft | 1 +
.../include/dumps/0004endlessloop_1.json-nft | 1 +
.../include/dumps/0005glob_empty_0.json-nft | 1 +
.../include/dumps/0006glob_single_0.json-nft | 1 +
.../include/dumps/0007glob_double_0.json-nft | 1 +
.../dumps/0008glob_nofile_wildcard_0.json-nft | 1 +
.../include/dumps/0009glob_nofile_1.json-nft | 1 +
.../dumps/0010glob_broken_file_1.json-nft | 1 +
.../dumps/0011glob_dependency_0.json-nft | 1 +
.../dumps/0012glob_dependency_1.json-nft | 1 +
.../include/dumps/0013glob_dotfile_0.json-nft | 1 +
...nput_descriptors_included_files_0.json-nft | 1 +
.../dumps/0014glob_directory_0.json-nft | 1 +
.../dumps/0015doubleincludepath_0.json-nft | 1 +
.../include/dumps/0016maxdepth_0.json-nft | 1 +
.../0017glob_more_than_maxdepth_1.json-nft | 1 +
.../dumps/0018include_error_0.json-nft | 1 +
.../dumps/0019include_error_0.json-nft | 1 +
.../dumps/0020include_chain_0.json-nft | 1 +
.../json/dumps/0001set_statements_0.json-nft | 1 +
.../json/dumps/0002table_map_0.json-nft | 1 +
.../dumps/0003json_schema_version_0.json-nft | 1 +
.../dumps/0004json_schema_version_1.json-nft | 1 +
.../json/dumps/0005secmark_objref_0.json-nft | 1 +
.../json/dumps/0006obj_comment_0.json-nft | 1 +
.../testcases/json/dumps/netdev.json-nft | 1 +
.../listing/dumps/0001ruleset_0.json-nft | 1 +
.../listing/dumps/0002ruleset_0.json-nft | 1 +
.../listing/dumps/0003table_0.json-nft | 1 +
.../listing/dumps/0004table_0.json-nft | 1 +
.../listing/dumps/0005ruleset_ip_0.json-nft | 1 +
.../listing/dumps/0006ruleset_ip6_0.json-nft | 1 +
.../listing/dumps/0007ruleset_inet_0.json-nft | 1 +
.../listing/dumps/0008ruleset_arp_0.json-nft | 1 +
.../dumps/0009ruleset_bridge_0.json-nft | 1 +
.../listing/dumps/0010sets_0.json-nft | 1 +
.../listing/dumps/0011sets_0.json-nft | 1 +
.../listing/dumps/0012sets_0.json-nft | 1 +
.../listing/dumps/0014objects_0.json-nft | 1 +
.../listing/dumps/0015dynamic_0.json-nft | 1 +
.../listing/dumps/0016anonymous_0.json-nft | 1 +
.../listing/dumps/0017objects_0.json-nft | 1 +
.../listing/dumps/0018data_0.json-nft | 1 +
.../listing/dumps/0019set_0.json-nft | 1 +
.../listing/dumps/0020flowtable_0.json-nft | 1 +
.../dumps/0021ruleset_json_terse_0.json-nft | 1 +
.../listing/dumps/0022terse_0.json-nft | 1 +
.../0003map_add_many_elements_0.json-nft | 1 +
...5interval_map_add_many_elements_0.json-nft | 1 +
.../dumps/0006interval_map_overlap_0.json-nft | 1 +
.../dumps/0007named_ifname_dtype_0.json-nft | 1 +
.../dumps/0008interval_map_delete_0.json-nft | 1 +
.../testcases/maps/dumps/0009vmap_0.json-nft | 1 +
.../testcases/maps/dumps/0012map_0.json-nft | 1 +
.../testcases/maps/dumps/0013map_0.json-nft | 1 +
.../maps/dumps/0014destroy_0.json-nft | 1 +
.../maps/dumps/0016map_leak_0.json-nft | 1 +
.../maps/dumps/0017_map_variable_0.json-nft | 1 +
.../dumps/0018map_leak_timeout_0.json-nft | 1 +
.../maps/dumps/anon_objmap_concat.json-nft | 1 +
.../maps/dumps/anonymous_snat_map_0.json-nft | 1 +
.../maps/dumps/different_map_types_1.json-nft | 1 +
.../map_catchall_double_deactivate.json-nft | 1 +
.../maps/dumps/map_with_flags_0.json-nft | 1 +
.../maps/dumps/named_snat_map_0.json-nft | 1 +
.../dumps/typeof_maps_add_delete.json-nft | 1 +
.../maps/dumps/typeof_maps_update_0.json-nft | 1 +
.../netns/dumps/0001nft-f_0.json-nft | 1 +
.../netns/dumps/0002loosecommands_0.json-nft | 1 +
.../testcases/netns/dumps/0003many_0.json-nft | 1 +
.../nft-f/dumps/0001define_slash_0.json-nft | 1 +
.../nft-f/dumps/0002rollback_rule_0.json-nft | 1 +
.../nft-f/dumps/0003rollback_jump_0.json-nft | 1 +
.../nft-f/dumps/0004rollback_set_0.json-nft | 1 +
.../nft-f/dumps/0005rollback_map_0.json-nft | 1 +
.../nft-f/dumps/0006action_object_0.json-nft | 1 +
.../0007action_object_set_segfault_1.json-nft | 1 +
.../nft-f/dumps/0008split_tables_0.json-nft | 1 +
.../nft-f/dumps/0009variable_0.json-nft | 1 +
.../nft-f/dumps/0010variable_0.json-nft | 1 +
.../nft-f/dumps/0013defines_1.json-nft | 1 +
.../nft-f/dumps/0014defines_1.json-nft | 1 +
.../nft-f/dumps/0015defines_1.json-nft | 1 +
.../nft-f/dumps/0016redefines_1.json-nft | 1 +
.../dumps/0018ct_expectation_obj_0.json-nft | 1 +
.../nft-f/dumps/0018jump_variable_0.json-nft | 1 +
.../nft-f/dumps/0019jump_variable_1.json-nft | 1 +
.../nft-f/dumps/0020jump_variable_1.json-nft | 1 +
.../nft-f/dumps/0021list_ruleset_0.json-nft | 1 +
.../nft-f/dumps/0022variables_0.json-nft | 1 +
.../nft-f/dumps/0023check_1.json-nft | 1 +
.../nft-f/dumps/0025empty_dynset_0.json-nft | 1 +
.../nft-f/dumps/0026listing_0.json-nft | 1 +
.../nft-f/dumps/0027split_chains_0.json-nft | 1 +
.../dumps/0028variable_cmdline_0.json-nft | 1 +
.../nft-f/dumps/0029split_file_0.json-nft | 1 +
.../nft-f/dumps/0030variable_reuse_0.json-nft | 1 +
.../nft-f/dumps/0031vmap_string_0.json-nft | 1 +
.../nft-f/dumps/0032pknock_0.json-nft | 1 +
.../nft-i/dumps/0001define_0.json-nft | 1 +
.../dumps/dependency_kill.json-nft | 1 +
.../optimizations/dumps/merge_nat.json-nft | 1 +
.../optimizations/dumps/merge_reject.json-nft | 1 +
.../optimizations/dumps/merge_stmts.json-nft | 1 +
.../dumps/merge_stmts_concat.json-nft | 1 +
.../dumps/merge_stmts_concat_vmap.json-nft | 1 +
.../dumps/merge_stmts_vmap.json-nft | 1 +
.../dumps/merge_vmap_raw.json-nft | 1 +
.../optimizations/dumps/merge_vmaps.json-nft | 1 +
.../dumps/not_mergeable.json-nft | 1 +
.../optimizations/dumps/ruleset.json-nft | 1 +
.../dumps/single_anon_set.json-nft | 1 +
.../optimizations/dumps/skip_merge.json-nft | 1 +
.../optimizations/dumps/skip_non_eq.json-nft | 1 +
.../dumps/skip_unsupported.json-nft | 1 +
.../optimizations/dumps/variables.json-nft | 1 +
.../optionals/dumps/comments_0.json-nft | 1 +
.../optionals/dumps/comments_chain_0.json-nft | 1 +
.../dumps/comments_handles_0.json-nft | 1 +
.../dumps/comments_objects_dup_0.json-nft | 1 +
.../optionals/dumps/comments_table_0.json-nft | 1 +
.../dumps/delete_object_handles_0.json-nft | 1 +
.../optionals/dumps/handles_0.json-nft | 1 +
.../optionals/dumps/handles_1.json-nft | 1 +
.../optionals/dumps/log_prefix_0.json-nft | 1 +
.../dumps/update_object_handles_0.json-nft | 1 +
.../owner/dumps/0001-flowtable-uaf.json-nft | 1 +
.../testcases/parsing/dumps/describe.json-nft | 1 +
.../parsing/dumps/large_rule_pipe.json-nft | 1 +
.../testcases/parsing/dumps/log.json-nft | 1 +
.../testcases/parsing/dumps/octal.json-nft | 1 +
.../dumps/0001addinsertposition_0.json-nft | 1 +
.../dumps/0002addinsertlocation_1.json-nft | 1 +
.../dumps/0003insert_0.json-nft | 1 +
.../dumps/0004replace_0.json-nft | 1 +
.../dumps/0005replace_1.json-nft | 1 +
.../dumps/0006replace_1.json-nft | 1 +
.../dumps/0007delete_0.json-nft | 1 +
.../dumps/0008delete_1.json-nft | 1 +
.../dumps/0009delete_1.json-nft | 1 +
.../dumps/0010replace_0.json-nft | 1 +
.../dumps/0011reset_0.json-nft | 1 +
.../dumps/0012destroy_0.json-nft | 1 +
.../sets/dumps/0001named_interval_0.json-nft | 1 +
.../0002named_interval_automerging_0.json-nft | 1 +
...0003named_interval_missing_flag_0.json-nft | 1 +
.../0004named_interval_shadow_0.json-nft | 1 +
.../0005named_interval_shadow_0.json-nft | 1 +
.../sets/dumps/0006create_set_0.json-nft | 1 +
.../sets/dumps/0007create_element_0.json-nft | 1 +
.../dumps/0008comments_interval_0.json-nft | 1 +
.../dumps/0009comments_timeout_0.json-nft | 1 +
.../sets/dumps/0010comments_0.json-nft | 1 +
.../0012add_delete_many_elements_0.json-nft | 1 +
.../0013add_delete_many_elements_0.json-nft | 1 +
...014malformed_set_is_not_defined_0.json-nft | 1 +
.../sets/dumps/0015rulesetflush_0.json-nft | 1 +
.../sets/dumps/0016element_leak_0.json-nft | 1 +
.../sets/dumps/0017add_after_flush_0.json-nft | 1 +
.../sets/dumps/0018set_check_size_1.json-nft | 1 +
.../sets/dumps/0019set_check_size_0.json-nft | 1 +
.../sets/dumps/0020comments_0.json-nft | 1 +
.../sets/dumps/0021nesting_0.json-nft | 1 +
.../dumps/0022type_selective_flush_0.json-nft | 1 +
.../0023incomplete_add_set_command_0.json-nft | 1 +
.../sets/dumps/0025anonymous_set_0.json-nft | 1 +
.../sets/dumps/0026named_limit_0.json-nft | 1 +
.../sets/dumps/0027ipv6_maps_ipv4_0.json-nft | 1 +
.../sets/dumps/0028autoselect_0.json-nft | 1 +
.../sets/dumps/0028delete_handle_0.json-nft | 1 +
.../dumps/0032restore_set_simple_0.json-nft | 1 +
.../dumps/0033add_set_simple_flat_0.json-nft | 1 +
.../sets/dumps/0034get_element_0.json-nft | 1 +
.../0035add_set_elements_flat_0.json-nft | 1 +
.../0037_set_with_inet_service_0.json-nft | 1 +
.../sets/dumps/0038meter_list_0.json-nft | 1 +
.../sets/dumps/0039delete_interval_0.json-nft | 1 +
.../0040get_host_endian_elements_0.json-nft | 1 +
.../sets/dumps/0041interval_0.json-nft | 1 +
.../sets/dumps/0042update_set_0.json-nft | 1 +
.../dumps/0043concatenated_ranges_0.json-nft | 1 +
.../dumps/0043concatenated_ranges_1.json-nft | 1 +
.../dumps/0044interval_overlap_1.json-nft | 1 +
.../dumps/0045concat_ipv4_service.json-nft | 1 +
.../sets/dumps/0046netmap_0.json-nft | 1 +
.../sets/dumps/0048set_counters_0.json-nft | 1 +
.../sets/dumps/0049set_define_0.json-nft | 1 +
.../sets/dumps/0050set_define_1.json-nft | 1 +
.../dumps/0051set_interval_counter_0.json-nft | 1 +
.../sets/dumps/0052overlap_0.json-nft | 1 +
.../testcases/sets/dumps/0053echo_0.json-nft | 1 +
.../sets/dumps/0054comments_set_0.json-nft | 1 +
.../sets/dumps/0055tcpflags_0.json-nft | 1 +
.../sets/dumps/0056dynamic_limit_0.json-nft | 1 +
.../dumps/0057set_create_fails_0.json-nft | 1 +
.../dumps/0058_setupdate_timeout_0.json-nft | 1 +
.../dumps/0059set_update_multistmt_0.json-nft | 1 +
.../sets/dumps/0060set_multistmt_0.json-nft | 1 +
.../sets/dumps/0060set_multistmt_1.json-nft | 1 +
.../dumps/0061anonymous_automerge_0.json-nft | 1 +
.../sets/dumps/0062set_connlimit_0.json-nft | 1 +
.../sets/dumps/0063set_catchall_0.json-nft | 1 +
.../sets/dumps/0064map_catchall_0.json-nft | 1 +
.../dumps/0065_icmp_postprocessing.json-nft | 1 +
.../sets/dumps/0069interval_merge_0.json-nft | 1 +
.../0071unclosed_prefix_interval_0.json-nft | 1 +
.../sets/dumps/0072destroy_0.json-nft | 1 +
.../sets/dumps/0073flat_interval_set.json-nft | 1 +
.../dumps/0074nested_interval_set.json-nft | 1 +
.../sets/dumps/collapse_elem_0.json-nft | 1 +
.../sets/dumps/concat_interval_0.json-nft | 1 +
.../sets/dumps/dynset_missing.json-nft | 1 +
.../testcases/sets/dumps/errors_0.json-nft | 1 +
.../sets/dumps/exact_overlap_0.json-nft | 1 +
.../testcases/sets/dumps/inner_0.json-nft | 1 +
.../testcases/sets/dumps/set_eval_0.json-nft | 1 +
.../sets/dumps/type_set_symbol.json-nft | 1 +
.../transactions/dumps/0001table_0.json-nft | 1 +
.../transactions/dumps/0002table_0.json-nft | 1 +
.../transactions/dumps/0003table_0.json-nft | 1 +
.../transactions/dumps/0010chain_0.json-nft | 1 +
.../transactions/dumps/0011chain_0.json-nft | 1 +
.../transactions/dumps/0012chain_0.json-nft | 1 +
.../transactions/dumps/0013chain_0.json-nft | 1 +
.../transactions/dumps/0014chain_1.json-nft | 1 +
.../transactions/dumps/0015chain_0.json-nft | 1 +
.../transactions/dumps/0020rule_0.json-nft | 1 +
.../transactions/dumps/0021rule_0.json-nft | 1 +
.../transactions/dumps/0022rule_1.json-nft | 1 +
.../transactions/dumps/0023rule_1.json-nft | 1 +
.../transactions/dumps/0024rule_0.json-nft | 1 +
.../transactions/dumps/0025rule_0.json-nft | 1 +
.../transactions/dumps/0030set_0.json-nft | 1 +
.../transactions/dumps/0031set_0.json-nft | 1 +
.../transactions/dumps/0032set_0.json-nft | 1 +
.../transactions/dumps/0033set_0.json-nft | 1 +
.../transactions/dumps/0034set_0.json-nft | 1 +
.../transactions/dumps/0035set_0.json-nft | 1 +
.../transactions/dumps/0036set_1.json-nft | 1 +
.../transactions/dumps/0037set_0.json-nft | 1 +
.../transactions/dumps/0038set_0.json-nft | 1 +
.../transactions/dumps/0039set_0.json-nft | 1 +
.../transactions/dumps/0040set_0.json-nft | 1 +
.../dumps/0041nat_restore_0.json-nft | 1 +
.../dumps/0042_stateful_expr_0.json-nft | 1 +
.../transactions/dumps/0043set_1.json-nft | 1 +
.../transactions/dumps/0044rule_0.json-nft | 1 +
.../dumps/0045anon-unbind_0.json-nft | 1 +
.../transactions/dumps/0046set_0.json-nft | 1 +
.../transactions/dumps/0047set_0.json-nft | 1 +
.../transactions/dumps/0048helpers_0.json-nft | 1 +
.../transactions/dumps/0049huge_0.json-nft | 1 +
.../transactions/dumps/0050rule_1.json-nft | 1 +
.../transactions/dumps/30s-stress.json-nft | 1 +
.../dumps/anon_chain_loop.json-nft | 1 +
.../dumps/bad_expression.json-nft | 1 +
.../transactions/dumps/table_onoff.json-nft | 1 +
tools/check-tree.sh | 63 +++++---
342 files changed, 494 insertions(+), 64 deletions(-)
create mode 100644 tests/shell/testcases/bitwise/dumps/0040mark_binop_0.json-nft
create mode 100644 tests/shell/testcases/bitwise/dumps/0040mark_binop_1.json-nft
create mode 100644 tests/shell/testcases/bitwise/dumps/0040mark_binop_2.json-nft
create mode 100644 tests/shell/testcases/bitwise/dumps/0040mark_binop_3.json-nft
create mode 100644 tests/shell/testcases/bitwise/dumps/0040mark_binop_4.json-nft
create mode 100644 tests/shell/testcases/bitwise/dumps/0040mark_binop_5.json-nft
create mode 100644 tests/shell/testcases/bitwise/dumps/0040mark_binop_6.json-nft
create mode 100644 tests/shell/testcases/bitwise/dumps/0040mark_binop_7.json-nft
create mode 100644 tests/shell/testcases/bitwise/dumps/0040mark_binop_8.json-nft
create mode 100644 tests/shell/testcases/bitwise/dumps/0040mark_binop_9.json-nft
create mode 100644 tests/shell/testcases/bogons/dumps/assert_failures.json-nft
create mode 100644 tests/shell/testcases/cache/dumps/0001_cache_handling_0.json-nft
create mode 100644 tests/shell/testcases/cache/dumps/0002_interval_0.json-nft
create mode 100644 tests/shell/testcases/cache/dumps/0003_cache_update_0.json-nft
create mode 100644 tests/shell/testcases/cache/dumps/0004_cache_update_0.json-nft
create mode 100644 tests/shell/testcases/cache/dumps/0005_cache_chain_flush.json-nft
create mode 100644 tests/shell/testcases/cache/dumps/0006_cache_table_flush.json-nft
create mode 100644 tests/shell/testcases/cache/dumps/0007_echo_cache_init_0.json-nft
create mode 100644 tests/shell/testcases/cache/dumps/0008_delete_by_handle_0.json-nft
create mode 100644 tests/shell/testcases/cache/dumps/0009_delete_by_handle_incorrect_0.json-nft
create mode 100644 tests/shell/testcases/cache/dumps/0011_index_0.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0001jumps_0.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0002jumps_1.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0003jump_loop_1.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0004busy_1.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0005busy_map_1.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0006masquerade_0.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0007masquerade_1.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0008masquerade_jump_1.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0009masquerade_jump_1.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0010endless_jump_loop_1.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0013rename_0.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0014rename_0.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0015check_jump_loop_1.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0016delete_handle_0.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0017masquerade_jump_1.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0018check_jump_loop_1.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0019masquerade_jump_1.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0020depth_1.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0021prio_0.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0022prio_dummy_1.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0023prio_inet_srcnat_1.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0024prio_inet_dstnat_1.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0025prio_arp_1.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0026prio_netdev_1.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0027prio_bridge_dstnat_1.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0028prio_bridge_out_1.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0029prio_bridge_srcnat_1.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0030create_0.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0031priority_variable_0.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0032priority_variable_0.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0033priority_variable_1.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0034priority_variable_1.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0035policy_variable_0.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0036policy_variable_0.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0037policy_variable_1.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0038policy_variable_1.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0039negative_priority_0.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0042chain_variable_0.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0043chain_ingress_0.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/0044chain_destroy_0.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/netdev_chain_0.json-nft
create mode 100644 tests/shell/testcases/chains/dumps/netdev_chain_autoremove.json-nft
create mode 100644 tests/shell/testcases/comments/dumps/comments_0.json-nft
create mode 100644 tests/shell/testcases/flowtable/dumps/0001flowtable_0.json-nft
create mode 100644 tests/shell/testcases/flowtable/dumps/0002create_flowtable_0.json-nft
create mode 100644 tests/shell/testcases/flowtable/dumps/0003add_after_flush_0.json-nft
create mode 100644 tests/shell/testcases/flowtable/dumps/0004delete_after_add_0.json-nft
create mode 100644 tests/shell/testcases/flowtable/dumps/0005delete_in_use_1.json-nft
create mode 100644 tests/shell/testcases/flowtable/dumps/0006segfault_0.json-nft
create mode 100644 tests/shell/testcases/flowtable/dumps/0007prio_0.json-nft
create mode 100644 tests/shell/testcases/flowtable/dumps/0008prio_1.json-nft
create mode 100644 tests/shell/testcases/flowtable/dumps/0009deleteafterflush_0.json-nft
create mode 100644 tests/shell/testcases/flowtable/dumps/0010delete_handle_0.json-nft
create mode 100644 tests/shell/testcases/flowtable/dumps/0011deleteafterflush_0.json-nft
create mode 100644 tests/shell/testcases/flowtable/dumps/0012flowtable_variable_0.json-nft
create mode 100644 tests/shell/testcases/flowtable/dumps/0013addafterdelete_0.json-nft
create mode 100644 tests/shell/testcases/flowtable/dumps/0014addafterdelete_0.json-nft
create mode 100644 tests/shell/testcases/flowtable/dumps/0015destroy_0.json-nft
create mode 100644 tests/shell/testcases/include/dumps/0001absolute_0.json-nft
create mode 100644 tests/shell/testcases/include/dumps/0002relative_0.json-nft
create mode 100644 tests/shell/testcases/include/dumps/0003includepath_0.json-nft
create mode 100644 tests/shell/testcases/include/dumps/0004endlessloop_1.json-nft
create mode 100644 tests/shell/testcases/include/dumps/0005glob_empty_0.json-nft
create mode 100644 tests/shell/testcases/include/dumps/0006glob_single_0.json-nft
create mode 100644 tests/shell/testcases/include/dumps/0007glob_double_0.json-nft
create mode 100644 tests/shell/testcases/include/dumps/0008glob_nofile_wildcard_0.json-nft
create mode 100644 tests/shell/testcases/include/dumps/0009glob_nofile_1.json-nft
create mode 100644 tests/shell/testcases/include/dumps/0010glob_broken_file_1.json-nft
create mode 100644 tests/shell/testcases/include/dumps/0011glob_dependency_0.json-nft
create mode 100644 tests/shell/testcases/include/dumps/0012glob_dependency_1.json-nft
create mode 100644 tests/shell/testcases/include/dumps/0013glob_dotfile_0.json-nft
create mode 100644 tests/shell/testcases/include/dumps/0013input_descriptors_included_files_0.json-nft
create mode 100644 tests/shell/testcases/include/dumps/0014glob_directory_0.json-nft
create mode 100644 tests/shell/testcases/include/dumps/0015doubleincludepath_0.json-nft
create mode 100644 tests/shell/testcases/include/dumps/0016maxdepth_0.json-nft
create mode 100644 tests/shell/testcases/include/dumps/0017glob_more_than_maxdepth_1.json-nft
create mode 100644 tests/shell/testcases/include/dumps/0018include_error_0.json-nft
create mode 100644 tests/shell/testcases/include/dumps/0019include_error_0.json-nft
create mode 100644 tests/shell/testcases/include/dumps/0020include_chain_0.json-nft
create mode 100644 tests/shell/testcases/json/dumps/0001set_statements_0.json-nft
create mode 100644 tests/shell/testcases/json/dumps/0002table_map_0.json-nft
create mode 100644 tests/shell/testcases/json/dumps/0003json_schema_version_0.json-nft
create mode 100644 tests/shell/testcases/json/dumps/0004json_schema_version_1.json-nft
create mode 100644 tests/shell/testcases/json/dumps/0005secmark_objref_0.json-nft
create mode 100644 tests/shell/testcases/json/dumps/0006obj_comment_0.json-nft
create mode 100644 tests/shell/testcases/json/dumps/netdev.json-nft
create mode 100644 tests/shell/testcases/listing/dumps/0001ruleset_0.json-nft
create mode 100644 tests/shell/testcases/listing/dumps/0002ruleset_0.json-nft
create mode 100644 tests/shell/testcases/listing/dumps/0003table_0.json-nft
create mode 100644 tests/shell/testcases/listing/dumps/0004table_0.json-nft
create mode 100644 tests/shell/testcases/listing/dumps/0005ruleset_ip_0.json-nft
create mode 100644 tests/shell/testcases/listing/dumps/0006ruleset_ip6_0.json-nft
create mode 100644 tests/shell/testcases/listing/dumps/0007ruleset_inet_0.json-nft
create mode 100644 tests/shell/testcases/listing/dumps/0008ruleset_arp_0.json-nft
create mode 100644 tests/shell/testcases/listing/dumps/0009ruleset_bridge_0.json-nft
create mode 100644 tests/shell/testcases/listing/dumps/0010sets_0.json-nft
create mode 100644 tests/shell/testcases/listing/dumps/0011sets_0.json-nft
create mode 100644 tests/shell/testcases/listing/dumps/0012sets_0.json-nft
create mode 100644 tests/shell/testcases/listing/dumps/0014objects_0.json-nft
create mode 100644 tests/shell/testcases/listing/dumps/0015dynamic_0.json-nft
create mode 100644 tests/shell/testcases/listing/dumps/0016anonymous_0.json-nft
create mode 100644 tests/shell/testcases/listing/dumps/0017objects_0.json-nft
create mode 100644 tests/shell/testcases/listing/dumps/0018data_0.json-nft
create mode 100644 tests/shell/testcases/listing/dumps/0019set_0.json-nft
create mode 100644 tests/shell/testcases/listing/dumps/0020flowtable_0.json-nft
create mode 100644 tests/shell/testcases/listing/dumps/0021ruleset_json_terse_0.json-nft
create mode 100644 tests/shell/testcases/listing/dumps/0022terse_0.json-nft
create mode 100644 tests/shell/testcases/maps/dumps/0003map_add_many_elements_0.json-nft
create mode 100644 tests/shell/testcases/maps/dumps/0005interval_map_add_many_elements_0.json-nft
create mode 100644 tests/shell/testcases/maps/dumps/0006interval_map_overlap_0.json-nft
create mode 100644 tests/shell/testcases/maps/dumps/0007named_ifname_dtype_0.json-nft
create mode 100644 tests/shell/testcases/maps/dumps/0008interval_map_delete_0.json-nft
create mode 100644 tests/shell/testcases/maps/dumps/0009vmap_0.json-nft
create mode 100644 tests/shell/testcases/maps/dumps/0012map_0.json-nft
create mode 100644 tests/shell/testcases/maps/dumps/0013map_0.json-nft
create mode 100644 tests/shell/testcases/maps/dumps/0014destroy_0.json-nft
create mode 100644 tests/shell/testcases/maps/dumps/0016map_leak_0.json-nft
create mode 100644 tests/shell/testcases/maps/dumps/0017_map_variable_0.json-nft
create mode 100644 tests/shell/testcases/maps/dumps/0018map_leak_timeout_0.json-nft
create mode 100644 tests/shell/testcases/maps/dumps/anon_objmap_concat.json-nft
create mode 100644 tests/shell/testcases/maps/dumps/anonymous_snat_map_0.json-nft
create mode 100644 tests/shell/testcases/maps/dumps/different_map_types_1.json-nft
create mode 100644 tests/shell/testcases/maps/dumps/map_catchall_double_deactivate.json-nft
create mode 100644 tests/shell/testcases/maps/dumps/map_with_flags_0.json-nft
create mode 100644 tests/shell/testcases/maps/dumps/named_snat_map_0.json-nft
create mode 100644 tests/shell/testcases/maps/dumps/typeof_maps_add_delete.json-nft
create mode 100644 tests/shell/testcases/maps/dumps/typeof_maps_update_0.json-nft
create mode 100644 tests/shell/testcases/netns/dumps/0001nft-f_0.json-nft
create mode 100644 tests/shell/testcases/netns/dumps/0002loosecommands_0.json-nft
create mode 100644 tests/shell/testcases/netns/dumps/0003many_0.json-nft
create mode 100644 tests/shell/testcases/nft-f/dumps/0001define_slash_0.json-nft
create mode 100644 tests/shell/testcases/nft-f/dumps/0002rollback_rule_0.json-nft
create mode 100644 tests/shell/testcases/nft-f/dumps/0003rollback_jump_0.json-nft
create mode 100644 tests/shell/testcases/nft-f/dumps/0004rollback_set_0.json-nft
create mode 100644 tests/shell/testcases/nft-f/dumps/0005rollback_map_0.json-nft
create mode 100644 tests/shell/testcases/nft-f/dumps/0006action_object_0.json-nft
create mode 100644 tests/shell/testcases/nft-f/dumps/0007action_object_set_segfault_1.json-nft
create mode 100644 tests/shell/testcases/nft-f/dumps/0008split_tables_0.json-nft
create mode 100644 tests/shell/testcases/nft-f/dumps/0009variable_0.json-nft
create mode 100644 tests/shell/testcases/nft-f/dumps/0010variable_0.json-nft
create mode 100644 tests/shell/testcases/nft-f/dumps/0013defines_1.json-nft
create mode 100644 tests/shell/testcases/nft-f/dumps/0014defines_1.json-nft
create mode 100644 tests/shell/testcases/nft-f/dumps/0015defines_1.json-nft
create mode 100644 tests/shell/testcases/nft-f/dumps/0016redefines_1.json-nft
create mode 100644 tests/shell/testcases/nft-f/dumps/0018ct_expectation_obj_0.json-nft
create mode 100644 tests/shell/testcases/nft-f/dumps/0018jump_variable_0.json-nft
create mode 100644 tests/shell/testcases/nft-f/dumps/0019jump_variable_1.json-nft
create mode 100644 tests/shell/testcases/nft-f/dumps/0020jump_variable_1.json-nft
create mode 100644 tests/shell/testcases/nft-f/dumps/0021list_ruleset_0.json-nft
create mode 100644 tests/shell/testcases/nft-f/dumps/0022variables_0.json-nft
create mode 100644 tests/shell/testcases/nft-f/dumps/0023check_1.json-nft
create mode 100644 tests/shell/testcases/nft-f/dumps/0025empty_dynset_0.json-nft
create mode 100644 tests/shell/testcases/nft-f/dumps/0026listing_0.json-nft
create mode 100644 tests/shell/testcases/nft-f/dumps/0027split_chains_0.json-nft
create mode 100644 tests/shell/testcases/nft-f/dumps/0028variable_cmdline_0.json-nft
create mode 100644 tests/shell/testcases/nft-f/dumps/0029split_file_0.json-nft
create mode 100644 tests/shell/testcases/nft-f/dumps/0030variable_reuse_0.json-nft
create mode 100644 tests/shell/testcases/nft-f/dumps/0031vmap_string_0.json-nft
create mode 100644 tests/shell/testcases/nft-f/dumps/0032pknock_0.json-nft
create mode 100644 tests/shell/testcases/nft-i/dumps/0001define_0.json-nft
create mode 100644 tests/shell/testcases/optimizations/dumps/dependency_kill.json-nft
create mode 100644 tests/shell/testcases/optimizations/dumps/merge_nat.json-nft
create mode 100644 tests/shell/testcases/optimizations/dumps/merge_reject.json-nft
create mode 100644 tests/shell/testcases/optimizations/dumps/merge_stmts.json-nft
create mode 100644 tests/shell/testcases/optimizations/dumps/merge_stmts_concat.json-nft
create mode 100644 tests/shell/testcases/optimizations/dumps/merge_stmts_concat_vmap.json-nft
create mode 100644 tests/shell/testcases/optimizations/dumps/merge_stmts_vmap.json-nft
create mode 100644 tests/shell/testcases/optimizations/dumps/merge_vmap_raw.json-nft
create mode 100644 tests/shell/testcases/optimizations/dumps/merge_vmaps.json-nft
create mode 100644 tests/shell/testcases/optimizations/dumps/not_mergeable.json-nft
create mode 100644 tests/shell/testcases/optimizations/dumps/ruleset.json-nft
create mode 100644 tests/shell/testcases/optimizations/dumps/single_anon_set.json-nft
create mode 100644 tests/shell/testcases/optimizations/dumps/skip_merge.json-nft
create mode 100644 tests/shell/testcases/optimizations/dumps/skip_non_eq.json-nft
create mode 100644 tests/shell/testcases/optimizations/dumps/skip_unsupported.json-nft
create mode 100644 tests/shell/testcases/optimizations/dumps/variables.json-nft
create mode 100644 tests/shell/testcases/optionals/dumps/comments_0.json-nft
create mode 100644 tests/shell/testcases/optionals/dumps/comments_chain_0.json-nft
create mode 100644 tests/shell/testcases/optionals/dumps/comments_handles_0.json-nft
create mode 100644 tests/shell/testcases/optionals/dumps/comments_objects_dup_0.json-nft
create mode 100644 tests/shell/testcases/optionals/dumps/comments_table_0.json-nft
create mode 100644 tests/shell/testcases/optionals/dumps/delete_object_handles_0.json-nft
create mode 100644 tests/shell/testcases/optionals/dumps/handles_0.json-nft
create mode 100644 tests/shell/testcases/optionals/dumps/handles_1.json-nft
create mode 100644 tests/shell/testcases/optionals/dumps/log_prefix_0.json-nft
create mode 100644 tests/shell/testcases/optionals/dumps/update_object_handles_0.json-nft
create mode 100644 tests/shell/testcases/owner/dumps/0001-flowtable-uaf.json-nft
create mode 100644 tests/shell/testcases/parsing/dumps/describe.json-nft
create mode 100644 tests/shell/testcases/parsing/dumps/large_rule_pipe.json-nft
create mode 100644 tests/shell/testcases/parsing/dumps/log.json-nft
create mode 100644 tests/shell/testcases/parsing/dumps/octal.json-nft
create mode 100644 tests/shell/testcases/rule_management/dumps/0001addinsertposition_0.json-nft
create mode 100644 tests/shell/testcases/rule_management/dumps/0002addinsertlocation_1.json-nft
create mode 100644 tests/shell/testcases/rule_management/dumps/0003insert_0.json-nft
create mode 100644 tests/shell/testcases/rule_management/dumps/0004replace_0.json-nft
create mode 100644 tests/shell/testcases/rule_management/dumps/0005replace_1.json-nft
create mode 100644 tests/shell/testcases/rule_management/dumps/0006replace_1.json-nft
create mode 100644 tests/shell/testcases/rule_management/dumps/0007delete_0.json-nft
create mode 100644 tests/shell/testcases/rule_management/dumps/0008delete_1.json-nft
create mode 100644 tests/shell/testcases/rule_management/dumps/0009delete_1.json-nft
create mode 100644 tests/shell/testcases/rule_management/dumps/0010replace_0.json-nft
create mode 100644 tests/shell/testcases/rule_management/dumps/0011reset_0.json-nft
create mode 100644 tests/shell/testcases/rule_management/dumps/0012destroy_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0001named_interval_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0002named_interval_automerging_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0003named_interval_missing_flag_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0004named_interval_shadow_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0005named_interval_shadow_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0006create_set_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0007create_element_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0008comments_interval_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0009comments_timeout_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0010comments_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0012add_delete_many_elements_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0013add_delete_many_elements_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0014malformed_set_is_not_defined_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0015rulesetflush_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0016element_leak_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0017add_after_flush_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0018set_check_size_1.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0019set_check_size_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0020comments_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0021nesting_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0022type_selective_flush_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0023incomplete_add_set_command_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0025anonymous_set_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0026named_limit_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0027ipv6_maps_ipv4_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0028autoselect_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0028delete_handle_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0032restore_set_simple_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0033add_set_simple_flat_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0034get_element_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0035add_set_elements_flat_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0037_set_with_inet_service_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0038meter_list_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0039delete_interval_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0040get_host_endian_elements_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0041interval_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0042update_set_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0043concatenated_ranges_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0043concatenated_ranges_1.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0044interval_overlap_1.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0045concat_ipv4_service.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0046netmap_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0048set_counters_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0049set_define_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0050set_define_1.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0051set_interval_counter_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0052overlap_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0053echo_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0054comments_set_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0055tcpflags_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0056dynamic_limit_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0057set_create_fails_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0058_setupdate_timeout_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0059set_update_multistmt_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0060set_multistmt_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0060set_multistmt_1.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0061anonymous_automerge_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0062set_connlimit_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0063set_catchall_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0064map_catchall_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0065_icmp_postprocessing.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0069interval_merge_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0071unclosed_prefix_interval_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0072destroy_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0073flat_interval_set.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/0074nested_interval_set.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/collapse_elem_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/concat_interval_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/dynset_missing.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/errors_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/exact_overlap_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/inner_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/set_eval_0.json-nft
create mode 100644 tests/shell/testcases/sets/dumps/type_set_symbol.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0001table_0.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0002table_0.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0003table_0.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0010chain_0.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0011chain_0.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0012chain_0.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0013chain_0.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0014chain_1.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0015chain_0.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0020rule_0.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0021rule_0.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0022rule_1.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0023rule_1.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0024rule_0.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0025rule_0.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0030set_0.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0031set_0.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0032set_0.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0033set_0.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0034set_0.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0035set_0.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0036set_1.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0037set_0.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0038set_0.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0039set_0.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0040set_0.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0041nat_restore_0.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0042_stateful_expr_0.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0043set_1.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0044rule_0.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0045anon-unbind_0.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0046set_0.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0047set_0.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0048helpers_0.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0049huge_0.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/0050rule_1.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/30s-stress.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/anon_chain_loop.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/bad_expression.json-nft
create mode 100644 tests/shell/testcases/transactions/dumps/table_onoff.json-nft
--
2.41.0
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH nft 1/7] json: fix use after free in table_flags_json()
2023-10-31 18:53 [PATCH nft 0/7] add and check dump files for JSON in tests/shell Thomas Haller
@ 2023-10-31 18:53 ` Thomas Haller
2023-10-31 18:53 ` [PATCH nft 2/7] json: drop messages "warning: stmt ops chain have no json callback" Thomas Haller
` (5 subsequent siblings)
6 siblings, 0 replies; 13+ messages in thread
From: Thomas Haller @ 2023-10-31 18:53 UTC (permalink / raw)
To: NetFilter; +Cc: Thomas Haller
Valgrind complains about this:
==286== Invalid read of size 4
==286== at 0x49B0261: do_dump (dump.c:211)
==286== by 0x49B08B8: do_dump (dump.c:378)
==286== by 0x49B08B8: do_dump (dump.c:378)
==286== by 0x49B04F7: do_dump (dump.c:273)
==286== by 0x49B08B8: do_dump (dump.c:378)
==286== by 0x49B0E84: json_dump_callback (dump.c:465)
==286== by 0x48AF22A: do_command_list_json (json.c:2016)
==286== by 0x48732F1: do_command_list (rule.c:2335)
==286== by 0x48737F5: do_command (rule.c:2605)
==286== by 0x48A867D: nft_netlink (libnftables.c:42)
==286== by 0x48A92B1: nft_run_cmd_from_buffer (libnftables.c:597)
==286== by 0x402CBA: main (main.c:533)
==286== Address 0x5038650 is 0 bytes inside a block of size 32 free'd
==286== at 0x48452AC: free (vg_replace_malloc.c:974)
==286== by 0x49AECDD: UnknownInlinedFun (jansson.h:133)
==286== by 0x49AECDD: UnknownInlinedFun (jansson.h:131)
==286== by 0x49AECDD: UnknownInlinedFun (value.c:398)
==286== by 0x49AECDD: json_delete (value.c:953)
==286== by 0x48A9F61: json_decref (jansson.h:133)
==286== by 0x48AA4AA: table_flags_json (json.c:494)
==286== by 0x48AA52B: table_print_json (json.c:510)
==286== by 0x48ABBAE: table_print_json_full (json.c:1695)
==286== by 0x48ABD48: do_list_ruleset_json (json.c:1739)
==286== by 0x48AF2A0: do_command_list_json (json.c:1962)
==286== by 0x48732F1: do_command_list (rule.c:2335)
==286== by 0x48737F5: do_command (rule.c:2605)
==286== by 0x48A867D: nft_netlink (libnftables.c:42)
==286== by 0x48A92B1: nft_run_cmd_from_buffer (libnftables.c:597)
==286== by 0x402CBA: main (main.c:533)
==286== Block was alloc'd at
==286== at 0x484282F: malloc (vg_replace_malloc.c:431)
==286== by 0x49AE4EA: UnknownInlinedFun (memory.c:27)
==286== by 0x49AE4EA: UnknownInlinedFun (value.c:676)
==286== by 0x49AE4EA: json_stringn_nocheck (value.c:696)
==286== by 0x48AA464: table_flags_json (json.c:482)
==286== by 0x48AA52B: table_print_json (json.c:510)
==286== by 0x48ABBAE: table_print_json_full (json.c:1695)
==286== by 0x48ABD48: do_list_ruleset_json (json.c:1739)
==286== by 0x48AF2A0: do_command_list_json (json.c:1962)
==286== by 0x48732F1: do_command_list (rule.c:2335)
==286== by 0x48737F5: do_command (rule.c:2605)
==286== by 0x48A867D: nft_netlink (libnftables.c:42)
==286== by 0x48A92B1: nft_run_cmd_from_buffer (libnftables.c:597)
==286== by 0x402CBA: main (main.c:533)
Fixes: e70354f53e9f ("libnftables: Implement JSON output support")
Signed-off-by: Thomas Haller <thaller@redhat.com>
---
src/json.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/json.c b/src/json.c
index 068c423addc7..c0ccf06d85b4 100644
--- a/src/json.c
+++ b/src/json.c
@@ -496,7 +496,7 @@ static json_t *table_flags_json(const struct table *table)
json_decref(root);
return NULL;
case 1:
- json_unpack(root, "[o]", &tmp);
+ json_unpack(root, "[O]", &tmp);
json_decref(root);
root = tmp;
break;
--
2.41.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH nft 2/7] json: drop messages "warning: stmt ops chain have no json callback"
2023-10-31 18:53 [PATCH nft 0/7] add and check dump files for JSON in tests/shell Thomas Haller
2023-10-31 18:53 ` [PATCH nft 1/7] json: fix use after free in table_flags_json() Thomas Haller
@ 2023-10-31 18:53 ` Thomas Haller
2023-11-02 8:04 ` Florian Westphal
2023-10-31 18:53 ` [PATCH nft 3/7] tests/shell: check and generate JSON dump files Thomas Haller
` (4 subsequent siblings)
6 siblings, 1 reply; 13+ messages in thread
From: Thomas Haller @ 2023-10-31 18:53 UTC (permalink / raw)
To: NetFilter; +Cc: Thomas Haller
This message purely depends on the internal callbacks and at the program
code. This is not useful. What is the user going to do with this warning?
Maybe there is a bug here, but then we shouldn't print a warning but fix
the bug.
For example, calling `nft -j list ruleset` after test "tests/shell/testcases/chains/0041chain_binding_0"
will trigger messages like:
warning: stmt ops chain have no json callback
warning: stmt ops chain have no json callback
Signed-off-by: Thomas Haller <thaller@redhat.com>
---
src/json.c | 6 ------
1 file changed, 6 deletions(-)
diff --git a/src/json.c b/src/json.c
index c0ccf06d85b4..c66b58f8c6d5 100644
--- a/src/json.c
+++ b/src/json.c
@@ -52,9 +52,6 @@ static json_t *expr_print_json(const struct expr *expr, struct output_ctx *octx)
if (ops->json)
return ops->json(expr, octx);
- fprintf(stderr, "warning: expr ops %s have no json callback\n",
- expr_name(expr));
-
fp = octx->output_fp;
octx->output_fp = fmemopen(buf, 1024, "w");
@@ -95,9 +92,6 @@ 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);
-
fp = octx->output_fp;
octx->output_fp = fmemopen(buf, 1024, "w");
--
2.41.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH nft 3/7] tests/shell: check and generate JSON dump files
2023-10-31 18:53 [PATCH nft 0/7] add and check dump files for JSON in tests/shell Thomas Haller
2023-10-31 18:53 ` [PATCH nft 1/7] json: fix use after free in table_flags_json() Thomas Haller
2023-10-31 18:53 ` [PATCH nft 2/7] json: drop messages "warning: stmt ops chain have no json callback" Thomas Haller
@ 2023-10-31 18:53 ` Thomas Haller
2023-10-31 18:53 ` [PATCH nft 5/7] tools: simplify error handling in "check-tree.sh" by adding msg_err()/msg_warn() Thomas Haller
` (3 subsequent siblings)
6 siblings, 0 replies; 13+ messages in thread
From: Thomas Haller @ 2023-10-31 18:53 UTC (permalink / raw)
To: NetFilter; +Cc: Thomas Haller
The rules after a successful test are good opportunity to test
`nft -j list ruleset` and `nft -j --check`. This quite possibly touches
code paths that are not hit by other tests yet.
The only downside is the increase of the test runtime (which seems
negligible, given the benefits of increasing test coverage).
Note that with some tests the test wrapper now prints:
"warning: stmt ops chain have no json callback"
That is a bug that will be fixed next.
Future commits will commit those ".json-nft" dump files.
Test "tests/shell/testcases/transactions/table_onoff" will trigger
a valgrind error during `nft -j list ruleset` which causes the test
to fail in valgrind mode. That needs to be fixed.
Signed-off-by: Thomas Haller <thaller@redhat.com>
---
tests/shell/helpers/test-wrapper.sh | 138 +++++++++++++++++++++-------
tests/shell/run-tests.sh | 11 ++-
2 files changed, 110 insertions(+), 39 deletions(-)
diff --git a/tests/shell/helpers/test-wrapper.sh b/tests/shell/helpers/test-wrapper.sh
index 872a0c56ed54..f56537f601e0 100755
--- a/tests/shell/helpers/test-wrapper.sh
+++ b/tests/shell/helpers/test-wrapper.sh
@@ -15,6 +15,16 @@ array_contains() {
return 1
}
+show_file() {
+ local filename="$1"
+ shift
+ local msg="$*"
+
+ printf '%s\n>>>>\n' "$msg"
+ cat "$filename"
+ printf "<<<<\n"
+}
+
TEST="$1"
TESTBASE="$(basename "$TEST")"
TESTDIR="$(dirname "$TEST")"
@@ -109,55 +119,103 @@ if [ "$rc_test" -eq 0 ] ; then
"${CMD[@]}" &>> "$NFT_TEST_TESTTMPDIR/testout.log" || rc_test=$?
fi
-$NFT list ruleset > "$NFT_TEST_TESTTMPDIR/ruleset-after"
+rc_chkdump=0
+rc=0
+$NFT list ruleset > "$NFT_TEST_TESTTMPDIR/ruleset-after" 2> "$NFT_TEST_TESTTMPDIR/chkdump" || rc=$?
+if [ "$rc" -ne 0 -o -s "$NFT_TEST_TESTTMPDIR/chkdump" ] ; then
+ show_file "$NFT_TEST_TESTTMPDIR/chkdump" "Command \`$NFT list ruleset\"$DUMPFILE\"\` failed" >> "$NFT_TEST_TESTTMPDIR/rc-failed-chkdump"
+ rc_chkdump=1
+fi
+if [ "$NFT_TEST_HAVE_json" != n ] ; then
+ rc=0
+ $NFT -j list ruleset > "$NFT_TEST_TESTTMPDIR/ruleset-after.json" 2> "$NFT_TEST_TESTTMPDIR/chkdump" || rc=$?
+ if [ "$rc" -ne 0 -o -s "$NFT_TEST_TESTTMPDIR/chkdump" ] ; then
+ show_file "$NFT_TEST_TESTTMPDIR/chkdump" "Command \`$NFT -j list ruleset\"$DUMPFILE\"\` failed" >> "$NFT_TEST_TESTTMPDIR/rc-failed-chkdump"
+ rc_chkdump=1
+ fi
+ # Normalize the version number from the JSON output. Otherwise, we'd
+ # have to regenerate the .json-nft files upon release.
+ sed '1s/\({"nftables": \[{"metainfo": {"version": "\)[0-9.]\+\(", "release_name": "\)[^"]\+\(", "\)/\1VERSION\2RELEASE_NAME\3/' -i "$NFT_TEST_TESTTMPDIR/ruleset-after.json"
+fi
read tainted_after < /proc/sys/kernel/tainted
DUMPPATH="$TESTDIR/dumps"
DUMPFILE="$DUMPPATH/$TESTBASE.nft"
+JDUMPFILE="$DUMPPATH/$TESTBASE.json-nft"
NODUMPFILE="$DUMPPATH/$TESTBASE.nodump"
-dump_written=
-
-# The caller can request a re-geneating of the dumps, by setting
-# DUMPGEN=y.
+# The caller can request a re-geneating of the .nft, .nodump, .json-nft dump files
+# by setting DUMPGEN=y. In that case, only the existing files will be regenerated
+# (unless all three files are missing, in which case all of them are generated).
#
-# This only will happen if the command completed with success.
-#
-# It also will only happen for tests, that have a "$DUMPPATH" directory. There
-# might be tests, that don't want to have dumps created. The existence of the
-# directory controls that. Tests that have a "$NODUMPFILE" file, don't get a dump generated.
-if [ "$rc_test" -eq 0 -a "$DUMPGEN" = y -a -d "$DUMPPATH" -a ! -f "$NODUMPFILE" ] ; then
+# By setting DUMPGEN=force, all 3 files are always regenerated.
+dump_written=n
+if [ "$rc_test" -eq 0 -a '(' "$DUMPGEN" = force -o "$DUMPGEN" = y ')' ] ; then
dump_written=y
- if [ ! -f "$DUMPFILE" ] ; then
- # No dumpfile exists yet. We generate both a .nft and a .nodump
- # file. The user can pick which one to commit to git.
+ if [ ! -d "$DUMPPATH" ] ; then
+ mkdir "$DUMPPATH"
+ fi
+ if [ "$DUMPGEN" = force ] ; then
+ gen_nodumpfile=y
+ gen_dumpfile=y
+ gen_jdumpfile=y
+ else
+ # by default, only regenerate the files that we already have on disk.
+ gen_nodumpfile=n
+ gen_dumpfile=n
+ gen_jdumpfile=n
+ test -f "$DUMPFILE" && gen_dumpfile=y
+ test -f "$JDUMPFILE" && gen_jdumpfile=y
+ test -f "$NODUMPFILE" && gen_nodumpfile=y
+ if [ "$gen_dumpfile" = y -a "$gen_jdumpfile" = y -a "$gen_nodumpfile" = y ] ; then
+ # Except, if no files exist. Them generate all files.
+ gen_dumpfile=y
+ gen_jdumpfile=y
+ gen_nodumpfile=y
+ fi
+ fi
+ if [ "$gen_nodumpfile" = y ] ; then
: > "$NODUMPFILE"
fi
- cat "$NFT_TEST_TESTTMPDIR/ruleset-after" > "$DUMPFILE"
+ if [ "$gen_dumpfile" = y ] ; then
+ cat "$NFT_TEST_TESTTMPDIR/ruleset-after" > "$DUMPFILE"
+ fi
+ if [ "$NFT_TEST_HAVE_json" != n -a "$gen_jdumpfile" = y ] ; then
+ cat "$NFT_TEST_TESTTMPDIR/ruleset-after.json" > "$JDUMPFILE"
+ fi
fi
rc_dump=0
-if [ "$rc_test" -ne 77 -a -f "$DUMPFILE" ] ; then
- if [ "$dump_written" != y ] ; then
+if [ "$rc_test" -ne 77 -a "$dump_written" != y ] ; then
+ if [ -f "$DUMPFILE" ] ; then
if ! $DIFF -u "$DUMPFILE" "$NFT_TEST_TESTTMPDIR/ruleset-after" &> "$NFT_TEST_TESTTMPDIR/ruleset-diff" ; then
+ show_file "$NFT_TEST_TESTTMPDIR/ruleset-diff" "Failed \`$DIFF -u \"$DUMPFILE\" \"$NFT_TEST_TESTTMPDIR/ruleset-after\"\`" >> "$NFT_TEST_TESTTMPDIR/rc-failed-dump"
rc_dump=1
else
rm -f "$NFT_TEST_TESTTMPDIR/ruleset-diff"
fi
fi
-fi
-if [ "$rc_dump" -ne 0 ] ; then
- echo "$DUMPFILE" > "$NFT_TEST_TESTTMPDIR/rc-failed-dump"
+ if [ "$NFT_TEST_HAVE_json" != n -a -f "$JDUMPFILE" ] ; then
+ if ! $DIFF -u "$JDUMPFILE" "$NFT_TEST_TESTTMPDIR/ruleset-after.json" &> "$NFT_TEST_TESTTMPDIR/ruleset-diff.json" ; then
+ show_file "$NFT_TEST_TESTTMPDIR/ruleset-diff.json" "Failed \`$DIFF -u \"$JDUMPFILE\" \"$NFT_TEST_TESTTMPDIR/ruleset-after.json\"\`" >> "$NFT_TEST_TESTTMPDIR/rc-failed-dump"
+ rc_dump=1
+ else
+ rm -f "$NFT_TEST_TESTTMPDIR/ruleset-diff.json"
+ fi
+ fi
fi
-rc_chkdump=0
# check that a flush after the test succeeds. We anyway need a clean ruleset
# for the `nft --check` next.
-$NFT flush ruleset &> "$NFT_TEST_TESTTMPDIR/rc-failed-chkdump" || rc_chkdump=1
+rc=0
+$NFT flush ruleset &> "$NFT_TEST_TESTTMPDIR/chkdump" || rc=1
+if [ "$rc" = 1 -o -s "$NFT_TEST_TESTTMPDIR/chkdump" ] ; then
+ show_file "$NFT_TEST_TESTTMPDIR/chkdump" "Command \`$NFT flush ruleset\` failed" >> "$NFT_TEST_TESTTMPDIR/rc-failed-chkdump"
+ rc_chkdump=1
+fi
+# For the dumpfiles, call `nft --check` to possibly cover new code paths.
if [ -f "$DUMPFILE" ] ; then
- # We have a dumpfile. Call `nft --check` to possibly cover new code
- # paths.
if [ "$rc_test" -eq 77 ] ; then
# The test was skipped. Possibly we don't have the required
# features to process this file. Ignore any output and exit
@@ -165,20 +223,30 @@ if [ -f "$DUMPFILE" ] ; then
# issue we hope to find).
$NFT --check -f "$DUMPFILE" &>/dev/null || :
else
- $NFT --check -f "$DUMPFILE" &>> "$NFT_TEST_TESTTMPDIR/rc-failed-chkdump" || rc_chkdump=1
+ fail=n
+ $NFT --check -f "$DUMPFILE" &> "$NFT_TEST_TESTTMPDIR/chkdump" || fail=y
+ test -s "$NFT_TEST_TESTTMPDIR/chkdump" && fail=y
+ if [ "$fail" = y ] ; then
+ show_file "$NFT_TEST_TESTTMPDIR/chkdump" "Command \`$NFT --check -f \"$DUMPFILE\"\` failed" >> "$NFT_TEST_TESTTMPDIR/rc-failed-chkdump"
+ rc_chkdump=1
+ fi
+ rm -f "$NFT_TEST_TESTTMPDIR/chkdump"
fi
fi
-if [ -s "$NFT_TEST_TESTTMPDIR/rc-failed-chkdump" ] ; then
- # Non-empty output? That is wrong.
- rc_chkdump=1
-elif [ "$rc_chkdump" -eq 0 ] ; then
- rm -rf "$NFT_TEST_TESTTMPDIR/rc-failed-chkdump"
-fi
-if [ "$rc_chkdump" -ne 0 ] ; then
- # Ensure we don't have empty output files. Always write something, so
- # that `grep ^ -R` lists the file.
- echo -e "<<<<<\n\nCalling \`nft --check\` (or \`nft flush ruleset\`) failed for \"$DUMPFILE\"" >> "$NFT_TEST_TESTTMPDIR/rc-failed-chkdump"
+if [ "$NFT_TEST_HAVE_json" != n -a -f "$JDUMPFILE" ] ; then
+ if [ "$rc_test" -eq 77 ] ; then
+ $NFT -j --check -f "$JDUMPFILE" &>/dev/null || :
+ else
+ fail=n
+ $NFT -j --check -f "$JDUMPFILE" &> "$NFT_TEST_TESTTMPDIR/chkdump" || fail=y
+ test -s "$NFT_TEST_TESTTMPDIR/chkdump" && fail=y
+ if [ "$fail" = y ] ; then
+ show_file "$NFT_TEST_TESTTMPDIR/chkdump" "Command \`$NFT -j --check -f \"$JDUMPFILE\"\` failed" >> "$NFT_TEST_TESTTMPDIR/rc-failed-chkdump"
+ rc_chkdump=1
+ fi
+ fi
fi
+rm -f "$NFT_TEST_TESTTMPDIR/chkdump"
rc_valgrind=0
[ -f "$NFT_TEST_TESTTMPDIR/rc-failed-valgrind" ] && rc_valgrind=1
diff --git a/tests/shell/run-tests.sh b/tests/shell/run-tests.sh
index 27a0ec43042a..846de8429e1f 100755
--- a/tests/shell/run-tests.sh
+++ b/tests/shell/run-tests.sh
@@ -184,9 +184,10 @@ usage() {
echo " VERBOSE=*|y : Enable verbose output."
echo " NFT_TEST_VERBOSE_TEST=*|y: if true, enable verbose output for tests. For bash scripts, this means"
echo " to pass \"-x\" to the interpreter."
- echo " DUMPGEN=*|y : Regenerate dump files. Dump files are only recreated if the"
- echo " test completes successfully and the \"dumps\" directory for the"
- echo " test exits."
+ echo " DUMPGEN=*|y|force : Regenerate dump files .nft, .json-nft, .nodump. \"DUMPGEN=y\" only regenerates existing"
+ echo " files, unless the test has no files (then all three files are generated, and you need to"
+ echo " choose those to keep). With \"DUMPGEN=force\" all 3 files are regenerated, regardless"
+ echo " whether they existed."
echo " VALGRIND=*|y : Run \$NFT in valgrind."
echo " KMEMLEAK=*|y : Check for kernel memleaks."
echo " NFT_TEST_HAS_REALROOT=*|y : To indicate whether the test has real root permissions."
@@ -279,7 +280,9 @@ _NFT_TEST_JOBS_DEFAULT="$(( _NFT_TEST_JOBS_DEFAULT + (_NFT_TEST_JOBS_DEFAULT + 1
VERBOSE="$(bool_y "$VERBOSE")"
NFT_TEST_VERBOSE_TEST="$(bool_y "$NFT_TEST_VERBOSE_TEST")"
-DUMPGEN="$(bool_y "$DUMPGEN")"
+if [ "$DUMPGEN" != "force" ] ; then
+ DUMPGEN="$(bool_y "$DUMPGEN")"
+fi
VALGRIND="$(bool_y "$VALGRIND")"
KMEMLEAK="$(bool_y "$KMEMLEAK")"
NFT_TEST_KEEP_LOGS="$(bool_y "$NFT_TEST_KEEP_LOGS")"
--
2.41.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH nft 5/7] tools: simplify error handling in "check-tree.sh" by adding msg_err()/msg_warn()
2023-10-31 18:53 [PATCH nft 0/7] add and check dump files for JSON in tests/shell Thomas Haller
` (2 preceding siblings ...)
2023-10-31 18:53 ` [PATCH nft 3/7] tests/shell: check and generate JSON dump files Thomas Haller
@ 2023-10-31 18:53 ` Thomas Haller
2023-10-31 18:53 ` [PATCH nft 6/7] tools: check more strictly for bash shebang in "check-tree.sh" Thomas Haller
` (2 subsequent siblings)
6 siblings, 0 replies; 13+ messages in thread
From: Thomas Haller @ 2023-10-31 18:53 UTC (permalink / raw)
To: NetFilter; +Cc: Thomas Haller
msg_err() also sets EXIT_CODE=, so we don't have to duplicate this.
Also add msg_warn() to print non-fatal warnings. Will be used in the
future. As "check-tree.sh" tests the consistency of the source tree, a
warning only makes sense to point something out that really should be
fixed, but is not yet.
Signed-off-by: Thomas Haller <thaller@redhat.com>
---
tools/check-tree.sh | 37 ++++++++++++++++++++-----------------
1 file changed, 20 insertions(+), 17 deletions(-)
diff --git a/tools/check-tree.sh b/tools/check-tree.sh
index e3ddf8bdea58..b16d37c4651b 100755
--- a/tools/check-tree.sh
+++ b/tools/check-tree.sh
@@ -25,6 +25,15 @@ cd "$(dirname "$0")/.."
EXIT_CODE=0
+msg_err() {
+ printf "ERR: %s\n" "$*"
+ EXIT_CODE=1
+}
+
+msg_warn() {
+ printf "WARN: %s\n" "$*"
+}
+
##############################################################################
check_shell_dumps() {
@@ -37,8 +46,7 @@ check_shell_dumps() {
local nodump_name
if [ ! -d "$dir/dumps/" ] ; then
- echo "\"$TEST\" has no \"$dir/dumps/\" directory"
- EXIT_CODE=1
+ msg_err "\"$TEST\" has no \"$dir/dumps/\" directory"
return 0
fi
@@ -49,34 +57,31 @@ check_shell_dumps() {
[ -f "$nodump_name" ] && has_nodump=1
if [ "$has_nft" != 1 -a "$has_nodump" != 1 ] ; then
- echo "\"$TEST\" has no \"$dir/dumps/$base.{nft,nodump}\" file"
- EXIT_CODE=1
+ msg_err "\"$TEST\" has no \"$dir/dumps/$base.{nft,nodump}\" file"
elif [ "$has_nft" == 1 -a "$has_nodump" == 1 ] ; then
- echo "\"$TEST\" has both \"$dir/dumps/$base.{nft,nodump}\" files"
- EXIT_CODE=1
+ msg_err "\"$TEST\" has both \"$dir/dumps/$base.{nft,nodump}\" files"
elif [ "$has_nodump" == 1 -a -s "$nodump_name" ] ; then
- echo "\"$TEST\" has a non-empty \"$dir/dumps/$base.nodump\" file"
- EXIT_CODE=1
+ msg_err "\"$TEST\" has a non-empty \"$dir/dumps/$base.nodump\" file"
fi
}
SHELL_TESTS=( $(find "tests/shell/testcases/" -type f -executable | sort) )
if [ "${#SHELL_TESTS[@]}" -eq 0 ] ; then
- echo "No executable tests under \"tests/shell/testcases/\" found"
- EXIT_CODE=1
+ msg_err "No executable tests under \"tests/shell/testcases/\" found"
fi
for t in "${SHELL_TESTS[@]}" ; do
check_shell_dumps "$t"
- head -n 1 "$t" |grep -q '^#!/bin/sh' && echo "$t uses sh instead of bash" && EXIT_CODE=1
+ if head -n 1 "$t" |grep -q '^#!/bin/sh' ; then
+ msg_err "$t uses #!/bin/sh instead of /bin/bash"
+ fi
done
##############################################################################
SHELL_TESTS2=( $(./tests/shell/run-tests.sh --list-tests) )
if [ "${SHELL_TESTS[*]}" != "${SHELL_TESTS2[*]}" ] ; then
- echo "\`./tests/shell/run-tests.sh --list-tests\` does not list the expected tests"
- EXIT_CODE=1
+ msg_err "\`./tests/shell/run-tests.sh --list-tests\` does not list the expected tests"
fi
##############################################################################
@@ -85,8 +90,7 @@ F=( $(find tests/shell/testcases/ -type f | grep '^tests/shell/testcases/[^/]\+/
IGNORED_FILES=( tests/shell/testcases/bogons/nft-f/* )
for f in "${F[@]}" ; do
if ! array_contains "$f" "${SHELL_TESTS[@]}" "${IGNORED_FILES[@]}" ; then
- echo "Unexpected file \"$f\""
- EXIT_CODE=1
+ msg_err "Unexpected file \"$f\""
fi
done
@@ -97,8 +101,7 @@ FILES=( $(find "tests/shell/testcases/" -type f | sed -n 's#\(tests/shell/testca
for f in "${FILES[@]}" ; do
f2="$(echo "$f" | sed -n 's#\(tests/shell/testcases\(/.*\)\?/\)dumps/\(.*\)\.\(nft\|nodump\)$#\1\3#p')"
if ! array_contains "$f2" "${SHELL_TESTS[@]}" ; then
- echo "\"$f\" has no test \"$f2\""
- EXIT_CODE=1
+ msg_err "\"$f\" has no test \"$f2\""
fi
done
--
2.41.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH nft 6/7] tools: check more strictly for bash shebang in "check-tree.sh"
2023-10-31 18:53 [PATCH nft 0/7] add and check dump files for JSON in tests/shell Thomas Haller
` (3 preceding siblings ...)
2023-10-31 18:53 ` [PATCH nft 5/7] tools: simplify error handling in "check-tree.sh" by adding msg_err()/msg_warn() Thomas Haller
@ 2023-10-31 18:53 ` Thomas Haller
2023-10-31 18:53 ` [PATCH nft 7/7] tools: check for consistency of .json-nft dumps " Thomas Haller
2023-10-31 19:17 ` [PATCH nft 0/7] add and check dump files for JSON in tests/shell Thomas Haller
6 siblings, 0 replies; 13+ messages in thread
From: Thomas Haller @ 2023-10-31 18:53 UTC (permalink / raw)
To: NetFilter; +Cc: Thomas Haller
There is no principle problem to allow any executable/shebang. However,
it also not clear why we would want to use anything except bash. Unless
we have a good reason, check and reject anything else.
Also not that `./tests/shell/run-tests.sh -x` only works if the shebang
is either "#!/bin/bash" or "#!/bin/bash -e". It probably could also work
with other tests, but it's unclear what they are and how to enable
verbose mode in that case.
Just check that they are all bash scripts. If there is a use-case, we
can always adjust this check.
Signed-off-by: Thomas Haller <thaller@redhat.com>
---
tools/check-tree.sh | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/tools/check-tree.sh b/tools/check-tree.sh
index b16d37c4651b..4be874fcd85e 100755
--- a/tools/check-tree.sh
+++ b/tools/check-tree.sh
@@ -72,8 +72,13 @@ if [ "${#SHELL_TESTS[@]}" -eq 0 ] ; then
fi
for t in "${SHELL_TESTS[@]}" ; do
check_shell_dumps "$t"
- if head -n 1 "$t" |grep -q '^#!/bin/sh' ; then
- msg_err "$t uses #!/bin/sh instead of /bin/bash"
+ if ! ( head -n 1 "$t" | grep -q '^#!/bin/bash\( -e\)\?$' ) ; then
+ # Currently all tests only use bash as shebang. That also
+ # works with `./tests/shell/run-tests.sh -x`.
+ #
+ # We could allow other shebangs, but for now there is no need.
+ # Unless you have a good reason, create a bash script.
+ msg_err "$t should use either \"#!/bin/bash\" or \"#!/bin/bash -e\" as shebang"
fi
done
--
2.41.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH nft 7/7] tools: check for consistency of .json-nft dumps in "check-tree.sh"
2023-10-31 18:53 [PATCH nft 0/7] add and check dump files for JSON in tests/shell Thomas Haller
` (4 preceding siblings ...)
2023-10-31 18:53 ` [PATCH nft 6/7] tools: check more strictly for bash shebang in "check-tree.sh" Thomas Haller
@ 2023-10-31 18:53 ` Thomas Haller
2023-10-31 19:17 ` [PATCH nft 0/7] add and check dump files for JSON in tests/shell Thomas Haller
6 siblings, 0 replies; 13+ messages in thread
From: Thomas Haller @ 2023-10-31 18:53 UTC (permalink / raw)
To: NetFilter; +Cc: Thomas Haller
Add checks for the newly introduced .json-nft dump files.
Optimally, every test that has a .nft dump should also have a .json-nft
dump, and vice versa.
However, currently some JSON tests fail to validate, and are missing.
Only flag those missing files as warning, without failing the script.
The reason to warn about this, is that we really should fix those tests,
and having a annoying warning increases the pressure and makes it
discoverable.
Signed-off-by: Thomas Haller <thaller@redhat.com>
---
tools/check-tree.sh | 21 ++++++++++++++++++++-
1 file changed, 20 insertions(+), 1 deletion(-)
diff --git a/tools/check-tree.sh b/tools/check-tree.sh
index 4be874fcd85e..e358c957857e 100755
--- a/tools/check-tree.sh
+++ b/tools/check-tree.sh
@@ -41,6 +41,7 @@ check_shell_dumps() {
local base="$(basename "$TEST")"
local dir="$(dirname "$TEST")"
local has_nft=0
+ local has_jnft=0
local has_nodump=0
local nft_name
local nodump_name
@@ -51,9 +52,11 @@ check_shell_dumps() {
fi
nft_name="$dir/dumps/$base.nft"
+ jnft_name="$dir/dumps/$base.json-nft"
nodump_name="$dir/dumps/$base.nodump"
[ -f "$nft_name" ] && has_nft=1
+ [ -f "$jnft_name" ] && has_jnft=1
[ -f "$nodump_name" ] && has_nodump=1
if [ "$has_nft" != 1 -a "$has_nodump" != 1 ] ; then
@@ -63,6 +66,22 @@ check_shell_dumps() {
elif [ "$has_nodump" == 1 -a -s "$nodump_name" ] ; then
msg_err "\"$TEST\" has a non-empty \"$dir/dumps/$base.nodump\" file"
fi
+ if [ "$has_jnft" = 1 -a "$has_nft" != 1 ] ; then
+ msg_err "\"$TEST\" has a JSON dump file \"$jnft_name\" but lacks a dump \"$nft_name\""
+ fi
+ if [ "$has_nft" = 1 -a "$has_jnft" != 1 ] ; then
+ # it's currently known that `nft -j --check` cannot parse all dumped rulesets.
+ # Accept having no JSON dump file.
+ #
+ # This should be fixed. Currently this is only a warning.
+ msg_warn "\"$TEST\" has a dump file \"$nft_name\" but lacks a JSON dump \"$jnft_name\""
+ fi
+
+ if [ "$has_jnft" = 1 ] && command -v jq &>/dev/null ; then
+ if ! jq empty < "$jnft_name" &>/dev/null ; then
+ msg_err "\"$TEST\" has a JSON dump file \"$jnft_name\" that does not validate with \`jq empty < \"$jnft_name\"\`"
+ fi
+ fi
}
SHELL_TESTS=( $(find "tests/shell/testcases/" -type f -executable | sort) )
@@ -91,7 +110,7 @@ fi
##############################################################################
#
-F=( $(find tests/shell/testcases/ -type f | grep '^tests/shell/testcases/[^/]\+/dumps/[^/]\+\.\(nft\|nodump\)$' -v | sort) )
+F=( $(find tests/shell/testcases/ -type f | grep '^tests/shell/testcases/[^/]\+/dumps/[^/]\+\.\(json-nft\|nft\|nodump\)$' -v | sort) )
IGNORED_FILES=( tests/shell/testcases/bogons/nft-f/* )
for f in "${F[@]}" ; do
if ! array_contains "$f" "${SHELL_TESTS[@]}" "${IGNORED_FILES[@]}" ; then
--
2.41.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH nft 0/7] add and check dump files for JSON in tests/shell
2023-10-31 18:53 [PATCH nft 0/7] add and check dump files for JSON in tests/shell Thomas Haller
` (5 preceding siblings ...)
2023-10-31 18:53 ` [PATCH nft 7/7] tools: check for consistency of .json-nft dumps " Thomas Haller
@ 2023-10-31 19:17 ` Thomas Haller
2023-11-01 8:28 ` Pablo Neira Ayuso
6 siblings, 1 reply; 13+ messages in thread
From: Thomas Haller @ 2023-10-31 19:17 UTC (permalink / raw)
To: NetFilter
On Tue, 2023-10-31 at 19:53 +0100, Thomas Haller wrote:
> Like we have .nft dump files to compare the expected result, add
> .json-nft files that compare the JSON output.
>
> Thomas Haller (7):
> json: fix use after free in table_flags_json()
> json: drop messages "warning: stmt ops chain have no json callback"
> tests/shell: check and generate JSON dump files
> tests/shell: add JSON dump files
> tools: simplify error handling in "check-tree.sh" by adding
> msg_err()/msg_warn()
> tools: check more strictly for bash shebang in "check-tree.sh"
> tools: check for consistency of .json-nft dumps in "check-tree.sh"
Hm. Patch 4/7 bounced (too large).
Will see how to resend, after there is some feedback.
The patch is also here:
https://gitlab.freedesktop.org/thaller/nftables/-/commit/6545b31080036e8525be5c80c0103a1509e698e4
Thomas
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH nft 0/7] add and check dump files for JSON in tests/shell
2023-10-31 19:17 ` [PATCH nft 0/7] add and check dump files for JSON in tests/shell Thomas Haller
@ 2023-11-01 8:28 ` Pablo Neira Ayuso
2023-11-01 9:55 ` Thomas Haller
0 siblings, 1 reply; 13+ messages in thread
From: Pablo Neira Ayuso @ 2023-11-01 8:28 UTC (permalink / raw)
To: Thomas Haller; +Cc: NetFilter
On Tue, Oct 31, 2023 at 08:17:24PM +0100, Thomas Haller wrote:
> On Tue, 2023-10-31 at 19:53 +0100, Thomas Haller wrote:
> > Like we have .nft dump files to compare the expected result, add
> > .json-nft files that compare the JSON output.
> >
> > Thomas Haller (7):
> > json: fix use after free in table_flags_json()
> > json: drop messages "warning: stmt ops chain have no json callback"
> > tests/shell: check and generate JSON dump files
> > tests/shell: add JSON dump files
> > tools: simplify error handling in "check-tree.sh" by adding
> > msg_err()/msg_warn()
> > tools: check more strictly for bash shebang in "check-tree.sh"
> > tools: check for consistency of .json-nft dumps in "check-tree.sh"
If this is improving json support coverage without imposing any extra
restriction other than adding a .nft-json file, then this is very good
to have.
I believe I switfly read on a commit message that this is skipped if
nft is compiled without json support, correct?
> Hm. Patch 4/7 bounced (too large).
>
> Will see how to resend, after there is some feedback.
I suggest you Cc: me so I can apply this.
> The patch is also here:
> https://gitlab.freedesktop.org/thaller/nftables/-/commit/6545b31080036e8525be5c80c0103a1509e698e4
You said:
"Note that for some JSON dumps, `nft -f --check` fails (or prints
something). For those tests no *.json-nft file is added. The bugs needs
to be fixed first."
Do you have a list of tests that are failing? Or maybe include this
list in the commit description? To keep them in the radar, we can
incrementally fix them.
Thanks.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH nft 0/7] add and check dump files for JSON in tests/shell
2023-11-01 8:28 ` Pablo Neira Ayuso
@ 2023-11-01 9:55 ` Thomas Haller
0 siblings, 0 replies; 13+ messages in thread
From: Thomas Haller @ 2023-11-01 9:55 UTC (permalink / raw)
To: Pablo Neira Ayuso; +Cc: NetFilter
On Wed, 2023-11-01 at 09:28 +0100, Pablo Neira Ayuso wrote:
> On Tue, Oct 31, 2023 at 08:17:24PM +0100, Thomas Haller wrote:
> > On Tue, 2023-10-31 at 19:53 +0100, Thomas Haller wrote:
> > > Like we have .nft dump files to compare the expected result, add
> > > .json-nft files that compare the JSON output.
> > >
> > > Thomas Haller (7):
> > > json: fix use after free in table_flags_json()
> > > json: drop messages "warning: stmt ops chain have no json
> > > callback"
> > > tests/shell: check and generate JSON dump files
> > > tests/shell: add JSON dump files
> > > tools: simplify error handling in "check-tree.sh" by adding
> > > msg_err()/msg_warn()
> > > tools: check more strictly for bash shebang in "check-tree.sh"
> > > tools: check for consistency of .json-nft dumps in "check-
> > > tree.sh"
>
> If this is improving json support coverage without imposing any extra
> restriction other than adding a .nft-json file, then this is very
> good
> to have.
>
> I believe I switfly read on a commit message that this is skipped if
> nft is compiled without json support, correct?
Yes, that's how it's supposed to work (and tests correctly for me).
>
> > Hm. Patch 4/7 bounced (too large).
> >
> > Will see how to resend, after there is some feedback.
>
> I suggest you Cc: me so I can apply this.
You could also run
git fetch https://gitlab.freedesktop.org/thaller/nftables.git 6545b31080036e8525be5c80c0103a1509e698e4 ; git cherry-pick 6545b31080036e8525be5c80c0103a1509e698e4
Anyway. I will CC you on the patch as soon as I get to it!
>
> > The patch is also here:
> > https://gitlab.freedesktop.org/thaller/nftables/-/commit/6545b31080036e8525be5c80c0103a1509e698e4
>
> You said:
>
> "Note that for some JSON dumps, `nft -f --check` fails (or prints
> something). For those tests no *.json-nft file is added. The bugs
> needs
> to be fixed first."
>
> Do you have a list of tests that are failing? Or maybe include this
> list in the commit description? To keep them in the radar, we can
> incrementally fix them.
You can find them by running ./tools/check-tree.sh, it will print
warnings about the tests that lack the .json-nft file. It's exactly
those.
It prints for example:
WARN: "tests/shell/testcases/cache/0010_implicit_chain_0" has a dump file "tests/shell/testcases/cache/dumps/0010_implicit_chain_0.nft" but lacks a JSON dump "tests/shell/testcases/cache/dumps/0010_implicit_chain_0.json-nft"
Thomas
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH nft 2/7] json: drop messages "warning: stmt ops chain have no json callback"
2023-10-31 18:53 ` [PATCH nft 2/7] json: drop messages "warning: stmt ops chain have no json callback" Thomas Haller
@ 2023-11-02 8:04 ` Florian Westphal
2023-11-02 8:39 ` Thomas Haller
0 siblings, 1 reply; 13+ messages in thread
From: Florian Westphal @ 2023-11-02 8:04 UTC (permalink / raw)
To: Thomas Haller; +Cc: NetFilter
Thomas Haller <thaller@redhat.com> wrote:
> This message purely depends on the internal callbacks and at the program
> code. This is not useful. What is the user going to do with this warning?
Report a bug.
> Maybe there is a bug here, but then we shouldn't print a warning but fix
> the bug.
How on earth do we do that, fix a bug before we know its there?
> For example, calling `nft -j list ruleset` after test "tests/shell/testcases/chains/0041chain_binding_0"
> will trigger messages like:
>
> warning: stmt ops chain have no json callback
> warning: stmt ops chain have no json callback
That means that chain ops needs a bug fix as they do not support
json output?
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH nft 2/7] json: drop messages "warning: stmt ops chain have no json callback"
2023-11-02 8:04 ` Florian Westphal
@ 2023-11-02 8:39 ` Thomas Haller
2023-11-02 11:23 ` Thomas Haller
0 siblings, 1 reply; 13+ messages in thread
From: Thomas Haller @ 2023-11-02 8:39 UTC (permalink / raw)
To: Florian Westphal; +Cc: NetFilter
On Thu, 2023-11-02 at 09:04 +0100, Florian Westphal wrote:
> Thomas Haller <thaller@redhat.com> wrote:
> > This message purely depends on the internal callbacks and at the
> > program
> > code. This is not useful. What is the user going to do with this
> > warning?
>
> Report a bug.
The way the message is worded ("warning:"), doesn't sound as if a user
should feel invited to report a bug.
> > Maybe there is a bug here, but then we shouldn't print a warning
> > but fix
> > the bug.
>
> How on earth do we do that, fix a bug before we know its there?
Writing tests that perform basic consistency checks of things that must
hold.
A unit test should check whether ops structs are consistent. This
patchset also enables a test that hits this problem (for "chain" ops).
If there is a bug, then an assertion (or just a plain crash) would be
preferable over printing a "warning" to stderr.
>
> > For example, calling `nft -j list ruleset` after test
> > "tests/shell/testcases/chains/0041chain_binding_0"
> > will trigger messages like:
> >
> > warning: stmt ops chain have no json callback
> > warning: stmt ops chain have no json callback
>
> That means that chain ops needs a bug fix as they do not support
> json output?
I don't know. The message might just trying to be helpful, and there is
no actual problem. The condition is attempted to be handled by the
following code.
I don't know which it is. Me sending the patch is basically asking that
question.
Thomas
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH nft 2/7] json: drop messages "warning: stmt ops chain have no json callback"
2023-11-02 8:39 ` Thomas Haller
@ 2023-11-02 11:23 ` Thomas Haller
0 siblings, 0 replies; 13+ messages in thread
From: Thomas Haller @ 2023-11-02 11:23 UTC (permalink / raw)
To: Florian Westphal; +Cc: NetFilter
On Thu, 2023-11-02 at 09:39 +0100, Thomas Haller wrote:
> On Thu, 2023-11-02 at 09:04 +0100, Florian Westphal wrote:
>
>
> I don't know which it is. Me sending the patch is basically asking
> that
> question.
This patch 2/7 is obsoleted/replaced by
[PATCH nft 1/2] json: implement json() hook for "symbol_expr_ops"/"variabl_expr_ops"
[PATCH nft 2/2] json: drop handling missing json() hook for "struct expr_ops"
Unit tests for consistency of "struct expr_ops" are still missing (I
will send them, once some groundwork patches are in).
Thomas
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2023-11-02 11:24 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-10-31 18:53 [PATCH nft 0/7] add and check dump files for JSON in tests/shell Thomas Haller
2023-10-31 18:53 ` [PATCH nft 1/7] json: fix use after free in table_flags_json() Thomas Haller
2023-10-31 18:53 ` [PATCH nft 2/7] json: drop messages "warning: stmt ops chain have no json callback" Thomas Haller
2023-11-02 8:04 ` Florian Westphal
2023-11-02 8:39 ` Thomas Haller
2023-11-02 11:23 ` Thomas Haller
2023-10-31 18:53 ` [PATCH nft 3/7] tests/shell: check and generate JSON dump files Thomas Haller
2023-10-31 18:53 ` [PATCH nft 5/7] tools: simplify error handling in "check-tree.sh" by adding msg_err()/msg_warn() Thomas Haller
2023-10-31 18:53 ` [PATCH nft 6/7] tools: check more strictly for bash shebang in "check-tree.sh" Thomas Haller
2023-10-31 18:53 ` [PATCH nft 7/7] tools: check for consistency of .json-nft dumps " Thomas Haller
2023-10-31 19:17 ` [PATCH nft 0/7] add and check dump files for JSON in tests/shell Thomas Haller
2023-11-01 8:28 ` Pablo Neira Ayuso
2023-11-01 9:55 ` Thomas Haller
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.