libluo: add tests
Add a test suite for libluo itself, and for the kernel LUO interface.
The below tests are added:
1. init - Tests the initialization and cleanup functions of libluo.
2. state - Tests the luo_get_state() API, which in turn tests the
LIVEUPDATE_IOCTL_GET_STATE ioctl
3. preserve - Creates a memfd, preserves it, puts LUO in prepared state,
cancels liveupdate, and makes sure memfd is functional.
4. prepared - Puts a memfd in LUO enters prepared state. Then it
makes sure the memfd stays functional but remains in restricted mode. It
makes sure the memfd can't grow or shrink, but can be read from or
written to.
5. transitions - Tests transitions from normal to prepared to cancel
state work.
6. error - Tests error handling of the library on invalid inputs.
7. kexec - Tests the main functionality of LUO -- preserving a FD over
kexec. It creates a memfd with random data, saves the data to a file on
disk, and then preserves the FD and goes into prepared state. Now the
test runner must perform a kexec. Once rebooted, running the test again
resumes the test. It fetches the memfd back, nd compares its content
with the saved data on disk.
A specific test can be selected or excluded uring the -t or -e arguments.
Sample run:
$ ./test
LibLUO Test Suite
=================
Testing initialization and cleanup... PASSED
Testing get_state... PASSED (current state: normal)
Testing state transitions... PASSED
Testing fd_preserve with freeze and cancel... PASSED
Testing operations on prepared memfd... PASSED
Testing error handling... PASSED
Testing fd preserve for kexec... READY FOR KEXEC (token: 3)
Run kexec now and then run this test again to complete.
All requested tests completed.
Signed-off-by: Pratyush Yadav <ptyadav@amazon.de>
4 files changed