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:
parent
13c4498e11
commit
c10671cbb3
3 changed files with 31 additions and 4 deletions
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in a new issue