conn_test.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package tcp
  2. import (
  3. "bytes"
  4. "fmt"
  5. "net"
  6. "testing"
  7. "time"
  8. . "github.com/smartystreets/goconvey/convey"
  9. )
  10. type connMock struct {
  11. }
  12. func (c *connMock) Read(b []byte) (n int, err error) {
  13. buf := []byte("*3\r\n$3\r\nSET\r\n$5\r\nmykey\r\n$7\r\nmyvalue\r\n")
  14. copy(b, buf)
  15. return len(buf), nil
  16. }
  17. func (c *connMock) Write(b []byte) (n int, err error) {
  18. t := []byte{_protoStr}
  19. t = append(t, []byte(_ok)...)
  20. t = append(t, []byte("\r\n")...)
  21. if !bytes.Equal(b, t) {
  22. return 0, fmt.Errorf("%s not equal %s", b, t)
  23. }
  24. return len(b), nil
  25. }
  26. func (c *connMock) Close() error {
  27. return nil
  28. }
  29. func (c *connMock) LocalAddr() net.Addr {
  30. return nil
  31. }
  32. func (c *connMock) RemoteAddr() net.Addr {
  33. return nil
  34. }
  35. func (c *connMock) SetDeadline(t time.Time) error {
  36. return nil
  37. }
  38. func (c *connMock) SetReadDeadline(t time.Time) error {
  39. return nil
  40. }
  41. func (c *connMock) SetWriteDeadline(t time.Time) error {
  42. return nil
  43. }
  44. func TestConn(t *testing.T) {
  45. Convey("test conn:", t, func() {
  46. connMock := &connMock{}
  47. conn := newConn(connMock, time.Second, time.Second)
  48. // write
  49. p := proto{prefix: _protoStr, message: _ok}
  50. err := conn.Write(p)
  51. So(err, ShouldBeNil)
  52. err = conn.Flush()
  53. So(err, ShouldBeNil)
  54. // read
  55. cmd, args, err := conn.Read()
  56. So(err, ShouldBeNil)
  57. So(cmd, ShouldEqual, "set")
  58. So(string(args[0]), ShouldEqual, "mykey")
  59. So(string(args[1]), ShouldEqual, "myvalue")
  60. })
  61. }