diff options
author | Seb <[email protected]> | 2022-07-14 17:08:02 +0200 |
---|---|---|
committer | Seb <[email protected]> | 2022-07-15 13:27:52 +0200 |
commit | da19bcd970bc78ab71260fbe1d3a94ed22b377c9 (patch) | |
tree | 9de2b50433ec61e7990bfcd854cd8b2c86da874a | |
parent | d755a74819640ccc14a110b6b4025aebd4fdc20c (diff) |
add tests
Signed-off-by: Seb <[email protected]>
-rw-r--r-- | roadrunner/roadrunner.go | 22 | ||||
-rw-r--r-- | roadrunner/roadrunner_test.go | 76 |
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) +} |