#include "../tests.h" #include static void test_settime(void) { uint64_t ns = 1000000000; uint64_t base = 1337 * ns; union { uint64_t t; char buf[8]; } u; hid_t h = camellia_open("/dev/bintime", OPEN_RW); /* check if time is reasonable */ test(h >= 0); test(_sys_read(h, u.buf, 8, 0) == 8); test(0 < u.t); test(u.t < ns); /* this should've taken less than a second */ /* try changing the time */ u.t = base; test(_sys_write(h, u.buf, 8, 0, 0) == 8); /* did we succeed? */ u.t = 0; test(_sys_read(h, u.buf, 8, 0) == 8); test(base < u.t); test(u.t < base + ns); /* clone the handle */ hid_t h2 = _sys_dup(h, 0, DUP_SEARCH | DUP_RDONLY); test(h2 >= 0); /* i shouldn't be able to write to it */ u.t = 0; test(_sys_write(h2, u.buf, 8, 0, 0) == -EACCES); /* but reads should be fine */ test(_sys_read(h2, u.buf, 8, 0) == 8); test(base < u.t); test(u.t < base + ns); } void r_k_time(void) { run_test(test_settime); }