summaryrefslogtreecommitdiff
path: root/plugins/http/handler_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/http/handler_test.go')
-rw-r--r--plugins/http/handler_test.go1962
1 files changed, 0 insertions, 1962 deletions
diff --git a/plugins/http/handler_test.go b/plugins/http/handler_test.go
deleted file mode 100644
index d15cf96f..00000000
--- a/plugins/http/handler_test.go
+++ /dev/null
@@ -1,1962 +0,0 @@
-package http
-
-//
-//import (
-// "bytes"
-// "context"
-// "github.com/spiral/roadrunner"
-// "github.com/stretchr/testify/assert"
-// "io/ioutil"
-// "mime/multipart"
-// "net/http"
-// "net/http/httptest"
-// "net/url"
-// "os"
-// "runtime"
-// "strings"
-// "testing"
-// "time"
-//)
-//
-//// get request and return body
-//func get(url string) (string, *http.Response, error) {
-// r, err := http.Get(url)
-// if err != nil {
-// return "", nil, err
-// }
-// b, err := ioutil.ReadAll(r.Body)
-// if err != nil {
-// return "", nil, err
-// }
-//
-// err = r.Body.Close()
-// if err != nil {
-// return "", nil, err
-// }
-// return string(b), r, err
-//}
-//
-//// get request and return body
-//func getHeader(url string, h map[string]string) (string, *http.Response, error) {
-// req, err := http.NewRequest("GET", url, bytes.NewBuffer(nil))
-// if err != nil {
-// return "", nil, err
-// }
-//
-// for k, v := range h {
-// req.Header.Set(k, v)
-// }
-//
-// r, err := http.DefaultClient.Do(req)
-// if err != nil {
-// return "", nil, err
-// }
-//
-// b, err := ioutil.ReadAll(r.Body)
-// if err != nil {
-// return "", nil, err
-// }
-//
-// err = r.Body.Close()
-// if err != nil {
-// return "", nil, err
-// }
-// return string(b), r, err
-//}
-//
-//func TestHandler_Echo(t *testing.T) {
-// h := &Handler{
-// cfg: &Config{
-// MaxRequestSize: 1024,
-// Uploads: &UploadsConfig{
-// Dir: os.TempDir(),
-// Forbid: []string{},
-// },
-// },
-// pool: roadrunner.NewServer(&roadrunner.ServerConfig{
-// Command: "php ../../tests/http/client.php echo pipes",
-// Relay: "pipes",
-// Pool: &roadrunner.Config{
-// NumWorkers: 1,
-// AllocateTimeout: 10000000,
-// DestroyTimeout: 10000000,
-// },
-// }),
-// }
-//
-// assert.NoError(t, h.pool.Start())
-// defer h.pool.Stop()
-//
-// hs := &http.Server{Addr: ":8177", Handler: h}
-// defer func() {
-// err := hs.Shutdown(context.Background())
-// if err != nil {
-// t.Errorf("error during the shutdown: error %v", err)
-// }
-// }()
-//
-// go func() {
-// err := hs.ListenAndServe()
-// if err != nil && err != http.ErrServerClosed {
-// t.Errorf("error listening the interface: error %v", err)
-// }
-// }()
-// time.Sleep(time.Millisecond * 10)
-//
-// body, r, err := get("http://localhost:8177/?hello=world")
-// assert.NoError(t, err)
-// assert.Equal(t, 201, r.StatusCode)
-// assert.Equal(t, "WORLD", body)
-//}
-//
-//func Test_HandlerErrors(t *testing.T) {
-// h := &Handler{
-// cfg: &Config{
-// MaxRequestSize: 1024,
-// Uploads: &UploadsConfig{
-// Dir: os.TempDir(),
-// Forbid: []string{},
-// },
-// },
-// pool: roadrunner.NewServer(&roadrunner.ServerConfig{
-// Command: "php ../../tests/http/client.php echo pipes",
-// Relay: "pipes",
-// Pool: &roadrunner.Config{
-// NumWorkers: 1,
-// AllocateTimeout: 10000000,
-// DestroyTimeout: 10000000,
-// },
-// }),
-// }
-//
-// wr := httptest.NewRecorder()
-// rq := httptest.NewRequest("POST", "/", bytes.NewBuffer([]byte("data")))
-//
-// h.ServeHTTP(wr, rq)
-// assert.Equal(t, 500, wr.Code)
-//}
-//
-//func Test_Handler_JSON_error(t *testing.T) {
-// h := &Handler{
-// cfg: &Config{
-// MaxRequestSize: 1024,
-// Uploads: &UploadsConfig{
-// Dir: os.TempDir(),
-// Forbid: []string{},
-// },
-// },
-// pool: roadrunner.NewServer(&roadrunner.ServerConfig{
-// Command: "php ../../tests/http/client.php echo pipes",
-// Relay: "pipes",
-// Pool: &roadrunner.Config{
-// NumWorkers: 1,
-// AllocateTimeout: 10000000,
-// DestroyTimeout: 10000000,
-// },
-// }),
-// }
-//
-// wr := httptest.NewRecorder()
-// rq := httptest.NewRequest("POST", "/", bytes.NewBuffer([]byte("{sd")))
-// rq.Header.Add("Content-Type", "application/json")
-// rq.Header.Add("Content-Size", "3")
-//
-// h.ServeHTTP(wr, rq)
-// assert.Equal(t, 500, wr.Code)
-//}
-//
-//func TestHandler_Headers(t *testing.T) {
-// h := &Handler{
-// cfg: &Config{
-// MaxRequestSize: 1024,
-// Uploads: &UploadsConfig{
-// Dir: os.TempDir(),
-// Forbid: []string{},
-// },
-// },
-// pool: roadrunner.NewServer(&roadrunner.ServerConfig{
-// Command: "php ../../tests/http/client.php header pipes",
-// Relay: "pipes",
-// Pool: &roadrunner.Config{
-// NumWorkers: 1,
-// AllocateTimeout: 10000000,
-// DestroyTimeout: 10000000,
-// },
-// }),
-// }
-//
-// assert.NoError(t, h.pool.Start())
-// defer h.pool.Stop()
-//
-// hs := &http.Server{Addr: ":8078", Handler: h}
-// defer func() {
-// err := hs.Shutdown(context.Background())
-// if err != nil {
-// t.Errorf("error during the shutdown: error %v", err)
-// }
-// }()
-//
-// go func() {
-// err := hs.ListenAndServe()
-// if err != nil && err != http.ErrServerClosed {
-// t.Errorf("error listening the interface: error %v", err)
-// }
-// }()
-// time.Sleep(time.Millisecond * 100)
-//
-// req, err := http.NewRequest("GET", "http://localhost:8078?hello=world", nil)
-// assert.NoError(t, err)
-//
-// req.Header.Add("input", "sample")
-//
-// r, err := http.DefaultClient.Do(req)
-// assert.NoError(t, err)
-// defer func() {
-// err := r.Body.Close()
-// if err != nil {
-// t.Errorf("error during the closing Body: error %v", err)
-//
-// }
-// }()
-//
-// b, err := ioutil.ReadAll(r.Body)
-// assert.NoError(t, err)
-//
-// assert.NoError(t, err)
-// assert.Equal(t, 200, r.StatusCode)
-// assert.Equal(t, "world", r.Header.Get("Header"))
-// assert.Equal(t, "SAMPLE", string(b))
-//}
-//
-//func TestHandler_Empty_User_Agent(t *testing.T) {
-// h := &Handler{
-// cfg: &Config{
-// MaxRequestSize: 1024,
-// Uploads: &UploadsConfig{
-// Dir: os.TempDir(),
-// Forbid: []string{},
-// },
-// },
-// pool: roadrunner.NewServer(&roadrunner.ServerConfig{
-// Command: "php ../../tests/http/client.php user-agent pipes",
-// Relay: "pipes",
-// Pool: &roadrunner.Config{
-// NumWorkers: 1,
-// AllocateTimeout: 10000000,
-// DestroyTimeout: 10000000,
-// },
-// }),
-// }
-//
-// assert.NoError(t, h.pool.Start())
-// defer h.pool.Stop()
-//
-// hs := &http.Server{Addr: ":8088", Handler: h}
-// defer func() {
-// err := hs.Shutdown(context.Background())
-// if err != nil {
-// t.Errorf("error during the shutdown: error %v", err)
-// }
-// }()
-//
-// go func() {
-// err := hs.ListenAndServe()
-// if err != nil && err != http.ErrServerClosed {
-// t.Errorf("error listening the interface: error %v", err)
-// }
-// }()
-// time.Sleep(time.Millisecond * 10)
-//
-// req, err := http.NewRequest("GET", "http://localhost:8088?hello=world", nil)
-// assert.NoError(t, err)
-//
-// req.Header.Add("user-agent", "")
-//
-// r, err := http.DefaultClient.Do(req)
-// assert.NoError(t, err)
-// defer func() {
-// err := r.Body.Close()
-// if err != nil {
-// t.Errorf("error during the closing Body: error %v", err)
-//
-// }
-// }()
-//
-// b, err := ioutil.ReadAll(r.Body)
-// assert.NoError(t, err)
-//
-// assert.NoError(t, err)
-// assert.Equal(t, 200, r.StatusCode)
-// assert.Equal(t, "", string(b))
-//}
-//
-//func TestHandler_User_Agent(t *testing.T) {
-// h := &Handler{
-// cfg: &Config{
-// MaxRequestSize: 1024,
-// Uploads: &UploadsConfig{
-// Dir: os.TempDir(),
-// Forbid: []string{},
-// },
-// },
-// pool: roadrunner.NewServer(&roadrunner.ServerConfig{
-// Command: "php ../../tests/http/client.php user-agent pipes",
-// Relay: "pipes",
-// Pool: &roadrunner.Config{
-// NumWorkers: 1,
-// AllocateTimeout: 10000000,
-// DestroyTimeout: 10000000,
-// },
-// }),
-// }
-//
-// assert.NoError(t, h.pool.Start())
-// defer h.pool.Stop()
-//
-// hs := &http.Server{Addr: ":8088", Handler: h}
-// defer func() {
-// err := hs.Shutdown(context.Background())
-// if err != nil {
-// t.Errorf("error during the shutdown: error %v", err)
-// }
-// }()
-//
-// go func() {
-// err := hs.ListenAndServe()
-// if err != nil && err != http.ErrServerClosed {
-// t.Errorf("error listening the interface: error %v", err)
-// }
-// }()
-// time.Sleep(time.Millisecond * 10)
-//
-// req, err := http.NewRequest("GET", "http://localhost:8088?hello=world", nil)
-// assert.NoError(t, err)
-//
-// req.Header.Add("User-Agent", "go-agent")
-//
-// r, err := http.DefaultClient.Do(req)
-// assert.NoError(t, err)
-// defer func() {
-// err := r.Body.Close()
-// if err != nil {
-// t.Errorf("error during the closing Body: error %v", err)
-//
-// }
-// }()
-//
-// b, err := ioutil.ReadAll(r.Body)
-// assert.NoError(t, err)
-//
-// assert.NoError(t, err)
-// assert.Equal(t, 200, r.StatusCode)
-// assert.Equal(t, "go-agent", string(b))
-//}
-//
-//func TestHandler_Cookies(t *testing.T) {
-// h := &Handler{
-// cfg: &Config{
-// MaxRequestSize: 1024,
-// Uploads: &UploadsConfig{
-// Dir: os.TempDir(),
-// Forbid: []string{},
-// },
-// },
-// pool: roadrunner.NewServer(&roadrunner.ServerConfig{
-// Command: "php ../../tests/http/client.php cookie pipes",
-// Relay: "pipes",
-// Pool: &roadrunner.Config{
-// NumWorkers: 1,
-// AllocateTimeout: 10000000,
-// DestroyTimeout: 10000000,
-// },
-// }),
-// }
-//
-// assert.NoError(t, h.pool.Start())
-// defer h.pool.Stop()
-//
-// hs := &http.Server{Addr: ":8079", Handler: h}
-// defer func() {
-// err := hs.Shutdown(context.Background())
-// if err != nil {
-// t.Errorf("error during the shutdown: error %v", err)
-// }
-// }()
-//
-// go func() {
-// err := hs.ListenAndServe()
-// if err != nil && err != http.ErrServerClosed {
-// t.Errorf("error listening the interface: error %v", err)
-// }
-// }()
-// time.Sleep(time.Millisecond * 10)
-//
-// req, err := http.NewRequest("GET", "http://localhost:8079", nil)
-// assert.NoError(t, err)
-//
-// req.AddCookie(&http.Cookie{Name: "input", Value: "input-value"})
-//
-// r, err := http.DefaultClient.Do(req)
-// assert.NoError(t, err)
-// defer func() {
-// err := r.Body.Close()
-// if err != nil {
-// t.Errorf("error during the closing Body: error %v", err)
-//
-// }
-// }()
-//
-// b, err := ioutil.ReadAll(r.Body)
-// assert.NoError(t, err)
-//
-// assert.NoError(t, err)
-// assert.Equal(t, 200, r.StatusCode)
-// assert.Equal(t, "INPUT-VALUE", string(b))
-//
-// for _, c := range r.Cookies() {
-// assert.Equal(t, "output", c.Name)
-// assert.Equal(t, "cookie-output", c.Value)
-// }
-//}
-//
-//func TestHandler_JsonPayload_POST(t *testing.T) {
-// h := &Handler{
-// cfg: &Config{
-// MaxRequestSize: 1024,
-// Uploads: &UploadsConfig{
-// Dir: os.TempDir(),
-// Forbid: []string{},
-// },
-// },
-// pool: roadrunner.NewServer(&roadrunner.ServerConfig{
-// Command: "php ../../tests/http/client.php payload pipes",
-// Relay: "pipes",
-// Pool: &roadrunner.Config{
-// NumWorkers: 1,
-// AllocateTimeout: 10000000,
-// DestroyTimeout: 10000000,
-// },
-// }),
-// }
-//
-// assert.NoError(t, h.pool.Start())
-// defer h.pool.Stop()
-//
-// hs := &http.Server{Addr: ":8090", Handler: h}
-// defer func() {
-// err := hs.Shutdown(context.Background())
-// if err != nil {
-// t.Errorf("error during the shutdown: error %v", err)
-// }
-// }()
-//
-// go func() {
-// err := hs.ListenAndServe()
-// if err != nil && err != http.ErrServerClosed {
-// t.Errorf("error listening the interface: error %v", err)
-// }
-// }()
-// time.Sleep(time.Millisecond * 10)
-//
-// req, err := http.NewRequest(
-// "POST",
-// "http://localhost"+hs.Addr,
-// bytes.NewBufferString(`{"key":"value"}`),
-// )
-// assert.NoError(t, err)
-//
-// req.Header.Add("Content-Type", "application/json")
-//
-// r, err := http.DefaultClient.Do(req)
-// assert.NoError(t, err)
-// defer func() {
-// err := r.Body.Close()
-// if err != nil {
-// t.Errorf("error during the closing Body: error %v", err)
-//
-// }
-// }()
-//
-// b, err := ioutil.ReadAll(r.Body)
-// assert.NoError(t, err)
-//
-// assert.NoError(t, err)
-// assert.Equal(t, 200, r.StatusCode)
-// assert.Equal(t, `{"value":"key"}`, string(b))
-//}
-//
-//func TestHandler_JsonPayload_PUT(t *testing.T) {
-// h := &Handler{
-// cfg: &Config{
-// MaxRequestSize: 1024,
-// Uploads: &UploadsConfig{
-// Dir: os.TempDir(),
-// Forbid: []string{},
-// },
-// },
-// pool: roadrunner.NewServer(&roadrunner.ServerConfig{
-// Command: "php ../../tests/http/client.php payload pipes",
-// Relay: "pipes",
-// Pool: &roadrunner.Config{
-// NumWorkers: 1,
-// AllocateTimeout: 10000000,
-// DestroyTimeout: 10000000,
-// },
-// }),
-// }
-//
-// assert.NoError(t, h.pool.Start())
-// defer h.pool.Stop()
-//
-// hs := &http.Server{Addr: ":8081", Handler: h}
-// defer func() {
-// err := hs.Shutdown(context.Background())
-// if err != nil {
-// t.Errorf("error during the shutdown: error %v", err)
-// }
-// }()
-//
-// go func() {
-// err := hs.ListenAndServe()
-// if err != nil && err != http.ErrServerClosed {
-// t.Errorf("error listening the interface: error %v", err)
-// }
-// }()
-// time.Sleep(time.Millisecond * 10)
-//
-// req, err := http.NewRequest("PUT", "http://localhost"+hs.Addr, bytes.NewBufferString(`{"key":"value"}`))
-// assert.NoError(t, err)
-//
-// req.Header.Add("Content-Type", "application/json")
-//
-// r, err := http.DefaultClient.Do(req)
-// assert.NoError(t, err)
-// defer func() {
-// err := r.Body.Close()
-// if err != nil {
-// t.Errorf("error during the closing Body: error %v", err)
-// }
-// }()
-//
-// b, err := ioutil.ReadAll(r.Body)
-// assert.NoError(t, err)
-//
-// assert.NoError(t, err)
-// assert.Equal(t, 200, r.StatusCode)
-// assert.Equal(t, `{"value":"key"}`, string(b))
-//}
-//
-//func TestHandler_JsonPayload_PATCH(t *testing.T) {
-// h := &Handler{
-// cfg: &Config{
-// MaxRequestSize: 1024,
-// Uploads: &UploadsConfig{
-// Dir: os.TempDir(),
-// Forbid: []string{},
-// },
-// },
-// pool: roadrunner.NewServer(&roadrunner.ServerConfig{
-// Command: "php ../../tests/http/client.php payload pipes",
-// Relay: "pipes",
-// Pool: &roadrunner.Config{
-// NumWorkers: 1,
-// AllocateTimeout: 10000000,
-// DestroyTimeout: 10000000,
-// },
-// }),
-// }
-//
-// assert.NoError(t, h.pool.Start())
-// defer h.pool.Stop()
-//
-// hs := &http.Server{Addr: ":8082", Handler: h}
-// defer func() {
-// err := hs.Shutdown(context.Background())
-// if err != nil {
-// t.Errorf("error during the shutdown: error %v", err)
-// }
-// }()
-//
-// go func() {
-// err := hs.ListenAndServe()
-// if err != nil && err != http.ErrServerClosed {
-// t.Errorf("error listening the interface: error %v", err)
-// }
-// }()
-// time.Sleep(time.Millisecond * 10)
-//
-// req, err := http.NewRequest("PATCH", "http://localhost"+hs.Addr, bytes.NewBufferString(`{"key":"value"}`))
-// assert.NoError(t, err)
-//
-// req.Header.Add("Content-Type", "application/json")
-//
-// r, err := http.DefaultClient.Do(req)
-// assert.NoError(t, err)
-// defer func() {
-// err := r.Body.Close()
-// if err != nil {
-// t.Errorf("error during the closing Body: error %v", err)
-//
-// }
-// }()
-//
-// b, err := ioutil.ReadAll(r.Body)
-// assert.NoError(t, err)
-//
-// assert.NoError(t, err)
-// assert.Equal(t, 200, r.StatusCode)
-// assert.Equal(t, `{"value":"key"}`, string(b))
-//}
-//
-//func TestHandler_FormData_POST(t *testing.T) {
-// h := &Handler{
-// cfg: &Config{
-// MaxRequestSize: 1024,
-// Uploads: &UploadsConfig{
-// Dir: os.TempDir(),
-// Forbid: []string{},
-// },
-// },
-// pool: roadrunner.NewServer(&roadrunner.ServerConfig{
-// Command: "php ../../tests/http/client.php data pipes",
-// Relay: "pipes",
-// Pool: &roadrunner.Config{
-// NumWorkers: 1,
-// AllocateTimeout: 10000000,
-// DestroyTimeout: 10000000,
-// },
-// }),
-// }
-//
-// assert.NoError(t, h.pool.Start())
-// defer h.pool.Stop()
-//
-// hs := &http.Server{Addr: ":8083", Handler: h}
-// defer func() {
-// err := hs.Shutdown(context.Background())
-// if err != nil {
-// t.Errorf("error during the shutdown: error %v", err)
-// }
-// }()
-//
-// go func() {
-// err := hs.ListenAndServe()
-// if err != nil && err != http.ErrServerClosed {
-// t.Errorf("error listening the interface: error %v", err)
-// }
-// }()
-// time.Sleep(time.Millisecond * 500)
-//
-// form := url.Values{}
-//
-// form.Add("key", "value")
-// form.Add("name[]", "name1")
-// form.Add("name[]", "name2")
-// form.Add("name[]", "name3")
-// form.Add("arr[x][y][z]", "y")
-// form.Add("arr[x][y][e]", "f")
-// form.Add("arr[c]p", "l")
-// form.Add("arr[c]z", "")
-//
-// req, err := http.NewRequest("POST", "http://localhost"+hs.Addr, strings.NewReader(form.Encode()))
-// assert.NoError(t, err)
-//
-// req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
-//
-// r, err := http.DefaultClient.Do(req)
-// assert.NoError(t, err)
-// defer func() {
-// err := r.Body.Close()
-// if err != nil {
-// t.Errorf("error during the closing Body: error %v", err)
-//
-// }
-// }()
-//
-// b, err := ioutil.ReadAll(r.Body)
-// assert.NoError(t, err)
-//
-// assert.NoError(t, err)
-// assert.Equal(t, 200, r.StatusCode)
-//
-// assert.Equal(t, `{"arr":{"c":{"p":"l","z":""},"x":{"y":{"e":"f","z":"y"}}},"key":"value","name":["name1","name2","name3"]}`, string(b))
-//}
-//
-//func TestHandler_FormData_POST_Overwrite(t *testing.T) {
-// h := &Handler{
-// cfg: &Config{
-// MaxRequestSize: 1024,
-// Uploads: &UploadsConfig{
-// Dir: os.TempDir(),
-// Forbid: []string{},
-// },
-// },
-// pool: roadrunner.NewServer(&roadrunner.ServerConfig{
-// Command: "php ../../tests/http/client.php data pipes",
-// Relay: "pipes",
-// Pool: &roadrunner.Config{
-// NumWorkers: 1,
-// AllocateTimeout: 10000000,
-// DestroyTimeout: 10000000,
-// },
-// }),
-// }
-//
-// assert.NoError(t, h.pool.Start())
-// defer h.pool.Stop()
-//
-// hs := &http.Server{Addr: ":8083", Handler: h}
-// defer func() {
-// err := hs.Shutdown(context.Background())
-// if err != nil {
-// t.Errorf("error during the shutdown: error %v", err)
-// }
-// }()
-//
-// go func() {
-// err := hs.ListenAndServe()
-// if err != nil && err != http.ErrServerClosed {
-// t.Errorf("error listening the interface: error %v", err)
-// }
-// }()
-// time.Sleep(time.Millisecond * 10)
-//
-// form := url.Values{}
-//
-// form.Add("key", "value1")
-// form.Add("key", "value2")
-//
-// req, err := http.NewRequest("POST", "http://localhost"+hs.Addr, strings.NewReader(form.Encode()))
-// assert.NoError(t, err)
-//
-// req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
-//
-// r, err := http.DefaultClient.Do(req)
-// assert.NoError(t, err)
-// defer func() {
-// err := r.Body.Close()
-// if err != nil {
-// t.Errorf("error during the closing Body: error %v", err)
-//
-// }
-// }()
-//
-// b, err := ioutil.ReadAll(r.Body)
-// assert.NoError(t, err)
-//
-// assert.NoError(t, err)
-// assert.Equal(t, 200, r.StatusCode)
-//
-// assert.Equal(t, `{"key":"value2","arr":{"x":{"y":null}}}`, string(b))
-//}
-//
-//func TestHandler_FormData_POST_Form_UrlEncoded_Charset(t *testing.T) {
-// h := &Handler{
-// cfg: &Config{
-// MaxRequestSize: 1024,
-// Uploads: &UploadsConfig{
-// Dir: os.TempDir(),
-// Forbid: []string{},
-// },
-// },
-// pool: roadrunner.NewServer(&roadrunner.ServerConfig{
-// Command: "php ../../tests/http/client.php data pipes",
-// Relay: "pipes",
-// Pool: &roadrunner.Config{
-// NumWorkers: 1,
-// AllocateTimeout: 10000000,
-// DestroyTimeout: 10000000,
-// },
-// }),
-// }
-//
-// assert.NoError(t, h.pool.Start())
-// defer h.pool.Stop()
-//
-// hs := &http.Server{Addr: ":8083", Handler: h}
-// defer func() {
-// err := hs.Shutdown(context.Background())
-// if err != nil {
-// t.Errorf("error during the shutdown: error %v", err)
-// }
-// }()
-//
-// go func() {
-// err := hs.ListenAndServe()
-// if err != nil && err != http.ErrServerClosed {
-// t.Errorf("error listening the interface: error %v", err)
-// }
-// }()
-// time.Sleep(time.Millisecond * 10)
-//
-// form := url.Values{}
-//
-// form.Add("key", "value")
-// form.Add("name[]", "name1")
-// form.Add("name[]", "name2")
-// form.Add("name[]", "name3")
-// form.Add("arr[x][y][z]", "y")
-// form.Add("arr[x][y][e]", "f")
-// form.Add("arr[c]p", "l")
-// form.Add("arr[c]z", "")
-//
-// req, err := http.NewRequest("POST", "http://localhost"+hs.Addr, strings.NewReader(form.Encode()))
-// assert.NoError(t, err)
-//
-// req.Header.Add("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
-//
-// r, err := http.DefaultClient.Do(req)
-// assert.NoError(t, err)
-// defer func() {
-// err := r.Body.Close()
-// if err != nil {
-// t.Errorf("error during the closing Body: error %v", err)
-//
-// }
-// }()
-//
-// b, err := ioutil.ReadAll(r.Body)
-// assert.NoError(t, err)
-//
-// assert.NoError(t, err)
-// assert.Equal(t, 200, r.StatusCode)
-//
-// assert.Equal(t, `{"arr":{"c":{"p":"l","z":""},"x":{"y":{"e":"f","z":"y"}}},"key":"value","name":["name1","name2","name3"]}`, string(b))
-//}
-//
-//func TestHandler_FormData_PUT(t *testing.T) {
-// h := &Handler{
-// cfg: &Config{
-// MaxRequestSize: 1024,
-// Uploads: &UploadsConfig{
-// Dir: os.TempDir(),
-// Forbid: []string{},
-// },
-// },
-// pool: roadrunner.NewServer(&roadrunner.ServerConfig{
-// Command: "php ../../tests/http/client.php data pipes",
-// Relay: "pipes",
-// Pool: &roadrunner.Config{
-// NumWorkers: 1,
-// AllocateTimeout: 10000000,
-// DestroyTimeout: 10000000,
-// },
-// }),
-// }
-//
-// assert.NoError(t, h.pool.Start())
-// defer h.pool.Stop()
-//
-// hs := &http.Server{Addr: ":8084", Handler: h}
-// defer func() {
-// err := hs.Shutdown(context.Background())
-// if err != nil {
-// t.Errorf("error during the shutdown: error %v", err)
-// }
-// }()
-//
-// go func() {
-// err := hs.ListenAndServe()
-// if err != nil && err != http.ErrServerClosed {
-// t.Errorf("error listening the interface: error %v", err)
-// }
-// }()
-// time.Sleep(time.Millisecond * 500)
-//
-// form := url.Values{}
-//
-// form.Add("key", "value")
-// form.Add("name[]", "name1")
-// form.Add("name[]", "name2")
-// form.Add("name[]", "name3")
-// form.Add("arr[x][y][z]", "y")
-// form.Add("arr[x][y][e]", "f")
-// form.Add("arr[c]p", "l")
-// form.Add("arr[c]z", "")
-//
-// req, err := http.NewRequest("PUT", "http://localhost"+hs.Addr, strings.NewReader(form.Encode()))
-// assert.NoError(t, err)
-//
-// req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
-//
-// r, err := http.DefaultClient.Do(req)
-// assert.NoError(t, err)
-// defer func() {
-// err := r.Body.Close()
-// if err != nil {
-// t.Errorf("error during the closing Body: error %v", err)
-//
-// }
-// }()
-//
-// b, err := ioutil.ReadAll(r.Body)
-// assert.NoError(t, err)
-//
-// assert.NoError(t, err)
-// assert.Equal(t, 200, r.StatusCode)
-//
-// assert.Equal(t, `{"arr":{"c":{"p":"l","z":""},"x":{"y":{"e":"f","z":"y"}}},"key":"value","name":["name1","name2","name3"]}`, string(b))
-//}
-//
-//func TestHandler_FormData_PATCH(t *testing.T) {
-// h := &Handler{
-// cfg: &Config{
-// MaxRequestSize: 1024,
-// Uploads: &UploadsConfig{
-// Dir: os.TempDir(),
-// Forbid: []string{},
-// },
-// },
-// pool: roadrunner.NewServer(&roadrunner.ServerConfig{
-// Command: "php ../../tests/http/client.php data pipes",
-// Relay: "pipes",
-// Pool: &roadrunner.Config{
-// NumWorkers: 1,
-// AllocateTimeout: 10000000,
-// DestroyTimeout: 10000000,
-// },
-// }),
-// }
-//
-// assert.NoError(t, h.pool.Start())
-// defer h.pool.Stop()
-//
-// hs := &http.Server{Addr: ":8085", Handler: h}
-// defer func() {
-// err := hs.Shutdown(context.Background())
-// if err != nil {
-// t.Errorf("error during the shutdown: error %v", err)
-// }
-// }()
-//
-// go func() {
-// err := hs.ListenAndServe()
-// if err != nil && err != http.ErrServerClosed {
-// t.Errorf("error listening the interface: error %v", err)
-// }
-// }()
-// time.Sleep(time.Millisecond * 10)
-//
-// form := url.Values{}
-//
-// form.Add("key", "value")
-// form.Add("name[]", "name1")
-// form.Add("name[]", "name2")
-// form.Add("name[]", "name3")
-// form.Add("arr[x][y][z]", "y")
-// form.Add("arr[x][y][e]", "f")
-// form.Add("arr[c]p", "l")
-// form.Add("arr[c]z", "")
-//
-// req, err := http.NewRequest("PATCH", "http://localhost"+hs.Addr, strings.NewReader(form.Encode()))
-// assert.NoError(t, err)
-//
-// req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
-//
-// r, err := http.DefaultClient.Do(req)
-// assert.NoError(t, err)
-// defer func() {
-// err := r.Body.Close()
-// if err != nil {
-// t.Errorf("error during the closing Body: error %v", err)
-//
-// }
-// }()
-//
-// b, err := ioutil.ReadAll(r.Body)
-// assert.NoError(t, err)
-//
-// assert.NoError(t, err)
-// assert.Equal(t, 200, r.StatusCode)
-//
-// assert.Equal(t, `{"arr":{"c":{"p":"l","z":""},"x":{"y":{"e":"f","z":"y"}}},"key":"value","name":["name1","name2","name3"]}`, string(b))
-//}
-//
-//func TestHandler_Multipart_POST(t *testing.T) {
-// h := &Handler{
-// cfg: &Config{
-// MaxRequestSize: 1024,
-// Uploads: &UploadsConfig{
-// Dir: os.TempDir(),
-// Forbid: []string{},
-// },
-// },
-// pool: roadrunner.NewServer(&roadrunner.ServerConfig{
-// Command: "php ../../tests/http/client.php data pipes",
-// Relay: "pipes",
-// Pool: &roadrunner.Config{
-// NumWorkers: 1,
-// AllocateTimeout: 10000000,
-// DestroyTimeout: 10000000,
-// },
-// }),
-// }
-//
-// assert.NoError(t, h.pool.Start())
-// defer h.pool.Stop()
-//
-// hs := &http.Server{Addr: ":8019", Handler: h}
-// defer func() {
-// err := hs.Shutdown(context.Background())
-// if err != nil {
-// t.Errorf("error during the shutdown: error %v", err)
-// }
-// }()
-//
-// go func() {
-// err := hs.ListenAndServe()
-// if err != nil && err != http.ErrServerClosed {
-// t.Errorf("error listening the interface: error %v", err)
-// }
-// }()
-// time.Sleep(time.Millisecond * 10)
-//
-// var mb bytes.Buffer
-// w := multipart.NewWriter(&mb)
-// err := w.WriteField("key", "value")
-// if err != nil {
-// t.Errorf("error writing the field: error %v", err)
-// }
-//
-// err = w.WriteField("key", "value")
-// if err != nil {
-// t.Errorf("error writing the field: error %v", err)
-// }
-//
-// err = w.WriteField("name[]", "name1")
-// if err != nil {
-// t.Errorf("error writing the field: error %v", err)
-// }
-//
-// err = w.WriteField("name[]", "name2")
-// if err != nil {
-// t.Errorf("error writing the field: error %v", err)
-// }
-//
-// err = w.WriteField("name[]", "name3")
-// if err != nil {
-// t.Errorf("error writing the field: error %v", err)
-// }
-//
-// err = w.WriteField("arr[x][y][z]", "y")
-// if err != nil {
-// t.Errorf("error writing the field: error %v", err)
-// }
-//
-// err = w.WriteField("arr[x][y][e]", "f")
-//
-// if err != nil {
-// t.Errorf("error writing the field: error %v", err)
-// }
-//
-// err = w.WriteField("arr[c]p", "l")
-// if err != nil {
-// t.Errorf("error writing the field: error %v", err)
-// }
-//
-// err = w.WriteField("arr[c]z", "")
-// if err != nil {
-// t.Errorf("error writing the field: error %v", err)
-// }
-//
-// err = w.Close()
-// if err != nil {
-// t.Errorf("error closing the writer: error %v", err)
-// }
-//
-// req, err := http.NewRequest("POST", "http://localhost"+hs.Addr, &mb)
-// assert.NoError(t, err)
-//
-// req.Header.Set("Content-Type", w.FormDataContentType())
-//
-// r, err := http.DefaultClient.Do(req)
-// assert.NoError(t, err)
-// defer func() {
-// err := r.Body.Close()
-// if err != nil {
-// t.Errorf("error during the closing Body: error %v", err)
-//
-// }
-// }()
-//
-// b, err := ioutil.ReadAll(r.Body)
-// assert.NoError(t, err)
-//
-// assert.NoError(t, err)
-// assert.Equal(t, 200, r.StatusCode)
-//
-// assert.Equal(t, `{"arr":{"c":{"p":"l","z":""},"x":{"y":{"e":"f","z":"y"}}},"key":"value","name":["name1","name2","name3"]}`, string(b))
-//}
-//
-//func TestHandler_Multipart_PUT(t *testing.T) {
-// h := &Handler{
-// cfg: &Config{
-// MaxRequestSize: 1024,
-// Uploads: &UploadsConfig{
-// Dir: os.TempDir(),
-// Forbid: []string{},
-// },
-// },
-// pool: roadrunner.NewServer(&roadrunner.ServerConfig{
-// Command: "php ../../tests/http/client.php data pipes",
-// Relay: "pipes",
-// Pool: &roadrunner.Config{
-// NumWorkers: 1,
-// AllocateTimeout: 10000000,
-// DestroyTimeout: 10000000,
-// },
-// }),
-// }
-//
-// assert.NoError(t, h.pool.Start())
-// defer h.pool.Stop()
-//
-// hs := &http.Server{Addr: ":8020", Handler: h}
-// defer func() {
-// err := hs.Shutdown(context.Background())
-// if err != nil {
-// t.Errorf("error during the shutdown: error %v", err)
-// }
-// }()
-//
-// go func() {
-// err := hs.ListenAndServe()
-// if err != nil && err != http.ErrServerClosed {
-// t.Errorf("error listening the interface: error %v", err)
-// }
-// }()
-// time.Sleep(time.Millisecond * 500)
-//
-// var mb bytes.Buffer
-// w := multipart.NewWriter(&mb)
-// err := w.WriteField("key", "value")
-// if err != nil {
-// t.Errorf("error writing the field: error %v", err)
-// }
-//
-// err = w.WriteField("key", "value")
-// if err != nil {
-// t.Errorf("error writing the field: error %v", err)
-// }
-//
-// err = w.WriteField("name[]", "name1")
-//
-// if err != nil {
-// t.Errorf("error writing the field: error %v", err)
-// }
-//
-// err = w.WriteField("name[]", "name2")
-// if err != nil {
-// t.Errorf("error writing the field: error %v", err)
-// }
-//
-// err = w.WriteField("name[]", "name3")
-// if err != nil {
-// t.Errorf("error writing the field: error %v", err)
-// }
-//
-// err = w.WriteField("arr[x][y][z]", "y")
-// if err != nil {
-// t.Errorf("error writing the field: error %v", err)
-// }
-//
-// err = w.WriteField("arr[x][y][e]", "f")
-// if err != nil {
-// t.Errorf("error writing the field: error %v", err)
-// }
-//
-// err = w.WriteField("arr[c]p", "l")
-// if err != nil {
-// t.Errorf("error writing the field: error %v", err)
-// }
-//
-// err = w.WriteField("arr[c]z", "")
-// if err != nil {
-// t.Errorf("error writing the field: error %v", err)
-// }
-//
-// err = w.Close()
-// if err != nil {
-// t.Errorf("error closing the writer: error %v", err)
-// }
-//
-// req, err := http.NewRequest("PUT", "http://localhost"+hs.Addr, &mb)
-// assert.NoError(t, err)
-//
-// req.Header.Set("Content-Type", w.FormDataContentType())
-//
-// r, err := http.DefaultClient.Do(req)
-// assert.NoError(t, err)
-// defer func() {
-// err := r.Body.Close()
-// if err != nil {
-// t.Errorf("error during the closing Body: error %v", err)
-//
-// }
-// }()
-//
-// b, err := ioutil.ReadAll(r.Body)
-// assert.NoError(t, err)
-//
-// assert.NoError(t, err)
-// assert.Equal(t, 200, r.StatusCode)
-//
-// assert.Equal(t, `{"arr":{"c":{"p":"l","z":""},"x":{"y":{"e":"f","z":"y"}}},"key":"value","name":["name1","name2","name3"]}`, string(b))
-//}
-//
-//func TestHandler_Multipart_PATCH(t *testing.T) {
-// h := &Handler{
-// cfg: &Config{
-// MaxRequestSize: 1024,
-// Uploads: &UploadsConfig{
-// Dir: os.TempDir(),
-// Forbid: []string{},
-// },
-// },
-// pool: roadrunner.NewServer(&roadrunner.ServerConfig{
-// Command: "php ../../tests/http/client.php data pipes",
-// Relay: "pipes",
-// Pool: &roadrunner.Config{
-// NumWorkers: 1,
-// AllocateTimeout: 10000000,
-// DestroyTimeout: 10000000,
-// },
-// }),
-// }
-//
-// assert.NoError(t, h.pool.Start())
-// defer h.pool.Stop()
-//
-// hs := &http.Server{Addr: ":8021", Handler: h}
-// defer func() {
-// err := hs.Shutdown(context.Background())
-// if err != nil {
-// t.Errorf("error during the shutdown: error %v", err)
-// }
-// }()
-//
-// go func() {
-// err := hs.ListenAndServe()
-//
-// if err != nil && err != http.ErrServerClosed {
-// t.Errorf("error listening the interface: error %v", err)
-// }
-// }()
-// time.Sleep(time.Millisecond * 500)
-//
-// var mb bytes.Buffer
-// w := multipart.NewWriter(&mb)
-// err := w.WriteField("key", "value")
-// if err != nil {
-// t.Errorf("error writing the field: error %v", err)
-// }
-//
-// err = w.WriteField("key", "value")
-// if err != nil {
-// t.Errorf("error writing the field: error %v", err)
-// }
-//
-// err = w.WriteField("name[]", "name1")
-// if err != nil {
-// t.Errorf("error writing the field: error %v", err)
-// }
-//
-// err = w.WriteField("name[]", "name2")
-//
-// if err != nil {
-// t.Errorf("error writing the field: error %v", err)
-// }
-//
-// err = w.WriteField("name[]", "name3")
-//
-// if err != nil {
-// t.Errorf("error writing the field: error %v", err)
-// }
-//
-// err = w.WriteField("arr[x][y][z]", "y")
-// if err != nil {
-// t.Errorf("error writing the field: error %v", err)
-// }
-//
-// err = w.WriteField("arr[x][y][e]", "f")
-// if err != nil {
-// t.Errorf("error writing the field: error %v", err)
-// }
-//
-// err = w.WriteField("arr[c]p", "l")
-// if err != nil {
-// t.Errorf("error writing the field: error %v", err)
-// }
-//
-// err = w.WriteField("arr[c]z", "")
-// if err != nil {
-// t.Errorf("error writing the field: error %v", err)
-// }
-//
-// err = w.Close()
-// if err != nil {
-// t.Errorf("error closing the writer: error %v", err)
-// }
-//
-// req, err := http.NewRequest("PATCH", "http://localhost"+hs.Addr, &mb)
-// assert.NoError(t, err)
-//
-// req.Header.Set("Content-Type", w.FormDataContentType())
-//
-// r, err := http.DefaultClient.Do(req)
-// assert.NoError(t, err)
-// defer func() {
-// err := r.Body.Close()
-// if err != nil {
-// t.Errorf("error during the closing Body: error %v", err)
-//
-// }
-// }()
-//
-// b, err := ioutil.ReadAll(r.Body)
-// assert.NoError(t, err)
-//
-// assert.NoError(t, err)
-// assert.Equal(t, 200, r.StatusCode)
-//
-// assert.Equal(t, `{"arr":{"c":{"p":"l","z":""},"x":{"y":{"e":"f","z":"y"}}},"key":"value","name":["name1","name2","name3"]}`, string(b))
-//}
-//
-//func TestHandler_Error(t *testing.T) {
-// h := &Handler{
-// cfg: &Config{
-// MaxRequestSize: 1024,
-// Uploads: &UploadsConfig{
-// Dir: os.TempDir(),
-// Forbid: []string{},
-// },
-// },
-// pool: roadrunner.NewServer(&roadrunner.ServerConfig{
-// Command: "php ../../tests/http/client.php error pipes",
-// Relay: "pipes",
-// Pool: &roadrunner.Config{
-// NumWorkers: 1,
-// AllocateTimeout: 10000000,
-// DestroyTimeout: 10000000,
-// },
-// }),
-// }
-//
-// assert.NoError(t, h.pool.Start())
-// defer h.pool.Stop()
-//
-// hs := &http.Server{Addr: ":8177", Handler: h}
-// defer func() {
-// err := hs.Shutdown(context.Background())
-// if err != nil {
-// t.Errorf("error during the shutdown: error %v", err)
-// }
-// }()
-//
-// go func() {
-// err := hs.ListenAndServe()
-// if err != nil && err != http.ErrServerClosed {
-// t.Errorf("error listening the interface: error %v", err)
-// }
-// }()
-// time.Sleep(time.Millisecond * 10)
-//
-// _, r, err := get("http://localhost:8177/?hello=world")
-// assert.NoError(t, err)
-// assert.Equal(t, 500, r.StatusCode)
-//}
-//
-//func TestHandler_Error2(t *testing.T) {
-// h := &Handler{
-// cfg: &Config{
-// MaxRequestSize: 1024,
-// Uploads: &UploadsConfig{
-// Dir: os.TempDir(),
-// Forbid: []string{},
-// },
-// },
-// pool: roadrunner.NewServer(&roadrunner.ServerConfig{
-// Command: "php ../../tests/http/client.php error2 pipes",
-// Relay: "pipes",
-// Pool: &roadrunner.Config{
-// NumWorkers: 1,
-// AllocateTimeout: 10000000,
-// DestroyTimeout: 10000000,
-// },
-// }),
-// }
-//
-// assert.NoError(t, h.pool.Start())
-// defer h.pool.Stop()
-//
-// hs := &http.Server{Addr: ":8177", Handler: h}
-// defer func() {
-// err := hs.Shutdown(context.Background())
-// if err != nil {
-// t.Errorf("error during the shutdown: error %v", err)
-// }
-// }()
-//
-// go func() {
-// err := hs.ListenAndServe()
-// if err != nil && err != http.ErrServerClosed {
-// t.Errorf("error listening the interface: error %v", err)
-// }
-// }()
-// time.Sleep(time.Millisecond * 10)
-//
-// _, r, err := get("http://localhost:8177/?hello=world")
-// assert.NoError(t, err)
-// assert.Equal(t, 500, r.StatusCode)
-//}
-//
-//func TestHandler_Error3(t *testing.T) {
-// h := &Handler{
-// cfg: &Config{
-// MaxRequestSize: 1,
-// Uploads: &UploadsConfig{
-// Dir: os.TempDir(),
-// Forbid: []string{},
-// },
-// },
-// pool: roadrunner.NewServer(&roadrunner.ServerConfig{
-// Command: "php ../../tests/http/client.php pid pipes",
-// Relay: "pipes",
-// Pool: &roadrunner.Config{
-// NumWorkers: 1,
-// AllocateTimeout: 10000000,
-// DestroyTimeout: 10000000,
-// },
-// }),
-// }
-//
-// assert.NoError(t, h.pool.Start())
-// defer h.pool.Stop()
-//
-// hs := &http.Server{Addr: ":8177", Handler: h}
-// defer func() {
-// err := hs.Shutdown(context.Background())
-// if err != nil {
-// t.Errorf("error during the shutdown: error %v", err)
-// }
-// }()
-//
-// go func() {
-// err := hs.ListenAndServe()
-// if err != nil && err != http.ErrServerClosed {
-// t.Errorf("error listening the interface: error %v", err)
-// }
-// }()
-// time.Sleep(time.Millisecond * 10)
-//
-// b2 := &bytes.Buffer{}
-// for i := 0; i < 1024*1024; i++ {
-// b2.Write([]byte(" "))
-// }
-//
-// req, err := http.NewRequest("POST", "http://localhost"+hs.Addr, b2)
-// assert.NoError(t, err)
-//
-// r, err := http.DefaultClient.Do(req)
-// assert.NoError(t, err)
-// defer func() {
-// err := r.Body.Close()
-// if err != nil {
-// t.Errorf("error during the closing Body: error %v", err)
-//
-// }
-// }()
-//
-// assert.NoError(t, err)
-// assert.Equal(t, 500, r.StatusCode)
-//}
-//
-//func TestHandler_ResponseDuration(t *testing.T) {
-// h := &Handler{
-// cfg: &Config{
-// MaxRequestSize: 1024,
-// Uploads: &UploadsConfig{
-// Dir: os.TempDir(),
-// Forbid: []string{},
-// },
-// },
-// pool: roadrunner.NewServer(&roadrunner.ServerConfig{
-// Command: "php ../../tests/http/client.php echo pipes",
-// Relay: "pipes",
-// Pool: &roadrunner.Config{
-// NumWorkers: 1,
-// AllocateTimeout: 10000000,
-// DestroyTimeout: 10000000,
-// },
-// }),
-// }
-//
-// assert.NoError(t, h.pool.Start())
-// defer h.pool.Stop()
-//
-// hs := &http.Server{Addr: ":8177", Handler: h}
-// defer func() {
-// err := hs.Shutdown(context.Background())
-// if err != nil {
-// t.Errorf("error during the shutdown: error %v", err)
-// }
-// }()
-//
-// go func() {
-// err := hs.ListenAndServe()
-// if err != nil && err != http.ErrServerClosed {
-// t.Errorf("error listening the interface: error %v", err)
-// }
-// }()
-// time.Sleep(time.Millisecond * 10)
-//
-// gotresp := make(chan interface{})
-// h.Listen(func(event int, ctx interface{}) {
-// if event == EventResponse {
-// c := ctx.(*ResponseEvent)
-//
-// if c.Elapsed() > 0 {
-// close(gotresp)
-// }
-// }
-// })
-//
-// body, r, err := get("http://localhost:8177/?hello=world")
-// assert.NoError(t, err)
-//
-// <-gotresp
-//
-// assert.Equal(t, 201, r.StatusCode)
-// assert.Equal(t, "WORLD", body)
-//}
-//
-//func TestHandler_ResponseDurationDelayed(t *testing.T) {
-// h := &Handler{
-// cfg: &Config{
-// MaxRequestSize: 1024,
-// Uploads: &UploadsConfig{
-// Dir: os.TempDir(),
-// Forbid: []string{},
-// },
-// },
-// pool: roadrunner.NewServer(&roadrunner.ServerConfig{
-// Command: "php ../../tests/http/client.php echoDelay pipes",
-// Relay: "pipes",
-// Pool: &roadrunner.Config{
-// NumWorkers: 1,
-// AllocateTimeout: 10000000,
-// DestroyTimeout: 10000000,
-// },
-// }),
-// }
-//
-// assert.NoError(t, h.pool.Start())
-// defer h.pool.Stop()
-//
-// hs := &http.Server{Addr: ":8177", Handler: h}
-// defer func() {
-// err := hs.Shutdown(context.Background())
-// if err != nil {
-// t.Errorf("error during the shutdown: error %v", err)
-// }
-// }()
-//
-// go func() {
-// err := hs.ListenAndServe()
-// if err != nil && err != http.ErrServerClosed {
-// t.Errorf("error listening the interface: error %v", err)
-// }
-// }()
-// time.Sleep(time.Millisecond * 10)
-//
-// gotresp := make(chan interface{})
-// h.Listen(func(event int, ctx interface{}) {
-// if event == EventResponse {
-// c := ctx.(*ResponseEvent)
-//
-// if c.Elapsed() > time.Second {
-// close(gotresp)
-// }
-// }
-// })
-//
-// body, r, err := get("http://localhost:8177/?hello=world")
-// assert.NoError(t, err)
-//
-// <-gotresp
-//
-// assert.Equal(t, 201, r.StatusCode)
-// assert.Equal(t, "WORLD", body)
-//}
-//
-//func TestHandler_ErrorDuration(t *testing.T) {
-// h := &Handler{
-// cfg: &Config{
-// MaxRequestSize: 1024,
-// Uploads: &UploadsConfig{
-// Dir: os.TempDir(),
-// Forbid: []string{},
-// },
-// },
-// pool: roadrunner.NewServer(&roadrunner.ServerConfig{
-// Command: "php ../../tests/http/client.php error pipes",
-// Relay: "pipes",
-// Pool: &roadrunner.Config{
-// NumWorkers: 1,
-// AllocateTimeout: 10000000,
-// DestroyTimeout: 10000000,
-// },
-// }),
-// }
-//
-// assert.NoError(t, h.pool.Start())
-// defer h.pool.Stop()
-//
-// hs := &http.Server{Addr: ":8177", Handler: h}
-// defer func() {
-// err := hs.Shutdown(context.Background())
-// if err != nil {
-// t.Errorf("error during the shutdown: error %v", err)
-// }
-// }()
-//
-// go func() {
-// err := hs.ListenAndServe()
-// if err != nil && err != http.ErrServerClosed {
-// t.Errorf("error listening the interface: error %v", err)
-// }
-// }()
-// time.Sleep(time.Millisecond * 10)
-//
-// goterr := make(chan interface{})
-// h.Listen(func(event int, ctx interface{}) {
-// if event == EventError {
-// c := ctx.(*ErrorEvent)
-//
-// if c.Elapsed() > 0 {
-// close(goterr)
-// }
-// }
-// })
-//
-// _, r, err := get("http://localhost:8177/?hello=world")
-// assert.NoError(t, err)
-//
-// <-goterr
-//
-// assert.Equal(t, 500, r.StatusCode)
-//}
-//
-//func TestHandler_IP(t *testing.T) {
-// h := &Handler{
-// cfg: &Config{
-// MaxRequestSize: 1024,
-// Uploads: &UploadsConfig{
-// Dir: os.TempDir(),
-// Forbid: []string{},
-// },
-// TrustedSubnets: []string{
-// "10.0.0.0/8",
-// "127.0.0.0/8",
-// "172.16.0.0/12",
-// "192.168.0.0/16",
-// "::1/128",
-// "fc00::/7",
-// "fe80::/10",
-// },
-// },
-// pool: roadrunner.NewServer(&roadrunner.ServerConfig{
-// Command: "php ../../tests/http/client.php ip pipes",
-// Relay: "pipes",
-// Pool: &roadrunner.Config{
-// NumWorkers: 1,
-// AllocateTimeout: 10000000,
-// DestroyTimeout: 10000000,
-// },
-// }),
-// }
-//
-// err := h.cfg.parseCIDRs()
-// if err != nil {
-// t.Errorf("error parsing CIDRs: error %v", err)
-// }
-//
-// assert.NoError(t, h.pool.Start())
-// defer h.pool.Stop()
-//
-// hs := &http.Server{Addr: "127.0.0.1:8177", Handler: h}
-// defer func() {
-// err := hs.Shutdown(context.Background())
-// if err != nil {
-// t.Errorf("error during the shutdown: error %v", err)
-// }
-// }()
-//
-// go func() {
-// err := hs.ListenAndServe()
-// if err != nil && err != http.ErrServerClosed {
-// t.Errorf("error listening the interface: error %v", err)
-// }
-// }()
-// time.Sleep(time.Millisecond * 10)
-//
-// body, r, err := get("http://127.0.0.1:8177/")
-// assert.NoError(t, err)
-// assert.Equal(t, 200, r.StatusCode)
-// assert.Equal(t, "127.0.0.1", body)
-//}
-//
-//func TestHandler_XRealIP(t *testing.T) {
-// h := &Handler{
-// cfg: &Config{
-// MaxRequestSize: 1024,
-// Uploads: &UploadsConfig{
-// Dir: os.TempDir(),
-// Forbid: []string{},
-// },
-// TrustedSubnets: []string{
-// "10.0.0.0/8",
-// "127.0.0.0/8",
-// "172.16.0.0/12",
-// "192.168.0.0/16",
-// "::1/128",
-// "fc00::/7",
-// "fe80::/10",
-// },
-// },
-// pool: roadrunner.NewServer(&roadrunner.ServerConfig{
-// Command: "php ../../tests/http/client.php ip pipes",
-// Relay: "pipes",
-// Pool: &roadrunner.Config{
-// NumWorkers: 1,
-// AllocateTimeout: 10000000,
-// DestroyTimeout: 10000000,
-// },
-// }),
-// }
-//
-// err := h.cfg.parseCIDRs()
-// if err != nil {
-// t.Errorf("error parsing CIDRs: error %v", err)
-// }
-//
-// assert.NoError(t, h.pool.Start())
-// defer h.pool.Stop()
-//
-// hs := &http.Server{Addr: "127.0.0.1:8177", Handler: h}
-// defer func() {
-// err := hs.Shutdown(context.Background())
-// if err != nil {
-// t.Errorf("error during the shutdown: error %v", err)
-// }
-// }()
-//
-// go func() {
-// err := hs.ListenAndServe()
-// if err != nil && err != http.ErrServerClosed {
-// t.Errorf("error listening the interface: error %v", err)
-// }
-// }()
-// time.Sleep(time.Millisecond * 10)
-//
-// body, r, err := getHeader("http://127.0.0.1:8177/", map[string]string{
-// "X-Real-Ip": "200.0.0.1",
-// })
-//
-// assert.NoError(t, err)
-// assert.Equal(t, 200, r.StatusCode)
-// assert.Equal(t, "200.0.0.1", body)
-//}
-//
-//func TestHandler_XForwardedFor(t *testing.T) {
-// h := &Handler{
-// cfg: &Config{
-// MaxRequestSize: 1024,
-// Uploads: &UploadsConfig{
-// Dir: os.TempDir(),
-// Forbid: []string{},
-// },
-// TrustedSubnets: []string{
-// "10.0.0.0/8",
-// "127.0.0.0/8",
-// "172.16.0.0/12",
-// "192.168.0.0/16",
-// "100.0.0.0/16",
-// "200.0.0.0/16",
-// "::1/128",
-// "fc00::/7",
-// "fe80::/10",
-// },
-// },
-// pool: roadrunner.NewServer(&roadrunner.ServerConfig{
-// Command: "php ../../tests/http/client.php ip pipes",
-// Relay: "pipes",
-// Pool: &roadrunner.Config{
-// NumWorkers: 1,
-// AllocateTimeout: 10000000,
-// DestroyTimeout: 10000000,
-// },
-// }),
-// }
-//
-// err := h.cfg.parseCIDRs()
-// if err != nil {
-// t.Errorf("error parsing CIDRs: error %v", err)
-// }
-// assert.NoError(t, h.pool.Start())
-// defer h.pool.Stop()
-//
-// hs := &http.Server{Addr: "127.0.0.1:8177", Handler: h}
-// defer func() {
-// err := hs.Shutdown(context.Background())
-// if err != nil {
-// t.Errorf("error during the shutdown: error %v", err)
-// }
-// }()
-//
-// go func() {
-// err := hs.ListenAndServe()
-// if err != nil && err != http.ErrServerClosed {
-// t.Errorf("error listening the interface: error %v", err)
-// }
-// }()
-// time.Sleep(time.Millisecond * 10)
-//
-// body, r, err := getHeader("http://127.0.0.1:8177/", map[string]string{
-// "X-Forwarded-For": "100.0.0.1, 200.0.0.1, invalid, 101.0.0.1",
-// })
-//
-// assert.NoError(t, err)
-// assert.Equal(t, 200, r.StatusCode)
-// assert.Equal(t, "101.0.0.1", body)
-//
-// body, r, err = getHeader("http://127.0.0.1:8177/", map[string]string{
-// "X-Forwarded-For": "100.0.0.1, 200.0.0.1, 101.0.0.1, invalid",
-// })
-//
-// assert.NoError(t, err)
-// assert.Equal(t, 200, r.StatusCode)
-// assert.Equal(t, "101.0.0.1", body)
-//}
-//
-//func TestHandler_XForwardedFor_NotTrustedRemoteIp(t *testing.T) {
-// h := &Handler{
-// cfg: &Config{
-// MaxRequestSize: 1024,
-// Uploads: &UploadsConfig{
-// Dir: os.TempDir(),
-// Forbid: []string{},
-// },
-// TrustedSubnets: []string{
-// "10.0.0.0/8",
-// },
-// },
-// pool: roadrunner.NewServer(&roadrunner.ServerConfig{
-// Command: "php ../../tests/http/client.php ip pipes",
-// Relay: "pipes",
-// Pool: &roadrunner.Config{
-// NumWorkers: 1,
-// AllocateTimeout: 10000000,
-// DestroyTimeout: 10000000,
-// },
-// }),
-// }
-//
-// err := h.cfg.parseCIDRs()
-// if err != nil {
-// t.Errorf("error parsing CIDRs: error %v", err)
-// }
-// assert.NoError(t, h.pool.Start())
-// defer h.pool.Stop()
-//
-// hs := &http.Server{Addr: "127.0.0.1:8177", Handler: h}
-// defer func() {
-// err := hs.Shutdown(context.Background())
-// if err != nil {
-// t.Errorf("error during the shutdown: error %v", err)
-// }
-// }()
-//
-// go func() {
-// err := hs.ListenAndServe()
-// if err != nil && err != http.ErrServerClosed {
-// t.Errorf("error listening the interface: error %v", err)
-// }
-// }()
-// time.Sleep(time.Millisecond * 10)
-//
-// body, r, err := getHeader("http://127.0.0.1:8177/", map[string]string{
-// "X-Forwarded-For": "100.0.0.1, 200.0.0.1, invalid, 101.0.0.1",
-// })
-//
-// assert.NoError(t, err)
-// assert.Equal(t, 200, r.StatusCode)
-// assert.Equal(t, "127.0.0.1", body)
-//}
-//
-//func BenchmarkHandler_Listen_Echo(b *testing.B) {
-// h := &Handler{
-// cfg: &Config{
-// MaxRequestSize: 1024,
-// Uploads: &UploadsConfig{
-// Dir: os.TempDir(),
-// Forbid: []string{},
-// },
-// },
-// pool: roadrunner.NewServer(&roadrunner.ServerConfig{
-// Command: "php ../../tests/http/client.php echo pipes",
-// Relay: "pipes",
-// Pool: &roadrunner.Config{
-// NumWorkers: int64(runtime.NumCPU()),
-// AllocateTimeout: 10000000,
-// DestroyTimeout: 10000000,
-// },
-// }),
-// }
-//
-// err := h.pool.Start()
-// if err != nil {
-// b.Errorf("error starting the worker pool: error %v", err)
-// }
-// defer h.pool.Stop()
-//
-// hs := &http.Server{Addr: ":8177", Handler: h}
-// defer func() {
-// err := hs.Shutdown(context.Background())
-// if err != nil {
-// b.Errorf("error during the shutdown: error %v", err)
-// }
-// }()
-//
-// go func() {
-// err := hs.ListenAndServe()
-// if err != nil && err != http.ErrServerClosed {
-// b.Errorf("error listening the interface: error %v", err)
-// }
-// }()
-// time.Sleep(time.Millisecond * 10)
-//
-// bb := "WORLD"
-// for n := 0; n < b.N; n++ {
-// r, err := http.Get("http://localhost:8177/?hello=world")
-// if err != nil {
-// b.Fail()
-// }
-// // Response might be nil here
-// if r != nil {
-// br, err := ioutil.ReadAll(r.Body)
-// if err != nil {
-// b.Errorf("error reading Body: error %v", err)
-// }
-// if string(br) != bb {
-// b.Fail()
-// }
-// err = r.Body.Close()
-// if err != nil {
-// b.Errorf("error closing the Body: error %v", err)
-// }
-// } else {
-// b.Errorf("got nil response")
-// }
-// }
-//}