From c666d59f5a1486615fa4020cb0702b766f79e21f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Sat, 21 Jun 2014 21:49:54 +0200 Subject: [PATCH] Test added: lv2/sys_semaphore --- tests/lv2/sys_semaphore/sys_semaphore.cpp | 185 ++++++++++++++++++ .../lv2/sys_semaphore/sys_semaphore.expected | 47 +++++ tests/lv2/sys_semaphore/sys_semaphore.ppu.elf | Bin 0 -> 91384 bytes 3 files changed, 232 insertions(+) create mode 100644 tests/lv2/sys_semaphore/sys_semaphore.cpp create mode 100644 tests/lv2/sys_semaphore/sys_semaphore.expected create mode 100644 tests/lv2/sys_semaphore/sys_semaphore.ppu.elf diff --git a/tests/lv2/sys_semaphore/sys_semaphore.cpp b/tests/lv2/sys_semaphore/sys_semaphore.cpp new file mode 100644 index 0000000..9de9776 --- /dev/null +++ b/tests/lv2/sys_semaphore/sys_semaphore.cpp @@ -0,0 +1,185 @@ +#include +#include + +#include +#include +#include +#include + +// Globals +sys_semaphore_t g_sem; + +void semWait(uint64_t arg) { + if (sys_semaphore_wait(g_sem, arg)) { + printf("[!] sys_semaphore_wait: Something went wrong!\n"); + exit(-1); + } + sys_ppu_thread_exit(0); +} + +void semWaitCheck(uint64_t arg) { + uint64_t dt; + uint64_t t0 = sys_time_get_system_time(); + if (sys_semaphore_wait(g_sem, arg)) { + printf("[!] sys_semaphore_wait: Something went wrong!\n"); + exit(-1); + } + dt = sys_time_get_system_time() - t0; + if (dt / 1000000 < 1) { + printf("[!] sys_semaphore_wait: Woke up too early!\n"); + exit(-1); + } + printf("sys_semaphore_wait: Thread woke up successfully\n"); + sys_ppu_thread_exit(0); +} + +void semTrywait(uint64_t arg) { + if (sys_semaphore_trywait(g_sem)) { + printf("[!] sys_semaphore_trywait: Something went wrong!\n"); + exit(-1); + } + sys_ppu_thread_exit(0); +} + +void semPost(uint64_t arg) { + sys_timer_sleep(1); + if (sys_semaphore_post(g_sem, arg) & ~0x8001000A) { + printf("[!] sys_semaphore_post: Something went wrong!\n"); + exit(-1); + } + sys_ppu_thread_exit(0); +} + +int createThreadAndJoin(void (*func)(uint64_t), uint64_t arg=0) { + uint64_t val; + sys_ppu_thread_t thread; + std::size_t stackSize = 4096; + if (sys_ppu_thread_create(&thread, func, arg, 1500, stackSize, SYS_PPU_THREAD_CREATE_JOINABLE, "Worker")) { + printf("[!] sys_ppu_thread_create: Something went wrong!\n"); + exit(-1); + } + if (sys_ppu_thread_join(thread, &val)) { + printf("[!] sys_ppu_thread_join: Something went wrong!\n"); + exit(-1); + } +} + +int createThread(void (*func)(uint64_t), uint64_t arg=0) { + uint64_t val; + sys_ppu_thread_t thread; + std::size_t stackSize = 4096; + if (sys_ppu_thread_create(&thread, func, arg, 1500, stackSize, 0, "Worker")) { + printf("[!] sys_ppu_thread_create: Something went wrong!\n"); + exit(-1); + } +} + +void testSysSemaphoreErrors() +{ + sys_semaphore_t sem; // Working semaphore + sys_semaphore_t sem_f; // Broken semaphore + sys_semaphore_attribute_t attr; // Initialized semaphore attribute + sys_semaphore_attribute_t attr_u; // Uninitialized semaphore attribute + sys_semaphore_attribute_initialize(attr); + sys_semaphore_value_t val; + + // Create the working semaphore + if (sys_semaphore_create(&sem, &attr, 0, 1)) { + printf("[!] sys_semaphore_create: Something went wrong!\n"); + exit(-1); + } + + // Error tests + printf("[*] Checking sys_semaphore_create errors:\n"); + printf("sys_semaphore_create: max_val < 0 returns: 0x%x\n", sys_semaphore_create(&sem_f, &attr, 0, -1)); + printf("sys_semaphore_create: max_val == 0 returns: 0x%x\n", sys_semaphore_create(&sem_f, &attr, 0, 0)); + printf("sys_semaphore_create: initial_val < 0 returns: 0x%x\n", sys_semaphore_create(&sem_f, &attr, -1, 0)); + printf("sys_semaphore_create: initial_val > max_val returns: 0x%x\n", sys_semaphore_create(&sem_f, &attr, 2, 1)); + printf("sys_semaphore_create: &sem == NULL returns: 0x%x\n", sys_semaphore_create(NULL, &attr, 0, 1)); + printf("sys_semaphore_create: &attr == NULL returns: 0x%x\n", sys_semaphore_create(&sem_f, NULL, 0, 1)); + printf("sys_semaphore_create: uninitialized attr returns: 0x%x\n", sys_semaphore_create(&sem_f, &attr_u, 0, 1)); + + // Error tests + printf("\n[*] Checking sys_semaphore_get_value errors:\n"); + printf("sys_semaphore_get_value: &val == NULL returns: 0x%x\n", sys_semaphore_get_value(sem, NULL)); + printf("sys_semaphore_get_value: failed semaphore id returns: 0x%x\n", sys_semaphore_get_value(sem_f, &val)); + printf("sys_semaphore_get_value: invalid semaphore id returns: 0x%x\n", sys_semaphore_get_value(NULL, &val)); + + printf("\n[*] Checking sys_semaphore_wait errors:\n"); + printf("sys_semaphore_wait: short timeout returns: 0x%x\n", sys_semaphore_wait(sem, 1ULL)); + printf("sys_semaphore_wait: failed semaphore id returns: 0x%x\n", sys_semaphore_wait(sem_f, 0ULL)); + printf("sys_semaphore_wait: invalid semaphore id returns: 0x%x\n", sys_semaphore_wait(NULL, 0ULL)); + + printf("\n[*] Checking sys_semaphore_trywait errors:\n"); + printf("sys_semaphore_trywait: semaphore value <= 0 returns: 0x%x\n", sys_semaphore_trywait(sem)); + printf("sys_semaphore_trywait: failed semaphore id returns: 0x%x\n", sys_semaphore_trywait(sem_f)); + printf("sys_semaphore_trywait: invalid semaphore id returns: 0x%x\n", sys_semaphore_trywait(NULL)); + + printf("\n[*] Checking sys_semaphore_post errors:\n"); + printf("sys_semaphore_post: failed semaphore id returns: 0x%x\n", sys_semaphore_post(sem_f, 0)); + printf("sys_semaphore_post: invalid semaphore id returns: 0x%x\n", sys_semaphore_post(NULL, 0)); + printf("sys_semaphore_post: val < 0 returns: 0x%x\n", sys_semaphore_post(sem, -1)); + printf("sys_semaphore_post: val > max_val returns: 0x%x\n", sys_semaphore_post(sem, 2)); + + // Destroy the working semaphore + if (sys_semaphore_destroy(sem)) { + printf("[!] sys_semaphore_destroy: Something went wrong!\n"); + exit(-1); + } + + // More error tests + printf("\n[*] Checking sys_semaphore_destroy errors:\n"); + printf("sys_semaphore_destroy: failed semaphore id returns: 0x%x\n", sys_semaphore_destroy(sem_f)); + printf("sys_semaphore_destroy: invalid semaphore id returns: 0x%x\n", sys_semaphore_destroy(NULL)); + printf("sys_semaphore_destroy: destroyed semaphore id returns: 0x%x\n", sys_semaphore_destroy(sem)); +} + +int main(void) { + // Check errors on purpose + testSysSemaphoreErrors(); + + // Create the global semaphore + sys_semaphore_attribute_t attr; + sys_semaphore_attribute_initialize(attr); + if (sys_semaphore_create(&g_sem, &attr, 2, 2)) { + printf("[!] sys_semaphore_create: Something went wrong!\n"); + exit(-1); + } + + // Decrement semaphore: 2 -> 1 -> 0 + sys_semaphore_value_t val; + printf("\n[*] Testing sys_semaphore_get_value and sys_semaphore_(try)wait:\n"); + sys_semaphore_get_value(g_sem, &val); + printf("sys_semaphore_get_value: 0x%x\n", val); + createThreadAndJoin(semWait, 0ULL); + sys_semaphore_get_value(g_sem, &val); + printf("sys_semaphore_get_value: 0x%x\n", val); + createThreadAndJoin(semTrywait); + sys_semaphore_get_value(g_sem, &val); + printf("sys_semaphore_get_value: 0x%x\n", val); + + // Create 3 threads and wake 1 of them after 1 second + printf("\n[*] Testing sys_semaphore_post and sys_semaphore_wait:\n"); + createThread(semWaitCheck, 0); + createThread(semWaitCheck, 0); + createThread(semWaitCheck, 900000000ULL); // 15 min timeout + createThreadAndJoin(semPost, 1); + sys_timer_sleep(2); + sys_semaphore_get_value(g_sem, &val); + printf("sys_semaphore_get_value: 0x%x\n", val); + + // Wake the 2 remaining threads after 1 second + createThreadAndJoin(semPost, 2); + sys_timer_sleep(2); + sys_semaphore_get_value(g_sem, &val); + printf("sys_semaphore_get_value: 0x%x\n", val); + + // Create 1 threads and post 30 to the semaphore after 1 second (it shouldn't wake up) + createThread(semWaitCheck, 0); + createThreadAndJoin(semPost, 30); + sys_timer_sleep(2); + sys_semaphore_get_value(g_sem, &val); + printf("sys_semaphore_get_value: 0x%x\n", val); + + return 0; +} diff --git a/tests/lv2/sys_semaphore/sys_semaphore.expected b/tests/lv2/sys_semaphore/sys_semaphore.expected new file mode 100644 index 0000000..a630d19 --- /dev/null +++ b/tests/lv2/sys_semaphore/sys_semaphore.expected @@ -0,0 +1,47 @@ +[*] Checking sys_semaphore_create errors: +sys_semaphore_create: max_val < 0 returns: 0x80010002 +sys_semaphore_create: max_val == 0 returns: 0x80010002 +sys_semaphore_create: initial_val < 0 returns: 0x80010002 +sys_semaphore_create: initial_val > max_val returns: 0x80010002 +sys_semaphore_create: &sem == NULL returns: 0x8001000d +sys_semaphore_create: &attr == NULL returns: 0x8001000d +sys_semaphore_create: uninitialized attr returns: 0x80010002 + +[*] Checking sys_semaphore_get_value errors: +sys_semaphore_get_value: &val == NULL returns: 0x8001000d +sys_semaphore_get_value: failed semaphore id returns: 0x80010005 +sys_semaphore_get_value: invalid semaphore id returns: 0x80010005 + +[*] Checking sys_semaphore_wait errors: +sys_semaphore_wait: short timeout returns: 0x8001000b +sys_semaphore_wait: failed semaphore id returns: 0x80010005 +sys_semaphore_wait: invalid semaphore id returns: 0x80010005 + +[*] Checking sys_semaphore_trywait errors: +sys_semaphore_trywait: semaphore value <= 0 returns: 0x8001000a +sys_semaphore_trywait: failed semaphore id returns: 0x80010005 +sys_semaphore_trywait: invalid semaphore id returns: 0x80010005 + +[*] Checking sys_semaphore_post errors: +sys_semaphore_post: failed semaphore id returns: 0x80010005 +sys_semaphore_post: invalid semaphore id returns: 0x80010005 +sys_semaphore_post: val < 0 returns: 0x80010002 +sys_semaphore_post: val > max_val returns: 0x8001000a + +[*] Checking sys_semaphore_destroy errors: +sys_semaphore_destroy: failed semaphore id returns: 0x80010005 +sys_semaphore_destroy: invalid semaphore id returns: 0x80010005 +sys_semaphore_destroy: destroyed semaphore id returns: 0x80010005 + +[*] Testing sys_semaphore_get_value and sys_semaphore_(try)wait: +sys_semaphore_get_value: 0x2 +sys_semaphore_get_value: 0x1 +sys_semaphore_get_value: 0x0 + +[*] Testing sys_semaphore_post and sys_semaphore_wait: +sys_semaphore_wait: Thread woke up successfully +sys_semaphore_get_value: 0x0 +sys_semaphore_wait: Thread woke up successfully +sys_semaphore_wait: Thread woke up successfully +sys_semaphore_get_value: 0x0 +sys_semaphore_get_value: 0x0 diff --git a/tests/lv2/sys_semaphore/sys_semaphore.ppu.elf b/tests/lv2/sys_semaphore/sys_semaphore.ppu.elf new file mode 100644 index 0000000000000000000000000000000000000000..39dd5ce8a9db8782bc4319b67c0b898c55bea915 GIT binary patch literal 91384 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 literal 0 HcmV?d00001