From b00983e9b6f4b955cdf5d44a53f7a4cd3d0a0995 Mon Sep 17 00:00:00 2001 From: Artur Souza Date: Mon, 21 Sep 2020 14:18:03 -0700 Subject: [PATCH] Propagates dashboard port in standalone mode. (#465) --- cmd/dashboard.go | 20 +++++++++++--------- pkg/standalone/dashboard.go | 20 ++++++++++---------- pkg/standalone/dashboard_test.go | 22 ++++++++++++++++++++++ 3 files changed, 43 insertions(+), 19 deletions(-) create mode 100644 pkg/standalone/dashboard_test.go diff --git a/cmd/dashboard.go b/cmd/dashboard.go index c7ebf98a..da25b5ee 100644 --- a/cmd/dashboard.go +++ b/cmd/dashboard.go @@ -38,7 +38,7 @@ const ( ) var dashboardNamespace string -var localPort int +var dashboardLocalPort int var dashboardVersion bool var DashboardCmd = &cobra.Command{ @@ -50,10 +50,9 @@ var DashboardCmd = &cobra.Command{ os.Exit(0) } - if port < 0 { - localPort = defaultLocalPort - } else { - localPort = port + if dashboardLocalPort <= 0 { + print.FailureStatusEvent(os.Stdout, "Invalid port: %v", dashboardLocalPort) + os.Exit(1) } if kubernetesMode { @@ -107,7 +106,7 @@ var DashboardCmd = &cobra.Command{ foundNamespace, dashboardSvc, defaultHost, - localPort, + dashboardLocalPort, remotePort, false, ) @@ -129,7 +128,7 @@ var DashboardCmd = &cobra.Command{ }() // url for dashboard after port forwarding - var webURL string = fmt.Sprintf("http://%s:%d", defaultHost, localPort) + var webURL string = fmt.Sprintf("http://%s:%d", defaultHost, dashboardLocalPort) print.InfoStatusEvent(os.Stdout, fmt.Sprintf("Dapr dashboard found in namespace:\t%s", foundNamespace)) print.InfoStatusEvent(os.Stdout, fmt.Sprintf("Dapr dashboard available at:\t%s\n", webURL)) @@ -143,7 +142,10 @@ var DashboardCmd = &cobra.Command{ <-portForward.GetStop() } else { // Standalone mode - standalone.RunDashboard() + err := standalone.NewDashboardCmd(dashboardLocalPort).Run() + if err != nil { + print.FailureStatusEvent(os.Stdout, "Dapr dashboard not found. Is Dapr installed?") + } } }, } @@ -151,7 +153,7 @@ var DashboardCmd = &cobra.Command{ func init() { DashboardCmd.Flags().BoolVarP(&kubernetesMode, "kubernetes", "k", false, "Start Dapr dashboard in local browser") DashboardCmd.Flags().BoolVarP(&dashboardVersion, "version", "v", false, "Check Dapr dashboard version") - DashboardCmd.Flags().IntVarP(&port, "port", "p", defaultLocalPort, "The local port on which to serve dashboard") + DashboardCmd.Flags().IntVarP(&dashboardLocalPort, "port", "p", defaultLocalPort, "The local port on which to serve dashboard") DashboardCmd.Flags().StringVarP(&dashboardNamespace, "namespace", "n", daprSystemNamespace, "The namespace where Dapr dashboard is running") RootCmd.AddCommand(DashboardCmd) } diff --git a/pkg/standalone/dashboard.go b/pkg/standalone/dashboard.go index 45eff089..9852855e 100644 --- a/pkg/standalone/dashboard.go +++ b/pkg/standalone/dashboard.go @@ -1,3 +1,8 @@ +// ------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// ------------------------------------------------------------ + package standalone import ( @@ -5,12 +10,11 @@ import ( "os/exec" "path/filepath" "runtime" - - "github.com/dapr/cli/pkg/print" + "strconv" ) -// RunDashboard finds the dashboard binary and runs it -func RunDashboard() { +// NewDashboardCmd creates the command to run dashboard. +func NewDashboardCmd(port int) *exec.Cmd { // Use the default binary install location dashboardPath := defaultDaprBinPath() binaryName := "dashboard" @@ -19,14 +23,10 @@ func RunDashboard() { } // Construct command to run dashboard - cmdDashboardStandalone := &exec.Cmd{ + return &exec.Cmd{ Path: filepath.Join(dashboardPath, binaryName), + Args: []string{binaryName, "--port", strconv.Itoa(port)}, Dir: dashboardPath, Stdout: os.Stdout, } - - err := cmdDashboardStandalone.Run() - if err != nil { - print.FailureStatusEvent(os.Stdout, "Dapr dashboard not found. Is Dapr installed?") - } } diff --git a/pkg/standalone/dashboard_test.go b/pkg/standalone/dashboard_test.go new file mode 100644 index 00000000..fb5c853f --- /dev/null +++ b/pkg/standalone/dashboard_test.go @@ -0,0 +1,22 @@ +// ------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// ------------------------------------------------------------ + +package standalone + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestDashboardRun(t *testing.T) { + t.Run("build Cmd", func(t *testing.T) { + cmd := NewDashboardCmd(9090) + + assert.Contains(t, cmd.Args[0], "dashboard") + assert.Equal(t, cmd.Args[1], "--port") + assert.Equal(t, cmd.Args[2], "9090") + }) +}