streams_test.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. package proxy
  2. import (
  3. "context"
  4. "errors"
  5. "testing"
  6. "google.golang.org/grpc/metadata"
  7. "github.com/golang/protobuf/ptypes"
  8. "github.com/golang/protobuf/ptypes/any"
  9. "github.com/stretchr/testify/assert"
  10. "github.com/stretchr/testify/require"
  11. streamsv1 "github.com/docker/api/protos/streams/v1"
  12. )
  13. type byteStream struct {
  14. recvResult *any.Any
  15. recvErr error
  16. sendResult interface{}
  17. }
  18. func (bs *byteStream) SetHeader(metadata.MD) error {
  19. return nil
  20. }
  21. func (bs *byteStream) SendHeader(metadata.MD) error {
  22. return nil
  23. }
  24. func (bs *byteStream) SetTrailer(metadata.MD) {
  25. }
  26. func (bs *byteStream) Context() context.Context {
  27. return nil
  28. }
  29. func (bs *byteStream) SendMsg(m interface{}) error {
  30. bs.sendResult = m
  31. return nil
  32. }
  33. func (bs *byteStream) Send(*any.Any) error {
  34. return nil
  35. }
  36. func (bs *byteStream) Recv() (*any.Any, error) {
  37. return bs.recvResult, bs.recvErr
  38. }
  39. func (bs *byteStream) RecvMsg(m interface{}) error {
  40. return nil
  41. }
  42. func getReader(t *testing.T, in []byte, errResult error) reader {
  43. message := streamsv1.BytesMessage{
  44. Type: streamsv1.IOStream_STDOUT,
  45. Value: in,
  46. }
  47. m, err := ptypes.MarshalAny(&message)
  48. require.Nil(t, err)
  49. return reader{
  50. stream: &Stream{
  51. Streaming_NewStreamServer: &byteStream{
  52. recvResult: m,
  53. recvErr: errResult,
  54. },
  55. },
  56. }
  57. }
  58. func getAny(t *testing.T, in []byte) *any.Any {
  59. value, err := ptypes.MarshalAny(&streamsv1.BytesMessage{
  60. Type: streamsv1.IOStream_STDOUT,
  61. Value: in,
  62. })
  63. require.Nil(t, err)
  64. return value
  65. }
  66. func TestStreamReader(t *testing.T) {
  67. in := []byte{104, 101, 108, 108, 111}
  68. r := getReader(t, in, nil)
  69. buffer := make([]byte, 5)
  70. n, err := r.Read(buffer)
  71. assert.Nil(t, err)
  72. assert.Equal(t, 5, n)
  73. assert.Equal(t, in, buffer)
  74. }
  75. func TestStreamReaderError(t *testing.T) {
  76. errResult := errors.New("err")
  77. r := getReader(t, nil, errResult)
  78. var buffer []byte
  79. n, err := r.Read(buffer)
  80. assert.Equal(t, 0, n)
  81. assert.Equal(t, err, errResult)
  82. }
  83. func TestStreamWriter(t *testing.T) {
  84. in := []byte{104, 101, 108, 108, 111}
  85. expected := getAny(t, in)
  86. bs := byteStream{}
  87. w := writer{stream: &bs}
  88. n, err := w.Write(in)
  89. assert.Nil(t, err)
  90. assert.Equal(t, len(in), n)
  91. assert.Equal(t, expected, bs.sendResult)
  92. }