github.com/qiniu/go-sdk/v7@v7.27.0/internal/io/compatible_test.go (about) 1 //go:build unit 2 // +build unit 3 4 package io_test 5 6 import ( 7 "bytes" 8 "io" 9 "os" 10 "testing" 11 12 internal_io "github.com/qiniu/go-sdk/v7/internal/io" 13 ) 14 15 func TestMakeReadSeekCloserFromReader(t *testing.T) { 16 file, err := os.CreateTemp("", "") 17 if err != nil { 18 t.Fatal(err) 19 } 20 defer os.Remove(file.Name()) 21 defer file.Close() 22 23 for i := 0; i < 16; i++ { 24 if _, err = file.Write([]byte{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF}); err != nil { 25 t.Fatal(err) 26 } 27 } 28 if _, err = file.Seek(0, io.SeekStart); err != nil { 29 t.Fatal(err) 30 } 31 32 buf := make([]byte, 16) 33 34 reader := internal_io.MakeReadSeekCloserFromReader(file) 35 if n, err := reader.Read(buf); err != nil { 36 t.Fatal(err) 37 } else if !bytes.Equal(buf[:n], []byte{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF}) { 38 t.Fatal("unexpected read content") 39 } 40 if _, err = reader.Seek(8, io.SeekStart); err != nil { 41 t.Fatal(err) 42 } 43 if n, err := reader.Read(buf); err != nil { 44 t.Fatal(err) 45 } else if !bytes.Equal(buf[:n], []byte{0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF, 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7}) { 46 t.Fatal("unexpected read content") 47 } 48 if _, err = reader.Seek(-8, io.SeekEnd); err != nil { 49 t.Fatal(err) 50 } 51 if n, err := reader.Read(buf); err != nil { 52 t.Fatal(err) 53 } else if !bytes.Equal(buf[:n], []byte{0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF}) { 54 t.Fatal("unexpected read content") 55 } 56 if err = reader.Close(); err != nil { 57 t.Fatal(err) 58 } 59 } 60 61 func MakeReadSeekCloserFromLimitedReader(t *testing.T) { 62 file, err := os.CreateTemp("", "") 63 if err != nil { 64 t.Fatal(err) 65 } 66 defer os.Remove(file.Name()) 67 defer file.Close() 68 69 for i := 0; i < 16; i++ { 70 if _, err = file.Write([]byte{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF}); err != nil { 71 t.Fatal(err) 72 } 73 } 74 75 buf := make([]byte, 16) 76 77 reader := internal_io.MakeReadSeekCloserFromLimitedReader(file, 16) 78 if n, err := reader.Read(buf); err != nil { 79 t.Fatal(err) 80 } else if !bytes.Equal(buf[:n], []byte{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF}) { 81 t.Fatal("unexpected read content") 82 } 83 84 if _, err = reader.Seek(8, io.SeekStart); err != nil { 85 t.Fatal(err) 86 } 87 if n, err := reader.Read(buf); err != nil { 88 t.Fatal(err) 89 } else if !bytes.Equal(buf[:n], []byte{0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF}) { 90 t.Fatal("unexpected read content") 91 } 92 93 if err = reader.Close(); err != nil { 94 t.Fatal(err) 95 } 96 }