diff options
Diffstat (limited to 'plugin/rpcplugin/http_test.go')
-rw-r--r-- | plugin/rpcplugin/http_test.go | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/plugin/rpcplugin/http_test.go b/plugin/rpcplugin/http_test.go new file mode 100644 index 000000000..afaaf7756 --- /dev/null +++ b/plugin/rpcplugin/http_test.go @@ -0,0 +1,61 @@ +package rpcplugin + +import ( + "io" + "io/ioutil" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" +) + +func testHTTPResponseWriterRPC(w http.ResponseWriter, f func(w http.ResponseWriter)) { + r1, w1 := io.Pipe() + r2, w2 := io.Pipe() + + c1 := NewMuxer(NewReadWriteCloser(r1, w2), false) + defer c1.Close() + + c2 := NewMuxer(NewReadWriteCloser(r2, w1), true) + defer c2.Close() + + id, server := c1.Serve() + go ServeHTTPResponseWriter(w, server) + + remote := ConnectHTTPResponseWriter(c2.Connect(id)) + defer remote.Close() + + f(remote) +} + +func TestHTTP(t *testing.T) { + w := httptest.NewRecorder() + + testHTTPResponseWriterRPC(w, func(w http.ResponseWriter) { + headers := w.Header() + headers.Set("Test-Header-A", "a") + headers.Set("Test-Header-B", "b") + w.Header().Set("Test-Header-C", "c") + w.WriteHeader(http.StatusPaymentRequired) + n, err := w.Write([]byte("this is ")) + assert.Equal(t, 8, n) + assert.NoError(t, err) + n, err = w.Write([]byte("a test")) + assert.Equal(t, 6, n) + assert.NoError(t, err) + }) + + r := w.Result() + defer r.Body.Close() + + assert.Equal(t, http.StatusPaymentRequired, r.StatusCode) + + body, err := ioutil.ReadAll(r.Body) + assert.NoError(t, err) + assert.EqualValues(t, "this is a test", body) + + assert.Equal(t, "a", r.Header.Get("Test-Header-A")) + assert.Equal(t, "b", r.Header.Get("Test-Header-B")) + assert.Equal(t, "c", r.Header.Get("Test-Header-C")) +} |