copy_test.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package buf_test
  2. import (
  3. "io"
  4. "math/rand"
  5. "testing"
  6. "github.com/golang/mock/gomock"
  7. "v2ray.com/core/common/buf"
  8. "v2ray.com/core/common/errors"
  9. "v2ray.com/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.New(rand.NewSource(0))), 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. func BenchmarkCopy(b *testing.B) {
  44. reader := buf.NewReader(io.LimitReader(rand.New(rand.NewSource(0)), 1024*10))
  45. writer := buf.Discard
  46. b.ResetTimer()
  47. for i := 0; i < b.N; i++ {
  48. _ = buf.Copy(reader, writer)
  49. }
  50. }