diff --git a/trunk/src/kernel/srs_kernel_utility.cpp b/trunk/src/kernel/srs_kernel_utility.cpp index 085d74331..d0f19d86c 100644 --- a/trunk/src/kernel/srs_kernel_utility.cpp +++ b/trunk/src/kernel/srs_kernel_utility.cpp @@ -122,11 +122,14 @@ srs_utime_t srs_get_system_startup_time() return _srs_system_time_startup_time; } +// For utest to mock it. +_srs_gettimeofday_t _srs_gettimeofday = ::gettimeofday; + srs_utime_t srs_update_system_time() { timeval now; - if (gettimeofday(&now, NULL) < 0) { + if (_srs_gettimeofday(&now, NULL) < 0) { srs_warn("gettimeofday failed, ignore"); return -1; } diff --git a/trunk/src/kernel/srs_kernel_utility.hpp b/trunk/src/kernel/srs_kernel_utility.hpp index 56bb78771..99a3fdc6a 100644 --- a/trunk/src/kernel/srs_kernel_utility.hpp +++ b/trunk/src/kernel/srs_kernel_utility.hpp @@ -161,5 +161,9 @@ extern int srs_chunk_header_c0(int perfer_cid, uint32_t timestamp, int32_t paylo // @return the size of header. 0 if cache not enough. extern int srs_chunk_header_c3(int perfer_cid, uint32_t timestamp, char* cache, int nb_cache); +// For utest to mock it. +#include +typedef int (*_srs_gettimeofday_t)(struct timeval* tv, struct timezone* tz); + #endif diff --git a/trunk/src/utest/srs_utest_kernel.cpp b/trunk/src/utest/srs_utest_kernel.cpp index 1898c533a..f3d580861 100644 --- a/trunk/src/utest/srs_utest_kernel.cpp +++ b/trunk/src/utest/srs_utest_kernel.cpp @@ -3597,6 +3597,37 @@ VOID TEST(KernelUtilityTest, CoverBitsBufferAll) } } +extern _srs_gettimeofday_t _srs_gettimeofday; +int mock_gettimeofday(struct timeval* /*tp*/, struct timezone* /*tzp*/) { + return -1; +} + +class MockTime +{ +private: + _srs_gettimeofday_t ot; +public: + MockTime(_srs_gettimeofday_t t = NULL) { + ot = _srs_gettimeofday; + if (t) { + _srs_gettimeofday = t; + } + } + virtual ~MockTime() { + if (ot) { + _srs_gettimeofday = ot; + } + } +}; + +VOID TEST(KernelUtilityTest, CoverTimeSpecial) +{ + if (true) { + MockTime _mt(mock_gettimeofday); + EXPECT_TRUE(-1 == srs_update_system_time()); + } +} + extern int64_t _srs_system_time_startup_time; extern int64_t _srs_system_time_us_cache; extern int av_toupper(int c);