summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSeb <[email protected]>2022-07-14 17:08:02 +0200
committerSeb <[email protected]>2022-07-15 13:27:52 +0200
commitda19bcd970bc78ab71260fbe1d3a94ed22b377c9 (patch)
tree9de2b50433ec61e7990bfcd854cd8b2c86da874a
parentd755a74819640ccc14a110b6b4025aebd4fdc20c (diff)
add tests
Signed-off-by: Seb <[email protected]>
-rw-r--r--roadrunner/roadrunner.go22
-rw-r--r--roadrunner/roadrunner_test.go76
2 files changed, 90 insertions, 8 deletions
diff --git a/roadrunner/roadrunner.go b/roadrunner/roadrunner.go
index 651eb8a2..f7499d96 100644
--- a/roadrunner/roadrunner.go
+++ b/roadrunner/roadrunner.go
@@ -5,6 +5,7 @@ import (
configImpl "github.com/roadrunner-server/config/v2"
endure "github.com/roadrunner-server/endure/pkg/container"
+ "github.com/roadrunner-server/endure/pkg/fsm"
"github.com/roadrunner-server/roadrunner/v2/internal/container"
"github.com/roadrunner-server/roadrunner/v2/internal/meta"
)
@@ -15,6 +16,7 @@ const (
type RR struct {
container *endure.Endure
+ stop chan struct{}
Version string
BuildTime string
}
@@ -61,6 +63,7 @@ func NewRR(cfgFile string, override *[]string, pluginList []interface{}) (*RR, e
rr := &RR{
container: endureContainer,
+ stop: make(chan struct{}),
Version: meta.Version(),
BuildTime: meta.BuildTime(),
}
@@ -77,19 +80,22 @@ func (rr *RR) Serve() error {
return err
}
- e := <-errCh
+ select {
+ case e := <-errCh:
+ return fmt.Errorf("error: %w\nplugin: %s", e.Error, e.VertexID)
+ case <-rr.stop:
+ return nil
+ }
+}
- return fmt.Errorf("error: %w\nplugin: %s", e.Error, e.VertexID)
+func (rr *RR) CurrentState() fsm.State {
+ return rr.container.CurrentState()
}
// Stop stops roadrunner
func (rr *RR) Stop() error {
- err := rr.container.Stop()
- if err != nil {
- return err
- }
-
- return nil
+ rr.stop <- struct{}{}
+ return rr.container.Stop()
}
// DefaultPluginsList returns all the plugins that RR can run with and are included by default
diff --git a/roadrunner/roadrunner_test.go b/roadrunner/roadrunner_test.go
new file mode 100644
index 00000000..16ff4f61
--- /dev/null
+++ b/roadrunner/roadrunner_test.go
@@ -0,0 +1,76 @@
+package roadrunner_test
+
+import (
+ "os"
+ "testing"
+ "time"
+
+ "github.com/roadrunner-server/endure/pkg/fsm"
+ "github.com/roadrunner-server/informer/v2"
+ "github.com/roadrunner-server/resetter/v2"
+ "github.com/roadrunner-server/roadrunner/v2/roadrunner"
+ "github.com/stretchr/testify/assert"
+)
+
+func TestNewFailsOnMissingConfig(t *testing.T) {
+ _, err := roadrunner.NewRR("config/file/does/not/exist/.rr.yaml", &[]string{}, roadrunner.DefaultPluginsList())
+ assert.NotNil(t, err)
+}
+
+const testConfig = `
+server:
+ command: "php src/index.php"
+ relay: "unix://rr.sock"
+
+endure:
+ grace_period: 1s
+`
+
+func makeConfig(t *testing.T, configYaml string) string {
+ cfgFile := os.TempDir() + "/.rr.yaml"
+ err := os.WriteFile(cfgFile, []byte(configYaml), 0644)
+ assert.Nil(t, err)
+
+ return cfgFile
+}
+
+func TestNewWithConfig(t *testing.T) {
+ cfgFile := makeConfig(t, testConfig)
+ rr, err := roadrunner.NewRR(cfgFile, &[]string{}, roadrunner.DefaultPluginsList())
+ assert.Nil(t, err)
+
+ assert.Equal(t, "development", rr.BuildTime)
+ assert.Equal(t, "local", rr.Version)
+ assert.Equal(t, fsm.Initialized, rr.CurrentState())
+}
+
+func TestServeStop(t *testing.T) {
+ cfgFile := makeConfig(t, testConfig)
+ plugins := []interface{}{
+ &informer.Plugin{},
+ &resetter.Plugin{},
+ }
+ rr, err := roadrunner.NewRR(cfgFile, &[]string{}, plugins)
+ assert.Nil(t, err)
+
+ var serveError error
+ stopped := false
+ go func() {
+ serveError = rr.Serve()
+ stopped = true
+ }()
+
+ assert.Equal(t, rr.CurrentState(), fsm.Initialized)
+ for rr.CurrentState() != fsm.Started {
+ time.Sleep(20 * time.Millisecond)
+ }
+
+ assert.Nil(t, serveError)
+ assert.False(t, stopped)
+
+ err = rr.Stop()
+ assert.Nil(t, err)
+ assert.Equal(t, fsm.Stopped, rr.CurrentState())
+ assert.True(t, stopped)
+ assert.Nil(t, serveError)
+}