github.com/qiniu/go-sdk/v7@v7.27.0/internal/io/io_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 TestReadAll(t *testing.T) { 16 runTestCase := func(t *testing.T, r io.Reader, expected []byte) { 17 if b, err := internal_io.ReadAll(r); err != nil { 18 t.Fatal(err) 19 } else if !bytes.Equal(expected, b) { 20 t.Fatalf("unexpected read content: b=%#v, expected=%#v", b, expected) 21 } else if n, err := r.Read(make([]byte, 1)); err != nil && err != io.EOF { 22 t.Fatal(err) 23 } else if n != 0 { 24 t.Fatal("unexpected read size") 25 } 26 } 27 buf := new(bytes.Buffer) 28 for i := 0; i < 16; i++ { 29 if _, err := buf.Write([]byte{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF}); err != nil { 30 t.Fatal(err) 31 } 32 } 33 expected := buf.Bytes() 34 runTestCase(t, buf, expected) 35 36 file, err := os.CreateTemp("", "") 37 if err != nil { 38 t.Fatal(err) 39 } 40 defer os.Remove(file.Name()) 41 defer file.Close() 42 43 if _, err = io.Copy(file, bytes.NewReader(expected)); err != nil { 44 t.Fatal(err) 45 } else if _, err = file.Seek(0, io.SeekStart); err != nil { 46 t.Fatal(err) 47 } 48 runTestCase(t, file, expected) 49 50 bytesNopCloser := internal_io.NewBytesNopCloser(expected) 51 runTestCase(t, bytesNopCloser, expected) 52 } 53 54 func TestSinkAll(t *testing.T) { 55 runTestCase := func(t *testing.T, r io.Reader) { 56 if err := internal_io.SinkAll(r); err != nil { 57 t.Fatal(err) 58 } else if n, err := r.Read(make([]byte, 1)); err != nil && err != io.EOF { 59 t.Fatal(err) 60 } else if n != 0 { 61 t.Fatal("unexpected read size") 62 } 63 } 64 65 buf := new(bytes.Buffer) 66 for i := 0; i < 16; i++ { 67 if _, err := buf.Write([]byte{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF}); err != nil { 68 t.Fatal(err) 69 } 70 } 71 expected := buf.Bytes() 72 runTestCase(t, buf) 73 74 file, err := os.CreateTemp("", "") 75 if err != nil { 76 t.Fatal(err) 77 } 78 defer os.Remove(file.Name()) 79 defer file.Close() 80 81 if _, err = io.Copy(file, bytes.NewReader(expected)); err != nil { 82 t.Fatal(err) 83 } else if _, err = file.Seek(0, io.SeekStart); err != nil { 84 t.Fatal(err) 85 } 86 runTestCase(t, file) 87 88 bytesNopCloser := internal_io.NewBytesNopCloser(expected) 89 runTestCase(t, bytesNopCloser) 90 }