diff --git a/.gitignore b/.gitignore index afef42a..819a3d8 100644 --- a/.gitignore +++ b/.gitignore @@ -24,4 +24,6 @@ /tests/test*.log /tests/test*.trs +/tests/multiboot2_print +/tests/test_multiboot2_print /tests/test_multiboot2_validation diff --git a/Makefile.am b/Makefile.am index 404faef..1e0a576 100644 --- a/Makefile.am +++ b/Makefile.am @@ -5,9 +5,12 @@ AM_CFLAGS = -std=c99 -I$(top_srcdir)/include lib_LIBRARIES = libkernaux.a TESTS = \ + tests/test_multiboot2_print \ tests/test_multiboot2_validation -noinst_PROGRAMS = $(TESTS) +noinst_PROGRAMS = \ + $(TESTS) \ + tests/multiboot2_print libkernaux_a_SOURCES = \ src/arch/i386.S \ @@ -15,6 +18,14 @@ libkernaux_a_SOURCES = \ src/multiboot2/print.c \ src/pfa.c +tests_multiboot2_print_SOURCES = \ + $(libkernaux_a_SOURCES) \ + tests/multiboot2_print.c + +tests_test_multiboot2_print_SOURCES = \ + $(libkernaux_a_SOURCES) \ + tests/test_multiboot2_print.c + tests_test_multiboot2_validation_SOURCES = \ $(libkernaux_a_SOURCES) \ tests/test_multiboot2_validation.c diff --git a/tests/multiboot2_print.c b/tests/multiboot2_print.c new file mode 100644 index 0000000..9505a82 --- /dev/null +++ b/tests/multiboot2_print.c @@ -0,0 +1,70 @@ +#include + +#include + +static const unsigned char multiboot2_example[864] = { + 96, 3, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 12, 0, 0, 0, + 0, 0, 64, 0, 0, 0, 232, 133, 1, 0, 0, 0, 21, 0, 0, 0, + 104, 101, 108, 108, 111, 32, 107, 101, 114, 110, 101, 108, 0, 139, 69, 228, + 2, 0, 0, 0, 30, 0, 0, 0, 71, 82, 85, 66, 32, 50, 46, 48, + 50, 45, 50, 117, 98, 117, 110, 116, 117, 56, 46, 50, 48, 0, 0, 0, + 10, 0, 0, 0, 28, 0, 0, 0, 2, 1, 0, 240, 207, 212, 0, 0, + 0, 240, 0, 240, 3, 0, 240, 255, 240, 255, 240, 255, 1, 0, 0, 0, + 3, 0, 0, 0, 29, 0, 0, 0, 0, 32, 16, 0, 156, 50, 16, 0, + 104, 101, 108, 108, 111, 32, 109, 111, 100, 117, 108, 101, 0, 131, 255, 16, + 3, 0, 0, 0, 17, 0, 0, 0, 0, 64, 16, 0, 84, 82, 16, 0, + 0, 232, 99, 9, 0, 0, 235, 53, 6, 0, 0, 0, 160, 0, 0, 0, + 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 252, 9, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 252, 9, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 238, 7, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 7, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 252, 255, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 164, 1, 0, 0, + 10, 0, 0, 0, 40, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 27, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, + 0, 0, 64, 0, 0, 16, 0, 0, 150, 53, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, + 1, 0, 0, 0, 2, 0, 0, 0, 0, 64, 64, 0, 0, 80, 0, 0, + 8, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, + 0, 0, 0, 0, 41, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, + 8, 75, 64, 0, 8, 91, 0, 0, 132, 10, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, + 1, 0, 0, 0, 3, 0, 0, 0, 0, 96, 64, 0, 0, 112, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, + 0, 0, 0, 0, 57, 0, 0, 0, 8, 0, 0, 0, 3, 0, 0, 0, + 0, 112, 64, 0, 1, 112, 0, 0, 64, 169, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, + 1, 0, 0, 0, 48, 0, 0, 0, 0, 0, 16, 0, 1, 112, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, + 20, 0, 16, 0, 20, 112, 0, 0, 176, 12, 0, 0, 8, 0, 0, 0, + 72, 0, 0, 0, 4, 0, 0, 0, 16, 0, 0, 0, 9, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 196, 12, 16, 0, 196, 124, 0, 0, + 208, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 148, 26, 16, 0, 148, 138, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 217, 255, 255, 137, + 4, 0, 0, 0, 16, 0, 0, 0, 127, 2, 0, 0, 128, 251, 1, 0, + 5, 0, 0, 0, 20, 0, 0, 0, 224, 0, 0, 0, 255, 255, 255, 255, + 255, 255, 255, 255, 208, 137, 69, 212, 8, 0, 0, 0, 32, 0, 0, 0, + 0, 128, 11, 0, 0, 0, 0, 0, 160, 0, 0, 0, 80, 0, 0, 0, + 25, 0, 0, 0, 16, 2, 0, 0, 14, 0, 0, 0, 28, 0, 0, 0, + 82, 83, 68, 32, 80, 84, 82, 32, 60, 66, 79, 67, 72, 83, 32, 0, + 252, 21, 254, 7, 236, 0, 0, 235, 0, 0, 0, 0, 8, 0, 0, 0, +}; + +int main() +{ + KernAux_Multiboot2_print( + (struct KernAux_Multiboot2*)multiboot2_example, + (void (*)(const char *format, ...))printf + ); + + return 0; +} diff --git a/tests/test_multiboot2_print.c b/tests/test_multiboot2_print.c new file mode 100644 index 0000000..91a00c7 --- /dev/null +++ b/tests/test_multiboot2_print.c @@ -0,0 +1,77 @@ +#include + +#define __USE_POSIX2 +#include + +static const char output[] = + "Multiboot 2 info\n" + " size: 864\n" + " reserved1: 0\n" + "Multiboot 2 tag\n" + " type: 21 (image load base phys addr)\n" + " size: 12\n" + " load base addr: 4194304\n" + "Multiboot 2 tag\n" + " type: 1 (boot cmd line)\n" + " size: 21\n" + " cmdline: hello kernel\n" + "Multiboot 2 tag\n" + " type: 2 (boot loader name)\n" + " size: 30\n" + " name: GRUB 2.02-2ubuntu8.20\n" + "Multiboot 2 tag\n" + " type: 10 (APM table)\n" + " size: 28\n" + "Multiboot 2 tag\n" + " type: 3 (module)\n" + " size: 29\n" + " start: 1056768\n" + " end: 1061532\n" + " cmdline: hello module\n" + "Multiboot 2 tag\n" + " type: 3 (module)\n" + " size: 17\n" + " start: 1064960\n" + " end: 1069652\n" + " cmdline: \n" + "Multiboot 2 tag\n" + " type: 6 (memory map)\n" + " size: 160\n" + "Multiboot 2 tag\n" + " type: 9 (ELF symbols)\n" + " size: 420\n" + "Multiboot 2 tag\n" + " type: 4 (basic memory info)\n" + " size: 16\n" + " mem lower: 639\n" + " mem upper: 129920\n" + "Multiboot 2 tag\n" + " type: 5 (BIOS boot device)\n" + " size: 20\n" + " bios dev: 224\n" + " partition: 4294967295\n" + " sub_partition: 4294967295\n" + "Multiboot 2 tag\n" + " type: 8 (framebuffer info)\n" + " size: 32\n" + "Multiboot 2 tag\n" + " type: 14 (ACPI old RSDP)\n" + " size: 28\n" + "Multiboot 2 tag\n" + " type: 0 (none)\n" + " size: 8\n"; + +int main() +{ + FILE *const fd = popen("tests/multiboot2_print", "r"); + assert(fd != NULL); + + for (const char *ch = output; *ch; ++ch) { + assert(fgetc(fd) == *ch); + } + + const int status = pclose(fd); + assert(status == 0); + + return 0; +}