@@ -4093,6 +4093,114 @@ class MockSystemIO
4093
4093
}
4094
4094
};
4095
4095
4096
+
4097
+ extern srs_fopen_t _srs_fopen_fn;
4098
+ extern srs_fwrite_t _srs_fwrite_fn;
4099
+ extern srs_fread_t _srs_fread_fn;
4100
+ extern srs_fseek_t _srs_fseek_fn;
4101
+ extern srs_fclose_t _srs_fclose_fn;
4102
+ extern srs_ftell_t _srs_ftell_fn;
4103
+ extern srs_setvbuf_t _srs_setvbuf_fn;
4104
+
4105
+
4106
+ FILE* mock_fopen (const char * path, const char * mode) {
4107
+ return NULL ;
4108
+ }
4109
+
4110
+ size_t mock_fwrite (const void * ptr, size_t size, size_t nitems, FILE* stream) {
4111
+ return -1 ;
4112
+ }
4113
+
4114
+ size_t mock_fread (void * ptr, size_t size, size_t nitems, FILE* stream) {
4115
+ return -1 ;
4116
+ }
4117
+
4118
+ int mock_fseek (FILE* stream, long offset, int whence) {
4119
+ return -1 ;
4120
+ }
4121
+
4122
+ int mock_fclose (FILE *stream) {
4123
+ return -1 ;
4124
+ }
4125
+
4126
+ long mock_ftell (FILE *stream) {
4127
+ return -1 ;
4128
+ }
4129
+
4130
+ int mock_setvbuf (FILE* stream, char * buf, int type, size_t size) {
4131
+ return -1 ;
4132
+ }
4133
+
4134
+ class MockLibcIO
4135
+ {
4136
+ private:
4137
+ srs_fopen_t oo_;
4138
+ srs_fwrite_t ow_;
4139
+ srs_fread_t or_;
4140
+ srs_fseek_t os_;
4141
+ srs_fclose_t oc_;
4142
+ srs_ftell_t ot_;
4143
+ srs_setvbuf_t osb_;
4144
+
4145
+ public:
4146
+ MockLibcIO (srs_fopen_t o = NULL , srs_fwrite_t w = NULL , srs_fread_t r = NULL ,
4147
+ srs_fseek_t s = NULL , srs_fclose_t c = NULL , srs_ftell_t t = NULL ,
4148
+ srs_setvbuf_t sb = NULL ) {
4149
+ oo_ = _srs_fopen_fn;
4150
+ ow_ = _srs_fwrite_fn;
4151
+ os_ = _srs_fseek_fn;
4152
+ or_ = _srs_fread_fn;
4153
+ oc_ = _srs_fclose_fn;
4154
+ ot_ = _srs_ftell_fn;
4155
+ osb_= _srs_setvbuf_fn;
4156
+
4157
+ if (o) {
4158
+ _srs_fopen_fn = o;
4159
+ }
4160
+ if (w) {
4161
+ _srs_fwrite_fn = w;
4162
+ }
4163
+ if (r) {
4164
+ _srs_fread_fn = r;
4165
+ }
4166
+ if (s) {
4167
+ _srs_fseek_fn = s;
4168
+ }
4169
+ if (c) {
4170
+ _srs_fclose_fn = c;
4171
+ }
4172
+ if (t) {
4173
+ _srs_ftell_fn = t;
4174
+ }
4175
+ if (sb){
4176
+ _srs_setvbuf_fn = sb;
4177
+ }
4178
+ }
4179
+ virtual ~MockLibcIO () {
4180
+ if (oo_) {
4181
+ _srs_fopen_fn = oo_;
4182
+ }
4183
+ if (ow_) {
4184
+ _srs_fwrite_fn = ow_;
4185
+ }
4186
+ if (or_) {
4187
+ _srs_fread_fn = or_;
4188
+ }
4189
+ if (os_) {
4190
+ _srs_fseek_fn = os_;
4191
+ }
4192
+ if (oc_) {
4193
+ _srs_fclose_fn = oc_;
4194
+ }
4195
+ if (ot_) {
4196
+ _srs_ftell_fn = ot_;
4197
+ }
4198
+ if (osb_) {
4199
+ _srs_setvbuf_fn = osb_;
4200
+ }
4201
+ }
4202
+ };
4203
+
4096
4204
VOID TEST (KernelFileWriterTest, WriteSpecialCase)
4097
4205
{
4098
4206
srs_error_t err;
@@ -4111,6 +4219,27 @@ VOID TEST(KernelFileWriterTest, WriteSpecialCase)
4111
4219
HELPER_EXPECT_FAILED (f.open_append (" /dev/null" ));
4112
4220
}
4113
4221
4222
+ if (true ) {
4223
+ SrsFileWriter f;
4224
+ HELPER_EXPECT_SUCCESS (f.open_append (" /dev/null" ));
4225
+ HELPER_EXPECT_SUCCESS (f.set_iobuf_size (65536 ));
4226
+ }
4227
+
4228
+ // Always fail.
4229
+ if (true ) {
4230
+ MockLibcIO _mockio (mock_fopen);
4231
+ SrsFileWriter f;
4232
+ HELPER_EXPECT_FAILED (f.open (" /dev/null" ));
4233
+ HELPER_EXPECT_FAILED (f.open (" /dev/null" ));
4234
+ }
4235
+
4236
+ if (true ) {
4237
+ MockLibcIO _mockio (mock_fopen);
4238
+ SrsFileWriter f;
4239
+ HELPER_EXPECT_FAILED (f.open_append (" /dev/null" ));
4240
+ HELPER_EXPECT_FAILED (f.open_append (" /dev/null" ));
4241
+ }
4242
+
4114
4243
// Should ok for write, writev or lseek.
4115
4244
if (true ) {
4116
4245
SrsFileWriter f;
@@ -4140,6 +4269,54 @@ VOID TEST(KernelFileWriterTest, WriteSpecialCase)
4140
4269
#endif
4141
4270
}
4142
4271
4272
+ // Always fail.
4273
+ if (true ) {
4274
+ MockLibcIO _mockio (NULL , mock_fwrite);
4275
+ SrsFileWriter f;
4276
+ HELPER_EXPECT_SUCCESS (f.open (" /dev/null" ));
4277
+
4278
+ ssize_t nn = 0 ;
4279
+ HELPER_EXPECT_FAILED (f.write ((void *)" Hello" , 5 , &nn));
4280
+
4281
+ iovec iovs[3 ];
4282
+ iovs[0 ].iov_base = (void *)" H" ;
4283
+ iovs[0 ].iov_len = 1 ;
4284
+ iovs[1 ].iov_base = (void *)" e" ;
4285
+ iovs[1 ].iov_len = 1 ;
4286
+ iovs[2 ].iov_base = (void *)" llo" ;
4287
+ iovs[2 ].iov_len = 3 ;
4288
+ HELPER_EXPECT_FAILED (f.writev (iovs, 3 , NULL ));
4289
+ }
4290
+ if (true ) {
4291
+ MockLibcIO _mockio (NULL , NULL , NULL , mock_fseek);
4292
+ SrsFileWriter f;
4293
+ HELPER_EXPECT_SUCCESS (f.open (" /dev/null" ));
4294
+
4295
+ HELPER_EXPECT_FAILED (f.lseek (0 , 0 , NULL ));
4296
+ }
4297
+ if (true ) {
4298
+ MockLibcIO _mockio (NULL , NULL , NULL , NULL , mock_fclose);
4299
+ SrsFileWriter f;
4300
+ HELPER_EXPECT_SUCCESS (f.open (" /dev/null" ));
4301
+ f.close ();
4302
+ }
4303
+
4304
+ if (true ) {
4305
+ MockLibcIO _mockio (NULL , NULL , NULL , NULL , NULL , NULL , mock_setvbuf);
4306
+ SrsFileWriter f;
4307
+ HELPER_EXPECT_SUCCESS (f.open (" /dev/null" ));
4308
+
4309
+ HELPER_EXPECT_FAILED (f.set_iobuf_size (100 ));
4310
+ }
4311
+
4312
+ if (true ) {
4313
+ MockLibcIO _mockio (NULL , NULL , NULL , NULL , NULL , mock_ftell);
4314
+ SrsFileWriter f;
4315
+ HELPER_EXPECT_SUCCESS (f.open (" /dev/null" ));
4316
+
4317
+ EXPECT_EQ (f.tellg (), -1 );
4318
+ }
4319
+
4143
4320
}
4144
4321
4145
4322
VOID TEST (KernelFileReaderTest, WriteSpecialCase)
0 commit comments