github.com/gigforks/mattermost-server@v4.9.1-0.20180619094218-800d97fa55d0+incompatible/plugin/rpcplugin/http_test.go (about) 1 package rpcplugin 2 3 import ( 4 "io" 5 "io/ioutil" 6 "net/http" 7 "net/http/httptest" 8 "testing" 9 10 "github.com/stretchr/testify/assert" 11 ) 12 13 func testHTTPResponseWriterRPC(w http.ResponseWriter, f func(w http.ResponseWriter)) { 14 r1, w1 := io.Pipe() 15 r2, w2 := io.Pipe() 16 17 c1 := NewMuxer(NewReadWriteCloser(r1, w2), false) 18 defer c1.Close() 19 20 c2 := NewMuxer(NewReadWriteCloser(r2, w1), true) 21 defer c2.Close() 22 23 id, server := c1.Serve() 24 go ServeHTTPResponseWriter(w, server) 25 26 remote := ConnectHTTPResponseWriter(c2.Connect(id)) 27 defer remote.Close() 28 29 f(remote) 30 } 31 32 func TestHTTP(t *testing.T) { 33 w := httptest.NewRecorder() 34 35 testHTTPResponseWriterRPC(w, func(w http.ResponseWriter) { 36 headers := w.Header() 37 headers.Set("Test-Header-A", "a") 38 headers.Set("Test-Header-B", "b") 39 w.Header().Set("Test-Header-C", "c") 40 w.WriteHeader(http.StatusPaymentRequired) 41 n, err := w.Write([]byte("this is ")) 42 assert.Equal(t, 8, n) 43 assert.NoError(t, err) 44 n, err = w.Write([]byte("a test")) 45 assert.Equal(t, 6, n) 46 assert.NoError(t, err) 47 }) 48 49 r := w.Result() 50 defer r.Body.Close() 51 52 assert.Equal(t, http.StatusPaymentRequired, r.StatusCode) 53 54 body, err := ioutil.ReadAll(r.Body) 55 assert.NoError(t, err) 56 assert.EqualValues(t, "this is a test", body) 57 58 assert.Equal(t, "a", r.Header.Get("Test-Header-A")) 59 assert.Equal(t, "b", r.Header.Get("Test-Header-B")) 60 assert.Equal(t, "c", r.Header.Get("Test-Header-C")) 61 }