PHP Classes

File: worker_test.go

Recommend this page to a friend!
  Classes of Wolfy-J   roadrunner   worker_test.go   Download  
File: worker_test.go
Role: Auxiliary data
Content type: text/plain
Description: Auxiliary data
Class: roadrunner
Run multiple tasks of PHP in parallel using Golang
Author: By
Last change:
Date: 6 years ago
Size: 3,805 bytes
 

Contents

Class file image Download
package roadrunner import ( "github.com/stretchr/testify/assert" "os/exec" "testing" "time" ) func Test_GetState(t *testing.T) { cmd := exec.Command("php", "tests/client.php", "echo", "pipes") w, err := NewPipeFactory().SpawnWorker(cmd) go func() { assert.NoError(t, w.Wait()) }() assert.NoError(t, err) assert.NotNil(t, w) assert.Equal(t, StateReady, w.State().Value()) w.Stop() assert.Equal(t, StateStopped, w.State().Value()) } func Test_Echo(t *testing.T) { cmd := exec.Command("php", "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.Nil(t, err) assert.NotNil(t, res) assert.NotNil(t, res.Body) assert.Nil(t, res.Context) assert.Equal(t, "hello", res.String()) } func Test_NotStarted_String(t *testing.T) { cmd := exec.Command("php", "tests/client.php", "echo", "pipes") w, _ := newWorker(cmd) assert.Contains(t, w.String(), "php tests/client.php echo pipes") assert.Contains(t, w.String(), "inactive") assert.Contains(t, w.String(), "numExecs: 0") } func Test_String(t *testing.T) { cmd := exec.Command("php", "tests/client.php", "echo", "pipes") w, _ := NewPipeFactory().SpawnWorker(cmd) go func() { assert.NoError(t, w.Wait()) }() defer w.Stop() assert.Contains(t, w.String(), "php tests/client.php echo pipes") assert.Contains(t, w.String(), "ready") assert.Contains(t, w.String(), "numExecs: 0") } func Test_Echo_Slow(t *testing.T) { cmd := exec.Command("php", "tests/slow-client.php", "echo", "pipes", "10", "10") w, _ := NewPipeFactory().SpawnWorker(cmd) go func() { assert.NoError(t, w.Wait()) }() defer w.Stop() res, err := w.Exec(&Payload{Body: []byte("hello")}) assert.Nil(t, err) assert.NotNil(t, res) assert.NotNil(t, res.Body) assert.Nil(t, res.Context) assert.Equal(t, "hello", res.String()) } func Test_Broken(t *testing.T) { cmd := exec.Command("php", "tests/client.php", "broken", "pipes") w, err := 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.Nil(t, res) assert.NotNil(t, err) } func Test_OnStarted(t *testing.T) { cmd := exec.Command("php", "tests/client.php", "broken", "pipes") assert.Nil(t, cmd.Start()) w, err := newWorker(cmd) assert.Nil(t, w) assert.NotNil(t, err) assert.Equal(t, "can't attach to running process", err.Error()) } func Test_Error(t *testing.T) { cmd := exec.Command("php", "tests/client.php", "error", "pipes") w, _ := NewPipeFactory().SpawnWorker(cmd) go func() { assert.NoError(t, w.Wait()) }() defer w.Stop() res, err := w.Exec(&Payload{Body: []byte("hello")}) assert.Nil(t, res) assert.NotNil(t, err) assert.IsType(t, JobError{}, err) assert.Equal(t, "hello", err.Error()) } func Test_NumExecs(t *testing.T) { cmd := exec.Command("php", "tests/client.php", "echo", "pipes") w, _ := NewPipeFactory().SpawnWorker(cmd) go func() { assert.NoError(t, w.Wait()) }() defer w.Stop() w.Exec(&Payload{Body: []byte("hello")}) assert.Equal(t, uint64(1), w.State().NumExecs()) w.Exec(&Payload{Body: []byte("hello")}) assert.Equal(t, uint64(2), w.State().NumExecs()) w.Exec(&Payload{Body: []byte("hello")}) assert.Equal(t, uint64(3), w.State().NumExecs()) } func Test_StateUpdated(t *testing.T) { cmd := exec.Command("php", "tests/client.php", "echo", "pipes") w, _ := NewPipeFactory().SpawnWorker(cmd) go func() { assert.NoError(t, w.Wait()) }() defer w.Stop() tm := time.Now() time.Sleep(time.Millisecond) w.Exec(&Payload{Body: []byte("hello")}) assert.True(t, w.State().Updated().After(tm)) }