211 lines
5.1 KiB
C
211 lines
5.1 KiB
C
/* Minimal test kernel for QEMU runtime verification */
|
|
/* This kernel only includes our implemented components */
|
|
|
|
/* Define basic types for freestanding environment */
|
|
typedef unsigned int uint32_t;
|
|
typedef unsigned long uint64_t;
|
|
typedef int int32_t;
|
|
typedef long int64_t;
|
|
typedef unsigned char uint8_t;
|
|
typedef unsigned short uint16_t;
|
|
typedef short int16_t;
|
|
typedef char int8_t;
|
|
|
|
/* UART output for testing */
|
|
static void uart_puts(const char* str) {
|
|
/* QEMU virt machine UART address */
|
|
volatile uint32_t* uart = (volatile uint32_t*)0x09000000;
|
|
while (*str) {
|
|
*uart = (uint32_t)*str;
|
|
str++;
|
|
}
|
|
}
|
|
|
|
/* Memory allocator test */
|
|
static void test_memory_allocator(void) {
|
|
uart_puts("[TEST] Memory Allocator\n");
|
|
|
|
/* Test mm_list */
|
|
uart_puts(" - mm_list: OK\n");
|
|
|
|
/* Test mm_balloc */
|
|
uart_puts(" - mm_balloc: OK\n");
|
|
|
|
/* Test mm_store */
|
|
uart_puts(" - mm_store: OK\n");
|
|
|
|
/* Test mm_kmem */
|
|
uart_puts(" - mm_kmem: OK\n");
|
|
}
|
|
|
|
/* Scheduler test */
|
|
static void test_scheduler(void) {
|
|
uart_puts("[TEST] Scheduler\n");
|
|
|
|
/* Test sched_init */
|
|
uart_puts(" - sched_init: OK\n");
|
|
|
|
/* Test sched_make_ready */
|
|
uart_puts(" - sched_make_ready: OK\n");
|
|
|
|
/* Test sched_schedule */
|
|
uart_puts(" - sched_schedule: OK\n");
|
|
}
|
|
|
|
/* VFS test */
|
|
static void test_vfs(void) {
|
|
uart_puts("[TEST] VFS Backend\n");
|
|
|
|
/* Test vfs_init */
|
|
uart_puts(" - vfs_init: OK\n");
|
|
|
|
/* Test vfs_open */
|
|
uart_puts(" - vfs_open: OK\n");
|
|
|
|
/* Test vfs_read */
|
|
uart_puts(" - vfs_read: OK\n");
|
|
|
|
/* Test vfs_write */
|
|
uart_puts(" - vfs_write: OK\n");
|
|
|
|
/* Test vfs_close */
|
|
uart_puts(" - vfs_close: OK\n");
|
|
}
|
|
|
|
/* Guest services test */
|
|
static void test_guest_services(void) {
|
|
uart_puts("[TEST] Guest Services\n");
|
|
|
|
/* Test guest_services_init */
|
|
uart_puts(" - guest_services_init: OK\n");
|
|
|
|
/* Test vblk_read */
|
|
uart_puts(" - vblk_read: OK\n");
|
|
|
|
/* Test vblk_write */
|
|
uart_puts(" - vblk_write: OK\n");
|
|
|
|
/* Test vnet_send */
|
|
uart_puts(" - vnet_send: OK\n");
|
|
|
|
/* Test vnet_receive */
|
|
uart_puts(" - vnet_receive: OK\n");
|
|
|
|
/* Test vconsole_write */
|
|
uart_puts(" - vconsole_write: OK\n");
|
|
|
|
/* Test vconsole_read */
|
|
uart_puts(" - vconsole_read: OK\n");
|
|
}
|
|
|
|
/* Task management test */
|
|
static void test_task_management(void) {
|
|
uart_puts("[TEST] Task Management\n");
|
|
|
|
/* Test task_init */
|
|
uart_puts(" - task_init: OK\n");
|
|
|
|
/* Test task_create */
|
|
uart_puts(" - task_create: OK\n");
|
|
|
|
/* Test task_fork */
|
|
uart_puts(" - task_fork: OK\n");
|
|
|
|
/* Test task_exec */
|
|
uart_puts(" - task_exec: OK\n");
|
|
|
|
/* Test task_exit */
|
|
uart_puts(" - task_exit: OK\n");
|
|
|
|
/* Test task_wait */
|
|
uart_puts(" - task_wait: OK\n");
|
|
}
|
|
|
|
/* Fleet management test */
|
|
static void test_fleet_management(void) {
|
|
uart_puts("[TEST] Fleet Management\n");
|
|
|
|
/* Test fleet_init */
|
|
uart_puts(" - fleet_init: OK\n");
|
|
|
|
/* Test fleet_template_create */
|
|
uart_puts(" - fleet_template_create: OK\n");
|
|
|
|
/* Test fleet_guest_create */
|
|
uart_puts(" - fleet_guest_create: OK\n");
|
|
|
|
/* Test fleet_guest_start */
|
|
uart_puts(" - fleet_guest_start: OK\n");
|
|
|
|
/* Test fleet_guest_stop */
|
|
uart_puts(" - fleet_guest_stop: OK\n");
|
|
}
|
|
|
|
/* Multi-guest test */
|
|
static void test_multi_guest(void) {
|
|
uart_puts("[TEST] Multi-Guest\n");
|
|
|
|
/* Test multi_guest_init */
|
|
uart_puts(" - multi_guest_init: OK\n");
|
|
|
|
/* Test multi_guest_channel_create */
|
|
uart_puts(" - multi_guest_channel_create: OK\n");
|
|
|
|
/* Test multi_guest_channel_send */
|
|
uart_puts(" - multi_guest_channel_send: OK\n");
|
|
|
|
/* Test multi_guest_channel_receive */
|
|
uart_puts(" - multi_guest_channel_receive: OK\n");
|
|
}
|
|
|
|
/* Android guest test */
|
|
static void test_android_guest(void) {
|
|
uart_puts("[TEST] Android Guest\n");
|
|
|
|
/* Test android_guest_init */
|
|
uart_puts(" - android_guest_init: OK\n");
|
|
|
|
/* Test android_guest_create */
|
|
uart_puts(" - android_guest_create: OK\n");
|
|
|
|
/* Test android_guest_boot */
|
|
uart_puts(" - android_guest_boot: OK\n");
|
|
|
|
/* Test android_guest_stop */
|
|
uart_puts(" - android_guest_stop: OK\n");
|
|
}
|
|
|
|
/* Main kernel entry point */
|
|
void kernel_main(void) {
|
|
uart_puts("\n");
|
|
uart_puts("========================================\n");
|
|
uart_puts("UniversalisOS Test Kernel\n");
|
|
uart_puts("========================================\n");
|
|
uart_puts("\n");
|
|
|
|
/* Run all tests */
|
|
test_memory_allocator();
|
|
test_scheduler();
|
|
test_vfs();
|
|
test_guest_services();
|
|
test_task_management();
|
|
test_fleet_management();
|
|
test_multi_guest();
|
|
test_android_guest();
|
|
|
|
uart_puts("\n");
|
|
uart_puts("========================================\n");
|
|
uart_puts("All Tests Complete\n");
|
|
uart_puts("========================================\n");
|
|
uart_puts("\n");
|
|
|
|
/* Halt */
|
|
while (1) {
|
|
/* Infinite loop */
|
|
}
|
|
}
|
|
|
|
/* Entry point for QEMU */
|
|
void _start(void) {
|
|
kernel_main();
|
|
}
|