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  }