nuttx-apps/system/nxinit
wangjianyu3 63698738a8 system/nxinit: add cmocka unit tests for parser/action/service
Add a test/ subdirectory (mirroring apps/system/uorb/test/) with
cmocka-based unit tests covering the NxInit logic most prone to
regression:

- init_parse_arguments(): plain/quoted arguments, "--" separator vs.
  "--option" long options (regression coverage for a previously fixed
  bug), argv-capacity truncation (asserting the exact folded contents
  of the last slot, not just its presence).
- init_parse_config_file()/init_parse_config_lines()/
  init_parse_config_buffer(): section routing, blank/whitespace-only
  line skipping, unknown-section rejection, over-length line rejection,
  and a line straddling two read-buffer refills, exercised through both
  the file-based and buffer-based entry points.
- Action event matching: exact match, invert (!=), fnmatch wildcards,
  and AND semantics across multiple events per action.
- Service conflict detection: duplicate service name rejection,
  override replacing an earlier duplicate, and the SERVICE_ARGS_MAX
  boundary built dynamically from CONFIG_SYSTEM_NXINIT_SERVICE_ARGS_MAX
  rather than a hardcoded value.

Test sources compile action.c/parser.c/service.c a second time into a
separate nxinit_unit_test program, gated behind new
CONFIG_SYSTEM_NXINIT_TEST (depends on TESTING_CMOCKA); the default init
program is unaffected. The CMake path builds a dedicated
nxinit_unit_test target (with test/test_nxinit.c placed first in SRCS
so nuttx_add_application() renames its main() correctly); the Make path
appends the test sources into the shared CSRCS list.

Supporting bits required to make the suite exercise the real code:

- init_parse_config_buffer() is declared in parser.h and made
  non-static so the buffer-based boundary test can call it directly,
  alongside the existing init_parse_config_file() entry point.
- CONFIG_SYSTEM_NXINIT_ACTION_EVENTS_MAX default is raised from 1 to 2
  so an action can carry more than one event ("on evA && evB"), which
  the multi-event AND-semantics test exercises; a single event slot
  made that test dead code.
- CONFIG_SYSTEM_NXINIT_TEST_STACKSIZE defaults to 8192: several parser
  test cases build multi-hundred-byte stack buffers on top of cmocka's
  own overhead, and the previous DEFAULT_TASK_STACKSIZE (2048)
  overflowed the test task's stack silently on real hardware (no crash
  dump, no watchdog reset, output just stopped) partway through the
  suite.

Testing:
Built via `make CROSSDEV=riscv-none-elf-` for
esp32p4-pico-wifi-wareshare:nsh (CONFIG_SYSTEM_NXINIT_TEST=y) and ran
nxinit_unit_test on real esp32p4-pico-wifi-wareshare hardware over
UART:

  nsh> nxinit_unit_test
  [==========] nxinit_tests: Running 18 test(s).
  ...
  [==========] nxinit_tests: 18 test(s) run.
  [  PASSED  ] 18 test(s).

nxstyle clean on all touched files.

Assisted-by: GitHubCopilot:claude-sonnet-5
Signed-off-by: wangjianyu3 <wangjianyu3@xiaomi.com>
2026-08-28 09:33:47 -03:00
..
test system/nxinit: add cmocka unit tests for parser/action/service 2026-08-28 09:33:47 -03:00
action.c system/nxinit: support compound command execution 2026-08-26 10:00:02 -03:00
action.h system/nxinit: support compound command execution 2026-08-26 10:00:02 -03:00
builtin.c system/nxinit: add 'set' builtin command for environment variables 2026-08-28 09:30:53 -03:00
builtin.h system/nxinit: Add NuttX Init 2026-05-27 17:20:07 -03:00
CMakeLists.txt system/nxinit: add cmocka unit tests for parser/action/service 2026-08-28 09:33:47 -03:00
import.c system/nxinit: Fix missing check for import argument 2026-06-05 09:43:45 +08:00
import.h system/nxinit: Add NuttX Init 2026-05-27 17:20:07 -03:00
init.c system/nxinit: fix unkown -> unknown typo in resetcause[] 2026-08-26 10:00:02 -03:00
init.h system/nxinit: Add setprop support for action 2026-08-15 18:51:45 +08:00
Kconfig system/nxinit: add cmocka unit tests for parser/action/service 2026-08-28 09:33:47 -03:00
Make.defs system/nxinit: Add NuttX Init 2026-05-27 17:20:07 -03:00
Makefile system/nxinit: add cmocka unit tests for parser/action/service 2026-08-28 09:33:47 -03:00
parser.c system/nxinit: add cmocka unit tests for parser/action/service 2026-08-28 09:33:47 -03:00
parser.h system/nxinit: add cmocka unit tests for parser/action/service 2026-08-28 09:33:47 -03:00
property.h system/nxinit: Add setprop support for action 2026-08-15 18:51:45 +08:00
property_simple.c system/nxinit: Add setprop support for action 2026-08-15 18:51:45 +08:00
service.c system: nxinit: bound debug argv dump 2026-07-07 09:47:23 +08:00
service.h system/nxinit: Let use a define to define the class max cmds 2026-05-27 17:20:07 -03:00