From c10671cbb37ec4f4d9df9bca22f8b7422a7fe7d0 Mon Sep 17 00:00:00 2001 From: winlin Date: Tue, 14 May 2019 08:24:43 +0800 Subject: [PATCH] Cover all kernel file. --- trunk/src/kernel/srs_kernel_file.cpp | 5 +++-- trunk/src/kernel/srs_kernel_file.hpp | 1 + trunk/src/utest/srs_utest_kernel.cpp | 29 ++++++++++++++++++++++++++-- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/trunk/src/kernel/srs_kernel_file.cpp b/trunk/src/kernel/srs_kernel_file.cpp index 7857c72ae..88bee7e68 100644 --- a/trunk/src/kernel/srs_kernel_file.cpp +++ b/trunk/src/kernel/srs_kernel_file.cpp @@ -41,6 +41,7 @@ _srs_open_t _srs_open_fn = ::open; _srs_write_t _srs_write_fn = ::write; _srs_read_t _srs_read_fn = ::read; _srs_lseek_t _srs_lseek_fn = ::lseek; +_srs_close_t _srs_close_fn = ::close; SrsFileWriter::SrsFileWriter() { @@ -98,7 +99,7 @@ void SrsFileWriter::close() return; } - if (::close(fd) < 0) { + if (_srs_close_fn(fd) < 0) { srs_warn("close file %s failed", path.c_str()); } fd = -1; @@ -209,7 +210,7 @@ void SrsFileReader::close() return; } - if (::close(fd) < 0) { + if (_srs_close_fn(fd) < 0) { srs_warn("close file %s failed. ret=%d", path.c_str(), ret); } fd = -1; diff --git a/trunk/src/kernel/srs_kernel_file.hpp b/trunk/src/kernel/srs_kernel_file.hpp index 2a2d2842e..c38b72672 100644 --- a/trunk/src/kernel/srs_kernel_file.hpp +++ b/trunk/src/kernel/srs_kernel_file.hpp @@ -113,6 +113,7 @@ typedef int (*_srs_open_t)(const char* path, int oflag, ...); typedef ssize_t (*_srs_write_t)(int fildes, const void* buf, size_t nbyte); typedef ssize_t (*_srs_read_t)(int fildes, void* buf, size_t nbyte); typedef off_t (*_srs_lseek_t)(int fildes, off_t offset, int whence); +typedef int (*_srs_close_t)(int fildes); #endif diff --git a/trunk/src/utest/srs_utest_kernel.cpp b/trunk/src/utest/srs_utest_kernel.cpp index 571f5b3ff..c98c4cd44 100644 --- a/trunk/src/utest/srs_utest_kernel.cpp +++ b/trunk/src/utest/srs_utest_kernel.cpp @@ -2976,6 +2976,7 @@ extern _srs_open_t _srs_open_fn; extern _srs_write_t _srs_write_fn; extern _srs_read_t _srs_read_fn; extern _srs_lseek_t _srs_lseek_fn; +extern _srs_close_t _srs_close_fn; int mock_open(const char* /*path*/, int /*oflag*/, ...) { return -1; @@ -2993,6 +2994,10 @@ off_t mock_lseek(int /*fildes*/, off_t /*offset*/, int /*whence*/) { return -1; } +int mock_close(int /*fildes*/) { + return -1; +} + class MockSystemIO { private: @@ -3000,12 +3005,14 @@ private: _srs_write_t ow; _srs_read_t _or; _srs_lseek_t os; + _srs_close_t oc; public: - MockSystemIO(_srs_open_t o = NULL, _srs_write_t w = NULL, _srs_read_t r = NULL, _srs_lseek_t s = NULL) { + MockSystemIO(_srs_open_t o = NULL, _srs_write_t w = NULL, _srs_read_t r = NULL, _srs_lseek_t s = NULL, _srs_close_t c = NULL) { oo = _srs_open_fn; ow = _srs_write_fn; os = _srs_lseek_fn; _or = _srs_read_fn; + oc = _srs_close_fn; if (o) { _srs_open_fn = o; } @@ -3018,6 +3025,9 @@ public: if (s) { _srs_lseek_fn = s; } + if (c) { + _srs_close_fn = c; + } } virtual ~MockSystemIO() { if (oo) { @@ -3032,6 +3042,9 @@ public: if (os) { _srs_lseek_fn = os; } + if (oc) { + _srs_close_fn = oc; + } } }; @@ -3117,6 +3130,12 @@ VOID TEST(KernelFileWriterTest, WriteSpecialCase) HELPER_EXPECT_FAILED(f.lseek(0, 0, NULL)); } + if (true) { + MockSystemIO _mockio(NULL, NULL, NULL, NULL, mock_close); + SrsFileWriter f; + HELPER_EXPECT_SUCCESS(f.open("/dev/null")); + f.close(); + } } VOID TEST(KernelFileReaderTest, WriteSpecialCase) @@ -3140,7 +3159,7 @@ VOID TEST(KernelFileReaderTest, WriteSpecialCase) // Should ok for lseek. if (true) { - SrsFileWriter f; + SrsFileReader f; HELPER_EXPECT_SUCCESS(f.open("/dev/null")); off_t seeked = 0; @@ -3165,6 +3184,12 @@ VOID TEST(KernelFileReaderTest, WriteSpecialCase) HELPER_EXPECT_FAILED(f.lseek(0, 0, NULL)); } + if (true) { + MockSystemIO _mockio(NULL, NULL, NULL, NULL, mock_close); + SrsFileReader f; + HELPER_EXPECT_SUCCESS(f.open("/dev/null")); + f.close(); + } } VOID TEST(KernelFLVTest, CoverAll)