1package terminal 2 3import ( 4 "bytes" 5 "errors" 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 "github.com/stretchr/testify/require" 10) 11 12type chStringReadWriter struct { 13 wrieDone chan struct{} 14 bytes.Buffer 15} 16 17func (c *chStringReadWriter) Write(p []byte) (int, error) { 18 defer func() { 19 c.wrieDone <- struct{}{} 20 }() 21 return c.Buffer.Write(p) 22} 23 24func TestServe(t *testing.T) { 25 encProxy := NewStreamProxy(1) 26 downstream := bytes.Buffer{} 27 upstream := chStringReadWriter{ 28 wrieDone: make(chan struct{}), 29 } 30 writeString := []byte("data from downstream") 31 32 downstream.Write([]byte(writeString)) 33 34 go func() { 35 err := encProxy.Serve(&upstream, &downstream) 36 if err != nil { 37 t.Fatalf("unexpected error from serve: %v", err) 38 } 39 }() 40 41 // Wait until the write is done 42 <-upstream.wrieDone 43 44 b := make([]byte, 20) 45 _, err := upstream.Read(b) 46 require.NoError(t, err) 47 48 assert.Equal(t, writeString, b) 49} 50 51func TestServeError(t *testing.T) { 52 encProxy := NewStreamProxy(1) 53 downstream := errorReadWriter{} 54 upstream := bytes.Buffer{} 55 56 err := encProxy.Serve(&upstream, &downstream) 57 assert.Error(t, err) 58} 59 60type errorReadWriter struct { 61} 62 63func (rw *errorReadWriter) Read(p []byte) (int, error) { 64 return 0, errors.New("failed to read") 65} 66 67func (rw *errorReadWriter) Write(p []byte) (int, error) { 68 return 0, errors.New("failed to read") 69} 70