summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/rr/command_test.go67
-rw-r--r--cmd/rr/main.go28
2 files changed, 95 insertions, 0 deletions
diff --git a/cmd/rr/command_test.go b/cmd/rr/command_test.go
new file mode 100644
index 00000000..0e111f4b
--- /dev/null
+++ b/cmd/rr/command_test.go
@@ -0,0 +1,67 @@
+package main
+
+import (
+ "bytes"
+ "io"
+ "os"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+)
+
+func Test_Main(t *testing.T) {
+ os.Args = []string{"", "--help"}
+ exitFn = func(code int) { assert.Equal(t, 0, code) }
+
+ r, w, err := os.Pipe()
+ require.NoError(t, err)
+ os.Stdout = w
+
+ main()
+ _ = w.Close()
+ buf := new(bytes.Buffer)
+ _, err = io.Copy(buf, r)
+ require.NoError(t, err)
+
+ assert.Contains(t, buf.String(), "Usage:")
+ assert.Contains(t, buf.String(), "Available Commands:")
+ assert.Contains(t, buf.String(), "Flags:")
+}
+
+func Test_MainWithoutCommands(t *testing.T) {
+ os.Args = []string{""}
+ exitFn = func(code int) { assert.Equal(t, 0, code) }
+
+ r, w, err := os.Pipe()
+ require.NoError(t, err)
+ os.Stdout = w
+
+ main()
+ _ = w.Close()
+ buf := new(bytes.Buffer)
+ _, err = io.Copy(buf, r)
+ require.NoError(t, err)
+
+ assert.Contains(t, buf.String(), "Usage:")
+ assert.Contains(t, buf.String(), "Available Commands:")
+ assert.Contains(t, buf.String(), "Flags:")
+}
+
+func Test_MainUnknownSubcommand(t *testing.T) {
+ os.Args = []string{"", "foobar"}
+ exitFn = func(code int) { assert.Equal(t, 1, code) }
+
+ r, w, err := os.Pipe()
+ require.NoError(t, err)
+ os.Stderr = w
+
+ main()
+ _ = w.Close()
+ buf := new(bytes.Buffer)
+ _, err = io.Copy(buf, r)
+ require.NoError(t, err)
+
+ assert.Contains(t, buf.String(), "unknown command")
+ assert.Contains(t, buf.String(), "foobar")
+}
diff --git a/cmd/rr/main.go b/cmd/rr/main.go
new file mode 100644
index 00000000..054b192e
--- /dev/null
+++ b/cmd/rr/main.go
@@ -0,0 +1,28 @@
+package main
+
+import (
+ "os"
+ "path/filepath"
+
+ "github.com/fatih/color"
+ "github.com/roadrunner-server/roadrunner/v2/internal/cli"
+)
+
+// exitFn is a function for application exiting.
+var exitFn = os.Exit //nolint:gochecknoglobals
+
+// main CLI application entrypoint.
+func main() { exitFn(run()) }
+
+// run this CLI application.
+func run() int {
+ cmd := cli.NewCommand(filepath.Base(os.Args[0]))
+
+ if err := cmd.Execute(); err != nil {
+ _, _ = color.New(color.FgHiRed, color.Bold).Fprintln(os.Stderr, err.Error())
+
+ return 1
+ }
+
+ return 0
+}