Files
LithosAnanke/kernel/tests/Makefile
T
Claude 37b1527279 test: kernel host tests -- the harness, and gpt.c tested on the host
Captain Bob, 2026-11-12: "Build an appropriate test harness! Love the idea."
The kernel had no tests below the boots, so defects QEMU cannot provoke could
not be tested first. Plan: docs/v4.0.0/plans/2026-11-12-kernel-host-tests.md.

kernel/tests/: one host program per kernel source, built with that source as
it is, the kernel's flags (-std=c99 -Wall -Wextra -Werror), and fakes --
the console captured line by line, a deterministic RNG that can fail, and a RAM
disk whose reads, writes or flushes fail at chosen 1 KiB blocks.
make -C kernel/tests test runs them; SRC_<test>= runs a test against other
code, which is how a test is seen to fail against the code before a fix.

test_gpt.c, 12 checks: a table written and read back; 16, 17 and 18 used
entries against max 16 and an entry out of range after the 16th (#180); the
RNG, the first write, a later write and a flush failing (#168). Against gpt.c
before #168 and #180: 4 failures, each defect caught. Now: 0. Both runs in
logs/.../kernel-tests/. Not yet a protocol stage: to rule (the plan, step 5).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017RzZgrf7V7Zk2iczBXDRbm
2026-11-12 17:57:04 +00:00

40 lines
1.4 KiB
Makefile

# SPDX-License-Identifier: LicenseRef-Starship-1.0
# Copyright (c) 2023-2026 Robert A. James
#
# The kernel host tests (docs/v4.0.0/plans/2026-11-12-kernel-host-tests.md): each test_<unit>.c
# built on the host with the kernel source file(s) it tests and the fakes, nothing else of the
# kernel, and run.
#
# make -C kernel/tests test build and run them all; fails if any check fails
# make -C kernel/tests run-test_gpt
#
# A test's sources are SRC_<test>; give another on the command line to run the same test against
# it (how a test is seen to fail against the code before a fix):
# make -C kernel/tests run-test_gpt SRC_test_gpt=/path/to/old/gpt.c
HERE := $(abspath $(dir $(lastword $(MAKEFILE_LIST))))
ROOT := $(abspath $(HERE)/../..)
BUILD := $(ROOT)/build/kernel-tests
CC ?= cc
CFLAGS := -std=c99 -Wall -Wextra -Werror -O2 -g -I$(HERE) -I$(ROOT)/kernel/include \
-I$(ROOT)/kernel/include/starkernel -I$(ROOT)/v3/include
TESTS := test_gpt
SRC_test_gpt := $(ROOT)/kernel/src/gpt.c
define TEST_RULE
$(BUILD)/$(1): $(HERE)/$(1).c $(HERE)/fakes.c $(HERE)/fakes.h $(HERE)/harness.h $$(SRC_$(1))
@mkdir -p $(BUILD)
$(CC) $(CFLAGS) $(HERE)/$(1).c $(HERE)/fakes.c $$(SRC_$(1)) -o $$@
.PHONY: run-$(1)
run-$(1): $(BUILD)/$(1)
@echo "$(1)"
@$(BUILD)/$(1)
endef
$(foreach t,$(TESTS),$(eval $(call TEST_RULE,$(t))))
.PHONY: test
test: $(addprefix run-,$(TESTS))
@echo "all kernel host tests passed"