Cover all kernel file.

pull/1398/head
winlin 6 years ago
parent 13c4498e11
commit c10671cbb3

@ -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;

@ -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

@ -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)

Loading…
Cancel
Save