copy_test.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package buf_test
  2. import (
  3. "crypto/rand"
  4. "io"
  5. "testing"
  6. "github.com/golang/mock/gomock"
  7. "github.com/xtls/xray-core/common/buf"
  8. "github.com/xtls/xray-core/common/errors"
  9. "github.com/xtls/xray-core/testing/mocks"
  10. )
  11. func TestReadError(t *testing.T) {
  12. mockCtl := gomock.NewController(t)
  13. defer mockCtl.Finish()
  14. mockReader := mocks.NewReader(mockCtl)
  15. mockReader.EXPECT().Read(gomock.Any()).Return(0, errors.New("error"))
  16. err := buf.Copy(buf.NewReader(mockReader), buf.Discard)
  17. if err == nil {
  18. t.Fatal("expected error, but nil")
  19. }
  20. if !buf.IsReadError(err) {
  21. t.Error("expected to be ReadError, but not")
  22. }
  23. if err.Error() != "error" {
  24. t.Fatal("unexpected error message: ", err.Error())
  25. }
  26. }
  27. func TestWriteError(t *testing.T) {
  28. mockCtl := gomock.NewController(t)
  29. defer mockCtl.Finish()
  30. mockWriter := mocks.NewWriter(mockCtl)
  31. mockWriter.EXPECT().Write(gomock.Any()).Return(0, errors.New("error"))
  32. err := buf.Copy(buf.NewReader(rand.Reader), buf.NewWriter(mockWriter))
  33. if err == nil {
  34. t.Fatal("expected error, but nil")
  35. }
  36. if !buf.IsWriteError(err) {
  37. t.Error("expected to be WriteError, but not")
  38. }
  39. if err.Error() != "error" {
  40. t.Fatal("unexpected error message: ", err.Error())
  41. }
  42. }
  43. type TestReader struct{}
  44. func (TestReader) Read(b []byte) (int, error) {
  45. return len(b), nil
  46. }
  47. func BenchmarkCopy(b *testing.B) {
  48. reader := buf.NewReader(io.LimitReader(TestReader{}, 10240))
  49. writer := buf.Discard
  50. b.ResetTimer()
  51. for i := 0; i < b.N; i++ {
  52. _ = buf.Copy(reader, writer)
  53. }
  54. }