diff options
author | Wolfy-J <[email protected]> | 2018-06-05 23:17:14 +0300 |
---|---|---|
committer | Wolfy-J <[email protected]> | 2018-06-05 23:17:14 +0300 |
commit | e594c7070aad609c4caeda760671aca00e638561 (patch) | |
tree | b7ecb76ceeba88e03635c238a67f237452c20524 /pipe_factory_test.go | |
parent | 6adaf713b47c9a3ab3a516e21d2d4ecf7f2075d6 (diff) |
fixing controlled descruction
Diffstat (limited to 'pipe_factory_test.go')
-rw-r--r-- | pipe_factory_test.go | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/pipe_factory_test.go b/pipe_factory_test.go new file mode 100644 index 00000000..ae276ab6 --- /dev/null +++ b/pipe_factory_test.go @@ -0,0 +1,133 @@ +package roadrunner + +import ( + "github.com/stretchr/testify/assert" + "os/exec" + "testing" +) + +func Test_Pipe_Start(t *testing.T) { + cmd := exec.Command("php", "php-src/tests/client.php", "echo", "pipes") + + w, err := NewPipeFactory().SpawnWorker(cmd) + assert.NoError(t, err) + assert.NotNil(t, w) + + go func() { + assert.NoError(t, w.Wait()) + }() + + w.Stop() +} + +func Test_Pipe_StartError(t *testing.T) { + cmd := exec.Command("php", "php-src/tests/client.php", "echo", "pipes") + cmd.Start() + + w, err := NewPipeFactory().SpawnWorker(cmd) + assert.Error(t, err) + assert.Nil(t, w) +} + +func Test_Pipe_PipeError(t *testing.T) { + cmd := exec.Command("php", "php-src/tests/client.php", "echo", "pipes") + cmd.StdinPipe() + + w, err := NewPipeFactory().SpawnWorker(cmd) + assert.Error(t, err) + assert.Nil(t, w) +} + +func Test_Pipe_PipeError2(t *testing.T) { + cmd := exec.Command("php", "php-src/tests/client.php", "echo", "pipes") + cmd.StdoutPipe() + + w, err := NewPipeFactory().SpawnWorker(cmd) + assert.Error(t, err) + assert.Nil(t, w) +} + +func Test_Pipe_Failboot(t *testing.T) { + cmd := exec.Command("php", "php-src/tests/failboot.php") + w, err := NewPipeFactory().SpawnWorker(cmd) + + assert.Nil(t, w) + assert.Error(t, err) + assert.Contains(t, err.Error(), "failboot") +} + +func Test_Pipe_Invalid(t *testing.T) { + cmd := exec.Command("php", "php-src/tests/invalid.php") + + w, err := NewPipeFactory().SpawnWorker(cmd) + assert.Error(t, err) + assert.Nil(t, w) +} + +func Test_Pipe_Echo(t *testing.T) { + cmd := exec.Command("php", "php-src/tests/client.php", "echo", "pipes") + + w, _ := NewPipeFactory().SpawnWorker(cmd) + go func() { + assert.NoError(t, w.Wait()) + }() + defer w.Stop() + + res, err := w.Exec(&Payload{Body: []byte("hello")}) + + assert.NoError(t, err) + assert.NotNil(t, res) + assert.NotNil(t, res.Body) + assert.Nil(t, res.Context) + + assert.Equal(t, "hello", res.String()) +} + +func Test_Pipe_Broken(t *testing.T) { + cmd := exec.Command("php", "php-src/tests/client.php", "broken", "pipes") + + w, _ := NewPipeFactory().SpawnWorker(cmd) + go func() { + err := w.Wait() + + assert.Error(t, err) + assert.Contains(t, err.Error(), "undefined_function()") + }() + defer w.Stop() + + res, err := w.Exec(&Payload{Body: []byte("hello")}) + + assert.Error(t, err) + assert.Nil(t, res) +} + +func Benchmark_Pipe_SpawnWorker_Stop(b *testing.B) { + f := NewPipeFactory() + for n := 0; n < b.N; n++ { + cmd := exec.Command("php", "php-src/tests/client.php", "echo", "pipes") + w, _ := f.SpawnWorker(cmd) + go func() { + if w.Wait() != nil { + b.Fail() + } + }() + + w.Stop() + } +} + +func Benchmark_Pipe_Worker_ExecEcho(b *testing.B) { + cmd := exec.Command("php", "php-src/tests/client.php", "echo", "pipes") + + w, _ := NewPipeFactory().SpawnWorker(cmd) + go func() { + w.Wait() + }() + defer w.Stop() + + for n := 0; n < b.N; n++ { + if _, err := w.Exec(&Payload{Body: []byte("hello")}); err != nil { + b.Fail() + } + } +} |