github.com/qiniu/go-sdk/v7@v7.27.0/storagev2/internal/utils/http_test.go (about) 1 //go:build unit 2 // +build unit 3 4 package utils 5 6 import ( 7 "bytes" 8 "errors" 9 "io" 10 "net/http" 11 "testing" 12 13 innerio "github.com/qiniu/go-sdk/v7/internal/io" 14 ) 15 16 // 模拟 io.ReadSeekCloser 以模拟错误 17 type errorSeeker struct { 18 io.ReadSeeker 19 err error 20 } 21 22 func (e *errorSeeker) Close() error { 23 return nil 24 } 25 26 func (e *errorSeeker) Seek(offset int64, whence int) (int64, error) { 27 if e.err != nil { 28 return 0, e.err 29 } 30 return e.ReadSeeker.Seek(offset, whence) 31 } 32 33 func TestHttpHeadAddContentLength_Success(t *testing.T) { 34 data := bytes.NewReader([]byte("test")) 35 dataS := innerio.MakeReadSeekCloserFromLimitedReader(data, data.Size()) 36 37 header := http.Header{} 38 err := HttpHeadAddContentLength(header, dataS) 39 if err != nil { 40 t.Errorf("Expected no error, got %v", err) 41 } 42 43 expectedLength := "4" 44 actualLength := header.Get("Content-Length") 45 if actualLength != expectedLength { 46 t.Errorf("Expected Content-Length to be %s, got %s", expectedLength, actualLength) 47 } 48 } 49 50 func TestHttpHeadAddContentLength_SeekStartError(t *testing.T) { 51 header := http.Header{} 52 data := &errorSeeker{ 53 ReadSeeker: bytes.NewReader([]byte("test")), 54 err: errors.New("seek start error"), 55 } 56 57 err := HttpHeadAddContentLength(header, data) 58 if err == nil { 59 t.Errorf("Expected error, got nil") 60 } 61 } 62 63 func TestHttpHeadAddContentLength_SeekEndError(t *testing.T) { 64 header := http.Header{} 65 data := &errorSeeker{ 66 ReadSeeker: bytes.NewReader([]byte("test")), 67 err: errors.New("seek end error"), 68 } 69 70 err := HttpHeadAddContentLength(header, data) 71 if err == nil { 72 t.Errorf("Expected error, got nil") 73 } 74 }