summaryrefslogtreecommitdiff
path: root/plugins/http/tests/plugin_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/http/tests/plugin_test.go')
-rw-r--r--plugins/http/tests/plugin_test.go759
1 files changed, 759 insertions, 0 deletions
diff --git a/plugins/http/tests/plugin_test.go b/plugins/http/tests/plugin_test.go
new file mode 100644
index 00000000..852e5545
--- /dev/null
+++ b/plugins/http/tests/plugin_test.go
@@ -0,0 +1,759 @@
+package tests
+
+//import (
+// "github.com/cenkalti/backoff/v4"
+// json "github.com/json-iterator/go"
+// "github.com/sirupsen/logrus"
+// "github.com/sirupsen/logrus/hooks/test"
+// "github.com/spiral/roadrunner"
+// "github.com/spiral/roadrunner/service"
+// "github.com/spiral/roadrunner/service/env"
+// "github.com/spiral/roadrunner/service/rpc"
+// "github.com/stretchr/testify/assert"
+// "io/ioutil"
+// "net/http"
+// "os"
+// "testing"
+// "time"
+//)
+//
+//type testCfg struct {
+// httpCfg string
+// rpcCfg string
+// envCfg string
+// target string
+//}
+//
+//func (cfg *testCfg) Get(name string) service.Config {
+// if name == ID {
+// if cfg.httpCfg == "" {
+// return nil
+// }
+//
+// return &testCfg{target: cfg.httpCfg}
+// }
+//
+// if name == rpc.ID {
+// return &testCfg{target: cfg.rpcCfg}
+// }
+//
+// if name == env.ID {
+// return &testCfg{target: cfg.envCfg}
+// }
+//
+// return nil
+//}
+//func (cfg *testCfg) Unmarshal(out interface{}) error {
+// j := json.ConfigCompatibleWithStandardLibrary
+// return j.Unmarshal([]byte(cfg.target), out)
+//}
+//
+//func Test_Service_NoConfig(t *testing.T) {
+// logger, _ := test.NewNullLogger()
+// logger.SetLevel(logrus.DebugLevel)
+//
+// c := service.NewContainer(logger)
+// c.Register(ID, &Service{})
+//
+// err := c.Init(&testCfg{httpCfg: `{"Enable":true}`})
+// assert.Error(t, err)
+//
+// s, st := c.Get(ID)
+// assert.NotNil(t, s)
+// assert.Equal(t, service.StatusInactive, st)
+//}
+//
+//func Test_Service_Configure_Disable(t *testing.T) {
+// logger, _ := test.NewNullLogger()
+// logger.SetLevel(logrus.DebugLevel)
+//
+// c := service.NewContainer(logger)
+// c.Register(ID, &Service{})
+//
+// assert.NoError(t, c.Init(&testCfg{}))
+//
+// s, st := c.Get(ID)
+// assert.NotNil(t, s)
+// assert.Equal(t, service.StatusInactive, st)
+//}
+//
+//func Test_Service_Configure_Enable(t *testing.T) {
+// bkoff := backoff.NewExponentialBackOff()
+// bkoff.MaxElapsedTime = time.Second * 15
+//
+// err := backoff.Retry(func() error {
+// logger, _ := test.NewNullLogger()
+// logger.SetLevel(logrus.DebugLevel)
+//
+// c := service.NewContainer(logger)
+// c.Register(ID, &Service{})
+//
+// err := c.Init(&testCfg{httpCfg: `{
+// "enable": true,
+// "address": ":8070",
+// "maxRequestSize": 1024,
+// "uploads": {
+// "dir": ` + tmpDir() + `,
+// "forbid": []
+// },
+// "workers":{
+// "command": "php ../../tests/http/client.php echo pipes",
+// "relay": "pipes",
+// "pool": {
+// "numWorkers": 1,
+// "allocateTimeout": 10000000,
+// "destroyTimeout": 10000000
+// }
+// }
+// }`})
+// if err != nil {
+// return err
+// }
+//
+// s, st := c.Get(ID)
+// assert.NotNil(t, s)
+// assert.Equal(t, service.StatusOK, st)
+//
+// return nil
+// }, bkoff)
+//
+// if err != nil {
+// t.Fatal(err)
+// }
+//
+//}
+//
+//func Test_Service_Echo(t *testing.T) {
+// bkoff := backoff.NewExponentialBackOff()
+// bkoff.MaxElapsedTime = time.Second * 15
+//
+// err := backoff.Retry(func() error {
+// logger, _ := test.NewNullLogger()
+// logger.SetLevel(logrus.DebugLevel)
+//
+// c := service.NewContainer(logger)
+// c.Register(ID, &Service{})
+//
+// err := c.Init(&testCfg{httpCfg: `{
+// "enable": true,
+// "address": ":6536",
+// "maxRequestSize": 1024,
+// "uploads": {
+// "dir": ` + tmpDir() + `,
+// "forbid": []
+// },
+// "workers":{
+// "command": "php ../../tests/http/client.php echo pipes",
+// "relay": "pipes",
+// "pool": {
+// "numWorkers": 1,
+// "allocateTimeout": 10000000,
+// "destroyTimeout": 10000000
+// }
+// }
+// }`})
+// if err != nil {
+// return err
+// }
+//
+// s, st := c.Get(ID)
+// assert.NotNil(t, s)
+// assert.Equal(t, service.StatusOK, st)
+//
+// // should do nothing
+// s.(*Service).Stop()
+//
+// go func() {
+// err := c.Serve()
+// if err != nil {
+// t.Errorf("serve error: %v", err)
+// }
+// }()
+//
+// time.Sleep(time.Millisecond * 100)
+//
+// req, err := http.NewRequest("GET", "http://localhost:6536?hello=world", nil)
+// if err != nil {
+// c.Stop()
+// return err
+// }
+//
+// r, err := http.DefaultClient.Do(req)
+// if err != nil {
+// c.Stop()
+// return err
+// }
+// b, err := ioutil.ReadAll(r.Body)
+// if err != nil {
+// c.Stop()
+// return err
+// }
+// assert.Equal(t, 201, r.StatusCode)
+// assert.Equal(t, "WORLD", string(b))
+//
+// err = r.Body.Close()
+// if err != nil {
+// c.Stop()
+// return err
+// }
+//
+// c.Stop()
+// return nil
+// }, bkoff)
+//
+// if err != nil {
+// t.Fatal(err)
+// }
+//}
+//
+//func Test_Service_Env(t *testing.T) {
+// bkoff := backoff.NewExponentialBackOff()
+// bkoff.MaxElapsedTime = time.Second * 15
+//
+// err := backoff.Retry(func() error {
+// logger, _ := test.NewNullLogger()
+// logger.SetLevel(logrus.DebugLevel)
+//
+// c := service.NewContainer(logger)
+// c.Register(env.ID, env.NewService(map[string]string{"pool": "test"}))
+// c.Register(ID, &Service{})
+//
+// err := c.Init(&testCfg{httpCfg: `{
+// "enable": true,
+// "address": ":10031",
+// "maxRequestSize": 1024,
+// "uploads": {
+// "dir": ` + tmpDir() + `,
+// "forbid": []
+// },
+// "workers":{
+// "command": "php ../../tests/http/client.php env pipes",
+// "relay": "pipes",
+// "pool": {
+// "numWorkers": 1,
+// "allocateTimeout": 10000000,
+// "destroyTimeout": 10000000
+// }
+// }
+// }`, envCfg: `{"env_key":"ENV_VALUE"}`})
+// if err != nil {
+// return err
+// }
+//
+// s, st := c.Get(ID)
+// assert.NotNil(t, s)
+// assert.Equal(t, service.StatusOK, st)
+//
+// // should do nothing
+// s.(*Service).Stop()
+//
+// go func() {
+// err := c.Serve()
+// if err != nil {
+// t.Errorf("serve error: %v", err)
+// }
+// }()
+//
+// time.Sleep(time.Millisecond * 500)
+//
+// req, err := http.NewRequest("GET", "http://localhost:10031", nil)
+// if err != nil {
+// c.Stop()
+// return err
+// }
+//
+// r, err := http.DefaultClient.Do(req)
+// if err != nil {
+// c.Stop()
+// return err
+// }
+//
+// b, err := ioutil.ReadAll(r.Body)
+// if err != nil {
+// c.Stop()
+// return err
+// }
+//
+// assert.Equal(t, 200, r.StatusCode)
+// assert.Equal(t, "ENV_VALUE", string(b))
+//
+// err = r.Body.Close()
+// if err != nil {
+// c.Stop()
+// return err
+// }
+//
+// c.Stop()
+// return nil
+// }, bkoff)
+//
+// if err != nil {
+// t.Fatal(err)
+// }
+//
+//}
+//
+//func Test_Service_ErrorEcho(t *testing.T) {
+// bkoff := backoff.NewExponentialBackOff()
+// bkoff.MaxElapsedTime = time.Second * 15
+//
+// err := backoff.Retry(func() error {
+// logger, _ := test.NewNullLogger()
+// logger.SetLevel(logrus.DebugLevel)
+//
+// c := service.NewContainer(logger)
+// c.Register(ID, &Service{})
+//
+// err := c.Init(&testCfg{httpCfg: `{
+// "enable": true,
+// "address": ":6030",
+// "maxRequestSize": 1024,
+// "uploads": {
+// "dir": ` + tmpDir() + `,
+// "forbid": []
+// },
+// "workers":{
+// "command": "php ../../tests/http/client.php echoerr pipes",
+// "relay": "pipes",
+// "pool": {
+// "numWorkers": 1,
+// "allocateTimeout": 10000000,
+// "destroyTimeout": 10000000
+// }
+// }
+// }`})
+// if err != nil {
+// return err
+// }
+//
+// s, st := c.Get(ID)
+// assert.NotNil(t, s)
+// assert.Equal(t, service.StatusOK, st)
+//
+// goterr := make(chan interface{})
+// s.(*Service).AddListener(func(event int, ctx interface{}) {
+// if event == roadrunner.EventStderrOutput {
+// if string(ctx.([]byte)) == "WORLD\n" {
+// goterr <- nil
+// }
+// }
+// })
+//
+// go func() {
+// err := c.Serve()
+// if err != nil {
+// t.Errorf("serve error: %v", err)
+// }
+// }()
+//
+// time.Sleep(time.Millisecond * 500)
+//
+// req, err := http.NewRequest("GET", "http://localhost:6030?hello=world", nil)
+// if err != nil {
+// c.Stop()
+// return err
+// }
+//
+// r, err := http.DefaultClient.Do(req)
+// if err != nil {
+// c.Stop()
+// return err
+// }
+//
+// b, err := ioutil.ReadAll(r.Body)
+// if err != nil {
+// c.Stop()
+// return err
+// }
+//
+// <-goterr
+//
+// assert.Equal(t, 201, r.StatusCode)
+// assert.Equal(t, "WORLD", string(b))
+// err = r.Body.Close()
+// if err != nil {
+// c.Stop()
+// return err
+// }
+//
+// c.Stop()
+//
+// return nil
+// }, bkoff)
+//
+// if err != nil {
+// t.Fatal(err)
+// }
+//}
+//
+//func Test_Service_Middleware(t *testing.T) {
+// bkoff := backoff.NewExponentialBackOff()
+// bkoff.MaxElapsedTime = time.Second * 15
+//
+// err := backoff.Retry(func() error {
+// logger, _ := test.NewNullLogger()
+// logger.SetLevel(logrus.DebugLevel)
+//
+// c := service.NewContainer(logger)
+// c.Register(ID, &Service{})
+//
+// err := c.Init(&testCfg{httpCfg: `{
+// "enable": true,
+// "address": ":6032",
+// "maxRequestSize": 1024,
+// "uploads": {
+// "dir": ` + tmpDir() + `,
+// "forbid": []
+// },
+// "workers":{
+// "command": "php ../../tests/http/client.php echo pipes",
+// "relay": "pipes",
+// "pool": {
+// "numWorkers": 1,
+// "allocateTimeout": 10000000,
+// "destroyTimeout": 10000000
+// }
+// }
+// }`})
+// if err != nil {
+// return err
+// }
+//
+// s, st := c.Get(ID)
+// assert.NotNil(t, s)
+// assert.Equal(t, service.StatusOK, st)
+//
+// s.(*Service).AddMiddleware(func(f http.HandlerFunc) http.HandlerFunc {
+// return func(w http.ResponseWriter, r *http.Request) {
+// if r.URL.Path == "/halt" {
+// w.WriteHeader(500)
+// _, err := w.Write([]byte("halted"))
+// if err != nil {
+// t.Errorf("error writing the data to the http reply: error %v", err)
+// }
+// } else {
+// f(w, r)
+// }
+// }
+// })
+//
+// go func() {
+// err := c.Serve()
+// if err != nil {
+// t.Errorf("serve error: %v", err)
+// }
+// }()
+// time.Sleep(time.Millisecond * 500)
+//
+// req, err := http.NewRequest("GET", "http://localhost:6032?hello=world", nil)
+// if err != nil {
+// c.Stop()
+// return err
+// }
+//
+// r, err := http.DefaultClient.Do(req)
+// if err != nil {
+// c.Stop()
+// return err
+// }
+//
+// b, err := ioutil.ReadAll(r.Body)
+// if err != nil {
+// c.Stop()
+// return err
+// }
+//
+// assert.Equal(t, 201, r.StatusCode)
+// assert.Equal(t, "WORLD", string(b))
+//
+// err = r.Body.Close()
+// if err != nil {
+// c.Stop()
+// return err
+// }
+//
+// req, err = http.NewRequest("GET", "http://localhost:6032/halt", nil)
+// if err != nil {
+// c.Stop()
+// return err
+// }
+//
+// r, err = http.DefaultClient.Do(req)
+// if err != nil {
+// c.Stop()
+// return err
+// }
+// b, err = ioutil.ReadAll(r.Body)
+// if err != nil {
+// c.Stop()
+// return err
+// }
+//
+// assert.Equal(t, 500, r.StatusCode)
+// assert.Equal(t, "halted", string(b))
+//
+// err = r.Body.Close()
+// if err != nil {
+// c.Stop()
+// return err
+// }
+// c.Stop()
+//
+// return nil
+// }, bkoff)
+//
+// if err != nil {
+// t.Fatal(err)
+// }
+//
+//}
+//
+//func Test_Service_Listener(t *testing.T) {
+// bkoff := backoff.NewExponentialBackOff()
+// bkoff.MaxElapsedTime = time.Second * 15
+//
+// err := backoff.Retry(func() error {
+// logger, _ := test.NewNullLogger()
+// logger.SetLevel(logrus.DebugLevel)
+//
+// c := service.NewContainer(logger)
+// c.Register(ID, &Service{})
+//
+// err := c.Init(&testCfg{httpCfg: `{
+// "enable": true,
+// "address": ":6033",
+// "maxRequestSize": 1024,
+// "uploads": {
+// "dir": ` + tmpDir() + `,
+// "forbid": []
+// },
+// "workers":{
+// "command": "php ../../tests/http/client.php echo pipes",
+// "relay": "pipes",
+// "pool": {
+// "numWorkers": 1,
+// "allocateTimeout": 10000000,
+// "destroyTimeout": 10000000
+// }
+// }
+// }`})
+// if err != nil {
+// return err
+// }
+//
+// s, st := c.Get(ID)
+// assert.NotNil(t, s)
+// assert.Equal(t, service.StatusOK, st)
+//
+// stop := make(chan interface{})
+// s.(*Service).AddListener(func(event int, ctx interface{}) {
+// if event == roadrunner.EventServerStart {
+// stop <- nil
+// }
+// })
+//
+// go func() {
+// err := c.Serve()
+// if err != nil {
+// t.Errorf("serve error: %v", err)
+// }
+// }()
+// time.Sleep(time.Millisecond * 500)
+//
+// c.Stop()
+// assert.True(t, true)
+//
+// return nil
+// }, bkoff)
+//
+// if err != nil {
+// t.Fatal(err)
+// }
+//}
+//
+//func Test_Service_Error(t *testing.T) {
+// bkoff := backoff.NewExponentialBackOff()
+// bkoff.MaxElapsedTime = time.Second * 15
+//
+// err := backoff.Retry(func() error {
+// logger, _ := test.NewNullLogger()
+// logger.SetLevel(logrus.DebugLevel)
+//
+// c := service.NewContainer(logger)
+// c.Register(ID, &Service{})
+//
+// err := c.Init(&testCfg{httpCfg: `{
+// "enable": true,
+// "address": ":6034",
+// "maxRequestSize": 1024,
+// "uploads": {
+// "dir": ` + tmpDir() + `,
+// "forbid": []
+// },
+// "workers":{
+// "command": "php ../../tests/http/client.php echo pipes",
+// "relay": "---",
+// "pool": {
+// "numWorkers": 1,
+// "allocateTimeout": 10000000,
+// "destroyTimeout": 10000000
+// }
+// }
+// }`})
+// if err != nil {
+// return err
+// }
+//
+// // assert error
+// err = c.Serve()
+// if err == nil {
+// return err
+// }
+//
+// return nil
+// }, bkoff)
+//
+// if err != nil {
+// t.Fatal(err)
+// }
+//}
+//
+//func Test_Service_Error2(t *testing.T) {
+// bkoff := backoff.NewExponentialBackOff()
+// bkoff.MaxElapsedTime = time.Second * 15
+//
+// err := backoff.Retry(func() error {
+// logger, _ := test.NewNullLogger()
+// logger.SetLevel(logrus.DebugLevel)
+//
+// c := service.NewContainer(logger)
+// c.Register(ID, &Service{})
+//
+// err := c.Init(&testCfg{httpCfg: `{
+// "enable": true,
+// "address": ":6035",
+// "maxRequestSize": 1024,
+// "uploads": {
+// "dir": ` + tmpDir() + `,
+// "forbid": []
+// },
+// "workers":{
+// "command": "php ../../tests/http/client.php broken pipes",
+// "relay": "pipes",
+// "pool": {
+// "numWorkers": 1,
+// "allocateTimeout": 10000000,
+// "destroyTimeout": 10000000
+// }
+// }
+// }`})
+// if err != nil {
+// return err
+// }
+//
+// // assert error
+// err = c.Serve()
+// if err == nil {
+// return err
+// }
+//
+// return nil
+// }, bkoff)
+//
+// if err != nil {
+// t.Fatal(err)
+// }
+//}
+//
+//func Test_Service_Error3(t *testing.T) {
+// bkoff := backoff.NewExponentialBackOff()
+// bkoff.MaxElapsedTime = time.Second * 15
+//
+// err := backoff.Retry(func() error {
+// logger, _ := test.NewNullLogger()
+// logger.SetLevel(logrus.DebugLevel)
+//
+// c := service.NewContainer(logger)
+// c.Register(ID, &Service{})
+//
+// err := c.Init(&testCfg{httpCfg: `{
+// "enable": true,
+// "address": ":6036",
+// "maxRequestSize": 1024,
+// "uploads": {
+// "dir": ` + tmpDir() + `,
+// "forbid": []
+// },
+// "workers"
+// "command": "php ../../tests/http/client.php broken pipes",
+// "relay": "pipes",
+// "pool": {
+// "numWorkers": 1,
+// "allocateTimeout": 10000000,
+// "destroyTimeout": 10000000
+// }
+// }
+// }`})
+// // assert error
+// if err == nil {
+// return err
+// }
+//
+// return nil
+// }, bkoff)
+//
+// if err != nil {
+// t.Fatal(err)
+// }
+//
+//}
+//
+//func Test_Service_Error4(t *testing.T) {
+// bkoff := backoff.NewExponentialBackOff()
+// bkoff.MaxElapsedTime = time.Second * 15
+//
+// err := backoff.Retry(func() error {
+// logger, _ := test.NewNullLogger()
+// logger.SetLevel(logrus.DebugLevel)
+//
+// c := service.NewContainer(logger)
+// c.Register(ID, &Service{})
+//
+// err := c.Init(&testCfg{httpCfg: `{
+// "enable": true,
+// "address": "----",
+// "maxRequestSize": 1024,
+// "uploads": {
+// "dir": ` + tmpDir() + `,
+// "forbid": []
+// },
+// "workers":{
+// "command": "php ../../tests/http/client.php broken pipes",
+// "relay": "pipes",
+// "pool": {
+// "numWorkers": 1,
+// "allocateTimeout": 10000000,
+// "destroyTimeout": 10000000
+// }
+// }
+// }`})
+// // assert error
+// if err != nil {
+// return nil
+// }
+//
+// return err
+// }, bkoff)
+//
+// if err != nil {
+// t.Fatal(err)
+// }
+//}
+//
+//func tmpDir() string {
+// p := os.TempDir()
+// j := json.ConfigCompatibleWithStandardLibrary
+// r, _ := j.Marshal(p)
+//
+// return string(r)
+//}