1118bdd58389c77dd69b37e377b4e98ea89d2b14eSharvil Nanavati#include <gtest/gtest.h>
2118bdd58389c77dd69b37e377b4e98ea89d2b14eSharvil Nanavati
3384f8a948e9837475c4f504a626205334522df2aZach Johnson#include "AllocationTestHarness.h"
4384f8a948e9837475c4f504a626205334522df2aZach Johnson
5118bdd58389c77dd69b37e377b4e98ea89d2b14eSharvil Nanavatiextern "C" {
6cc3306f36fc9b0fe6f93bf9003ee8759f78d1a1eZach Johnson#include <sys/select.h>
7cc3306f36fc9b0fe6f93bf9003ee8759f78d1a1eZach Johnson
8cc3306f36fc9b0fe6f93bf9003ee8759f78d1a1eZach Johnson#include "reactor.h"
9cc3306f36fc9b0fe6f93bf9003ee8759f78d1a1eZach Johnson#include "semaphore.h"
10118bdd58389c77dd69b37e377b4e98ea89d2b14eSharvil Nanavati#include "thread.h"
11118bdd58389c77dd69b37e377b4e98ea89d2b14eSharvil Nanavati#include "osi.h"
12118bdd58389c77dd69b37e377b4e98ea89d2b14eSharvil Nanavati}
13118bdd58389c77dd69b37e377b4e98ea89d2b14eSharvil Nanavati
14384f8a948e9837475c4f504a626205334522df2aZach Johnsonclass ThreadTest : public AllocationTestHarness {};
15384f8a948e9837475c4f504a626205334522df2aZach Johnson
16384f8a948e9837475c4f504a626205334522df2aZach JohnsonTEST_F(ThreadTest, test_new_simple) {
1794347a59972868cf6d74f92cf793eb0b4b97c45aSharvil Nanavati  thread_t *thread = thread_new("test_thread");
18118bdd58389c77dd69b37e377b4e98ea89d2b14eSharvil Nanavati  ASSERT_TRUE(thread != NULL);
1994347a59972868cf6d74f92cf793eb0b4b97c45aSharvil Nanavati  thread_free(thread);
20118bdd58389c77dd69b37e377b4e98ea89d2b14eSharvil Nanavati}
21118bdd58389c77dd69b37e377b4e98ea89d2b14eSharvil Nanavati
22384f8a948e9837475c4f504a626205334522df2aZach JohnsonTEST_F(ThreadTest, test_free_simple) {
2394347a59972868cf6d74f92cf793eb0b4b97c45aSharvil Nanavati  thread_t *thread = thread_new("test_thread");
2494347a59972868cf6d74f92cf793eb0b4b97c45aSharvil Nanavati  thread_free(thread);
25118bdd58389c77dd69b37e377b4e98ea89d2b14eSharvil Nanavati}
26118bdd58389c77dd69b37e377b4e98ea89d2b14eSharvil Nanavati
27384f8a948e9837475c4f504a626205334522df2aZach JohnsonTEST_F(ThreadTest, test_name) {
2894347a59972868cf6d74f92cf793eb0b4b97c45aSharvil Nanavati  thread_t *thread = thread_new("test_name");
29118bdd58389c77dd69b37e377b4e98ea89d2b14eSharvil Nanavati  ASSERT_STREQ(thread_name(thread), "test_name");
3094347a59972868cf6d74f92cf793eb0b4b97c45aSharvil Nanavati  thread_free(thread);
31118bdd58389c77dd69b37e377b4e98ea89d2b14eSharvil Nanavati}
32118bdd58389c77dd69b37e377b4e98ea89d2b14eSharvil Nanavati
33384f8a948e9837475c4f504a626205334522df2aZach JohnsonTEST_F(ThreadTest, test_long_name) {
3494347a59972868cf6d74f92cf793eb0b4b97c45aSharvil Nanavati  thread_t *thread = thread_new("0123456789abcdef");
35118bdd58389c77dd69b37e377b4e98ea89d2b14eSharvil Nanavati  ASSERT_STREQ("0123456789abcdef", thread_name(thread));
3694347a59972868cf6d74f92cf793eb0b4b97c45aSharvil Nanavati  thread_free(thread);
37118bdd58389c77dd69b37e377b4e98ea89d2b14eSharvil Nanavati}
38118bdd58389c77dd69b37e377b4e98ea89d2b14eSharvil Nanavati
39384f8a948e9837475c4f504a626205334522df2aZach JohnsonTEST_F(ThreadTest, test_very_long_name) {
4094347a59972868cf6d74f92cf793eb0b4b97c45aSharvil Nanavati  thread_t *thread = thread_new("0123456789abcdefg");
41118bdd58389c77dd69b37e377b4e98ea89d2b14eSharvil Nanavati  ASSERT_STREQ("0123456789abcdef", thread_name(thread));
4294347a59972868cf6d74f92cf793eb0b4b97c45aSharvil Nanavati  thread_free(thread);
43118bdd58389c77dd69b37e377b4e98ea89d2b14eSharvil Nanavati}
44cc3306f36fc9b0fe6f93bf9003ee8759f78d1a1eZach Johnson
457c19f013b81edd43466ac88bf078cfdcf4ba534aSharvil Nanavatistatic void thread_is_self_fn(void *context) {
467c19f013b81edd43466ac88bf078cfdcf4ba534aSharvil Nanavati  thread_t *thread = (thread_t *)context;
477c19f013b81edd43466ac88bf078cfdcf4ba534aSharvil Nanavati  EXPECT_TRUE(thread_is_self(thread));
487c19f013b81edd43466ac88bf078cfdcf4ba534aSharvil Nanavati}
497c19f013b81edd43466ac88bf078cfdcf4ba534aSharvil Nanavati
50384f8a948e9837475c4f504a626205334522df2aZach JohnsonTEST_F(ThreadTest, test_thread_is_self) {
517c19f013b81edd43466ac88bf078cfdcf4ba534aSharvil Nanavati  thread_t *thread = thread_new("test_thread");
527c19f013b81edd43466ac88bf078cfdcf4ba534aSharvil Nanavati  thread_post(thread, thread_is_self_fn, thread);
537c19f013b81edd43466ac88bf078cfdcf4ba534aSharvil Nanavati  thread_free(thread);
547c19f013b81edd43466ac88bf078cfdcf4ba534aSharvil Nanavati}
557c19f013b81edd43466ac88bf078cfdcf4ba534aSharvil Nanavati
56384f8a948e9837475c4f504a626205334522df2aZach JohnsonTEST_F(ThreadTest, test_thread_is_not_self) {
577c19f013b81edd43466ac88bf078cfdcf4ba534aSharvil Nanavati  thread_t *thread = thread_new("test_thread");
587c19f013b81edd43466ac88bf078cfdcf4ba534aSharvil Nanavati  EXPECT_FALSE(thread_is_self(thread));
597c19f013b81edd43466ac88bf078cfdcf4ba534aSharvil Nanavati  thread_free(thread);
607c19f013b81edd43466ac88bf078cfdcf4ba534aSharvil Nanavati}
61