/* SPDX-License-Identifier: LicenseRef-Starship-1.0 * Copyright (c) 2023-2026 Robert A. James */ /* fakes.h -- what a kernel unit calls, faked on the host: the console (captured), the RNG * (deterministic), and a RAM disk whose reads or writes fail at chosen 1 KiB blocks * (docs/v4.0.0/plans/2026-11-12-kernel-host-tests.md). */ #ifndef KERNEL_TESTS_FAKES_H #define KERNEL_TESTS_FAKES_H #include #include #include "blkio.h" /* The console: every console_println/console_puts line, in order. */ void fake_console_reset(void); int fake_console_said(const char *text); /* 1 if some line contains `text` */ unsigned fake_console_lines(void); const char *fake_console_line(unsigned i); /* The RNG: a fixed sequence, so a test's GUIDs are the same every run; fake_rng_fail makes * rng_get_bytes return -1 (no backend). */ void fake_rng_reset(void); void fake_rng_fail(int fail); /* A RAM disk of `blocks` 1 KiB blocks (512-byte sectors, so 2 per block). A read or write of a * block in its fail lists returns BLKIO_EIO and changes nothing; every write is counted. */ #define FAKE_DISK_MAX_FAULTS 8 typedef struct { uint8_t *bytes; uint32_t blocks; uint32_t fail_read[FAKE_DISK_MAX_FAULTS], n_fail_read; uint32_t fail_write[FAKE_DISK_MAX_FAULTS], n_fail_write; unsigned writes, flushes; int fail_flush; } fake_disk; int fake_disk_open(blkio_dev_t *dev, fake_disk *d, uint32_t blocks); /* zeroed; BLKIO_OK */ void fake_disk_free(fake_disk *d); void fake_disk_fail_read(fake_disk *d, uint32_t block); void fake_disk_fail_write(fake_disk *d, uint32_t block); uint8_t *fake_disk_sector(fake_disk *d, uint64_t lba); /* a 512-byte sector */ #endif