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