1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-02-15 04:42:04 +00:00

Cover all kernel file.

This commit is contained in:
winlin 2019-05-14 08:24:43 +08:00
parent 13c4498e11
commit c10671cbb3
3 changed files with 31 additions and 4 deletions

View file

@ -41,6 +41,7 @@ _srs_open_t _srs_open_fn = ::open;
_srs_write_t _srs_write_fn = ::write; _srs_write_t _srs_write_fn = ::write;
_srs_read_t _srs_read_fn = ::read; _srs_read_t _srs_read_fn = ::read;
_srs_lseek_t _srs_lseek_fn = ::lseek; _srs_lseek_t _srs_lseek_fn = ::lseek;
_srs_close_t _srs_close_fn = ::close;
SrsFileWriter::SrsFileWriter() SrsFileWriter::SrsFileWriter()
{ {
@ -98,7 +99,7 @@ void SrsFileWriter::close()
return; return;
} }
if (::close(fd) < 0) { if (_srs_close_fn(fd) < 0) {
srs_warn("close file %s failed", path.c_str()); srs_warn("close file %s failed", path.c_str());
} }
fd = -1; fd = -1;
@ -209,7 +210,7 @@ void SrsFileReader::close()
return; return;
} }
if (::close(fd) < 0) { if (_srs_close_fn(fd) < 0) {
srs_warn("close file %s failed. ret=%d", path.c_str(), ret); srs_warn("close file %s failed. ret=%d", path.c_str(), ret);
} }
fd = -1; fd = -1;

View file

@ -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_write_t)(int fildes, const void* buf, size_t nbyte);
typedef ssize_t (*_srs_read_t)(int fildes, 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 off_t (*_srs_lseek_t)(int fildes, off_t offset, int whence);
typedef int (*_srs_close_t)(int fildes);
#endif #endif

View file

@ -2976,6 +2976,7 @@ extern _srs_open_t _srs_open_fn;
extern _srs_write_t _srs_write_fn; extern _srs_write_t _srs_write_fn;
extern _srs_read_t _srs_read_fn; extern _srs_read_t _srs_read_fn;
extern _srs_lseek_t _srs_lseek_fn; extern _srs_lseek_t _srs_lseek_fn;
extern _srs_close_t _srs_close_fn;
int mock_open(const char* /*path*/, int /*oflag*/, ...) { int mock_open(const char* /*path*/, int /*oflag*/, ...) {
return -1; return -1;
@ -2993,6 +2994,10 @@ off_t mock_lseek(int /*fildes*/, off_t /*offset*/, int /*whence*/) {
return -1; return -1;
} }
int mock_close(int /*fildes*/) {
return -1;
}
class MockSystemIO class MockSystemIO
{ {
private: private:
@ -3000,12 +3005,14 @@ private:
_srs_write_t ow; _srs_write_t ow;
_srs_read_t _or; _srs_read_t _or;
_srs_lseek_t os; _srs_lseek_t os;
_srs_close_t oc;
public: 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; oo = _srs_open_fn;
ow = _srs_write_fn; ow = _srs_write_fn;
os = _srs_lseek_fn; os = _srs_lseek_fn;
_or = _srs_read_fn; _or = _srs_read_fn;
oc = _srs_close_fn;
if (o) { if (o) {
_srs_open_fn = o; _srs_open_fn = o;
} }
@ -3018,6 +3025,9 @@ public:
if (s) { if (s) {
_srs_lseek_fn = s; _srs_lseek_fn = s;
} }
if (c) {
_srs_close_fn = c;
}
} }
virtual ~MockSystemIO() { virtual ~MockSystemIO() {
if (oo) { if (oo) {
@ -3032,6 +3042,9 @@ public:
if (os) { if (os) {
_srs_lseek_fn = 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)); 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) VOID TEST(KernelFileReaderTest, WriteSpecialCase)
@ -3140,7 +3159,7 @@ VOID TEST(KernelFileReaderTest, WriteSpecialCase)
// Should ok for lseek. // Should ok for lseek.
if (true) { if (true) {
SrsFileWriter f; SrsFileReader f;
HELPER_EXPECT_SUCCESS(f.open("/dev/null")); HELPER_EXPECT_SUCCESS(f.open("/dev/null"));
off_t seeked = 0; off_t seeked = 0;
@ -3165,6 +3184,12 @@ VOID TEST(KernelFileReaderTest, WriteSpecialCase)
HELPER_EXPECT_FAILED(f.lseek(0, 0, NULL)); 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) VOID TEST(KernelFLVTest, CoverAll)