@@ -23,6 +23,7 @@ import (
2323 "os"
2424 "reflect"
2525 "sync"
26+ "syscall"
2627 "testing"
2728
2829 "github.com/agiledragon/gomonkey/v2"
@@ -262,3 +263,158 @@ func Test_hdfsFileHandle_Write(t *testing.T) {
262263 })
263264 }
264265}
266+
267+ func Test_hdfsFileSystem_OpenRead (t * testing.T ) {
268+ type fields struct {
269+ client * hdfs.Client
270+ subpath string
271+ blockSize int64
272+ replication int
273+ Mutex sync.Mutex
274+ }
275+ type args struct {
276+ name string
277+ flags uint32
278+ size uint64
279+ }
280+ tests := []struct {
281+ name string
282+ fields fields
283+ args args
284+ want FileHandle
285+ wantErr assert.ErrorAssertionFunc
286+ }{
287+ {
288+ name : "want read open err" ,
289+ fields : fields {
290+ client : & hdfs.Client {},
291+ subpath : "./" ,
292+ },
293+ args : args {
294+ name : "test" ,
295+ flags : uint32 (1 ),
296+ },
297+ want : nil ,
298+ wantErr : func (t assert.TestingT , err error , i ... interface {}) bool {
299+ return true
300+ },
301+ },
302+ {
303+ name : "want read open nil" ,
304+ fields : fields {
305+ client : & hdfs.Client {},
306+ subpath : "./" ,
307+ },
308+ args : args {
309+ name : "test" ,
310+ flags : uint32 (1 ),
311+ },
312+ want : nil ,
313+ wantErr : func (t assert.TestingT , err error , i ... interface {}) bool {
314+ return false
315+ },
316+ },
317+ }
318+
319+ var p1 = gomonkey .ApplyMethod (reflect .TypeOf (& hdfs.Client {}), "Open" , func (_ * hdfs.Client , name string ) (* hdfs.FileReader , error ) {
320+ return nil , fmt .Errorf ("open fail" )
321+ })
322+ defer p1 .Reset ()
323+
324+ var p4 = gomonkey .ApplyMethod (reflect .TypeOf (& hdfsFileSystem {}), "GetOpenFlags" , func (_ * hdfsFileSystem , name string , flags uint32 ) int {
325+ return syscall .O_RDONLY
326+ })
327+ defer p4 .Reset ()
328+
329+ for _ , tt := range tests {
330+ if tt .name == "want read open nil" {
331+ var p2 = gomonkey .ApplyMethod (reflect .TypeOf (& hdfs.Client {}), "Open" , func (_ * hdfs.Client , name string ) (* hdfs.FileReader , error ) {
332+ return nil , nil
333+ })
334+ defer p2 .Reset ()
335+ }
336+ t .Run (tt .name , func (t * testing.T ) {
337+ fs := & hdfsFileSystem {
338+ client : tt .fields .client ,
339+ subpath : tt .fields .subpath ,
340+ blockSize : tt .fields .blockSize ,
341+ replication : tt .fields .replication ,
342+ Mutex : tt .fields .Mutex ,
343+ }
344+ got , err := fs .Open (tt .args .name , tt .args .flags , tt .args .size )
345+ if ! tt .wantErr (t , err , fmt .Sprintf ("Open(%v, %v, %v)" , tt .args .name , tt .args .flags , tt .args .size )) {
346+ return
347+ }
348+ assert .Equalf (t , tt .want , got , "Open(%v, %v, %v)" , tt .args .name , tt .args .flags , tt .args .size )
349+ })
350+ }
351+ }
352+
353+ func Test_hdfsFileSystem_Open (t * testing.T ) {
354+ type fields struct {
355+ client * hdfs.Client
356+ subpath string
357+ blockSize int64
358+ replication int
359+ Mutex sync.Mutex
360+ }
361+ type args struct {
362+ name string
363+ flags uint32
364+ size uint64
365+ }
366+ tests := []struct {
367+ name string
368+ fields fields
369+ args args
370+ want FileHandle
371+ wantErr assert.ErrorAssertionFunc
372+ }{
373+ {
374+ name : "want retry err" ,
375+ fields : fields {
376+ client : & hdfs.Client {},
377+ subpath : "./" ,
378+ },
379+ args : args {
380+ name : "test" ,
381+ flags : uint32 (1 ),
382+ },
383+ want : nil ,
384+ wantErr : func (t assert.TestingT , err error , i ... interface {}) bool {
385+ return true
386+ },
387+ },
388+ }
389+
390+ var p1 = gomonkey .ApplyMethod (reflect .TypeOf (& hdfs.Client {}), "Open" , func (_ * hdfs.Client , name string ) (* hdfs.FileReader , error ) {
391+ return nil , nil
392+ })
393+ defer p1 .Reset ()
394+ var p2 = gomonkey .ApplyMethod (reflect .TypeOf (& hdfs.Client {}), "Append" , func (_ * hdfs.Client , name string ) (* hdfs.FileWriter , error ) {
395+ return nil , fmt .Errorf ("org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException" )
396+ })
397+ defer p2 .Reset ()
398+
399+ var p4 = gomonkey .ApplyMethod (reflect .TypeOf (& hdfsFileSystem {}), "GetOpenFlags" , func (_ * hdfsFileSystem , name string , flags uint32 ) int {
400+ return syscall .O_WRONLY | syscall .O_APPEND
401+ })
402+ defer p4 .Reset ()
403+
404+ for _ , tt := range tests {
405+ t .Run (tt .name , func (t * testing.T ) {
406+ fs := & hdfsFileSystem {
407+ client : tt .fields .client ,
408+ subpath : tt .fields .subpath ,
409+ blockSize : tt .fields .blockSize ,
410+ replication : tt .fields .replication ,
411+ Mutex : tt .fields .Mutex ,
412+ }
413+ got , err := fs .Open (tt .args .name , tt .args .flags , tt .args .size )
414+ if ! tt .wantErr (t , err , fmt .Sprintf ("Open(%v, %v, %v)" , tt .args .name , tt .args .flags , tt .args .size )) {
415+ return
416+ }
417+ assert .Equalf (t , tt .want , got , "Open(%v, %v, %v)" , tt .args .name , tt .args .flags , tt .args .size )
418+ })
419+ }
420+ }
0 commit comments