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  }