Skip to content

Commit

Permalink
Added capability to override startup args (fixes #41)
Browse files Browse the repository at this point in the history
  • Loading branch information
vania-pooh committed Jul 2, 2017
1 parent 42b78b7 commit 1eb5e60
Show file tree
Hide file tree
Showing 8 changed files with 29 additions and 28 deletions.
8 changes: 5 additions & 3 deletions cmd/selenoid.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ var (
skipDownload bool
vnc bool
force bool
limit int
args string
)

func init() {
Expand Down Expand Up @@ -122,8 +122,10 @@ func initFlags() {
for _, c := range []*cobra.Command{
selenoidStartCmd,
selenoidUpdateCmd,
selenoidStartUICmd,
selenoidUpdateUICmd,
} {
c.Flags().IntVarP(&limit, "limit", "m", 0, "max parallel sessions limit (-limit parameter in Selenoid)")
c.Flags().StringVarP(&args, "args", "g", "", "additional service arguments (e.g. \"-limit 5\")")
}
}

Expand All @@ -134,7 +136,7 @@ func createLifecycle() (*selenoid.Lifecycle, error) {
ConfigDir: configDir,
Browsers: browsers,
Download: !skipDownload,
Limit: limit,
Args: args,

LastVersions: lastVersions,
RegistryUrl: registry,
Expand Down
4 changes: 2 additions & 2 deletions docs/selenoid-commands.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,9 @@ By default Selenoid data is stored in `~/.aerokube/selenoid` but you can specify

$ ./cm selenoid start --vnc
+
To change Selenoid maximum parallel sessions add `--limit` flag:
To override Selenoid startup arguments sessions add `--args` flag:

$ ./cm selenoid start --limit 10
$ ./cm selenoid start --args "-limit 10"
+
An alternative to downloading `cm` manually is using Docker container:

Expand Down
4 changes: 2 additions & 2 deletions selenoid/base.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,6 @@ type RequestedBrowsersAware struct {
Browsers string
}

type LimitAware struct {
Limit int
type ArgsAware struct {
Args string
}
15 changes: 7 additions & 8 deletions selenoid/docker.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ type DockerConfigurator struct {
VersionAware
DownloadAware
RequestedBrowsersAware
LimitAware
ArgsAware
LastVersions int
Pull bool
RegistryUrl string
Expand All @@ -65,7 +65,7 @@ func NewDockerConfigurator(config *LifecycleConfig) (*DockerConfigurator, error)
VersionAware: VersionAware{Version: config.Version},
DownloadAware: DownloadAware{DownloadNeeded: config.Download},
RequestedBrowsersAware: RequestedBrowsersAware{Browsers: config.Browsers},
LimitAware: LimitAware{Limit: config.Limit},
ArgsAware: ArgsAware{Args: config.Args},
RegistryUrl: config.RegistryUrl,
LastVersions: config.LastVersions,
Tmpfs: config.Tmpfs,
Expand Down Expand Up @@ -453,12 +453,7 @@ func (c *DockerConfigurator) Start() error {
volumes = append(volumes, fmt.Sprintf("%s:%s", dockerSocket, dockerSocket))
}

cmd := []string{}
if c.Limit > 0 {
cmd = append(cmd, "-limit", strconv.Itoa(c.Limit))
}

return c.startContainer(selenoidContainerName, image, selenoidContainerPort, volumes, []string{}, cmd)
return c.startContainer(selenoidContainerName, image, selenoidContainerPort, volumes, []string{}, strings.Fields(c.Args))
}

func (c *DockerConfigurator) StartUI() error {
Expand All @@ -470,6 +465,10 @@ func (c *DockerConfigurator) StartUI() error {
links := []string{selenoidContainerName}

cmd := []string{fmt.Sprintf("--selenoid-uri=http://%s:%d", selenoidContainerName, selenoidContainerPort)}
overrideCmd := strings.Fields(c.Args)
if len(overrideCmd) > 0 {
cmd = overrideCmd
}

return c.startContainer(selenoidUIContainerName, image, selenoidUIContainerPort, []string{}, links, cmd)
}
Expand Down
2 changes: 1 addition & 1 deletion selenoid/docker_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ func testConfigure(t *testing.T, download bool) {
LastVersions: 2,
Tmpfs: 512,
Browsers: "firefox,opera",
Limit: 42,
Args: "-limit 42",
VNC: true,
}
c, err := NewDockerConfigurator(&lcConfig)
Expand Down
12 changes: 6 additions & 6 deletions selenoid/drivers.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import (
"path/filepath"
"regexp"
"runtime"
"strconv"
"strings"
)

Expand Down Expand Up @@ -63,7 +62,7 @@ type DriversConfigurator struct {
ConfigDirAware
VersionAware
DownloadAware
LimitAware
ArgsAware
RequestedBrowsersAware
Browsers string
BrowsersJsonUrl string
Expand All @@ -78,7 +77,7 @@ func NewDriversConfigurator(config *LifecycleConfig) *DriversConfigurator {
Logger: Logger{Quiet: config.Quiet},
ConfigDirAware: ConfigDirAware{ConfigDir: config.ConfigDir},
VersionAware: VersionAware{Version: config.Version},
LimitAware: LimitAware{Limit: config.Limit},
ArgsAware: ArgsAware{Args: config.Args},
DownloadAware: DownloadAware{DownloadNeeded: config.Download},
RequestedBrowsersAware: RequestedBrowsersAware{Browsers: config.Browsers},
BrowsersJsonUrl: config.BrowsersJsonUrl,
Expand Down Expand Up @@ -542,14 +541,15 @@ func (d *DriversConfigurator) Start() error {
"-conf", getSelenoidConfigPath(d.ConfigDir),
"-disable-docker",
}
if d.Limit > 0 {
args = append(args, "-limit", strconv.Itoa(d.Limit))
overrideArgs := strings.Fields(d.Args)
if len(overrideArgs) > 0 {
args = overrideArgs
}
return runCommand(d.getSelenoidBinaryPath(), args)
}

func (d *DriversConfigurator) StartUI() error {
args := []string{}
args := strings.Fields(d.Args)
return runCommand(d.getSelenoidUIBinaryPath(), args)
}

Expand Down
10 changes: 5 additions & 5 deletions selenoid/drivers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -306,12 +306,12 @@ func testDownloadRelease(t *testing.T, desiredVersion string, expectedFileConten
}
configurator := NewDriversConfigurator(&lcConfig)
AssertThat(t, configurator.IsDownloaded(), Is{false})

outputPath, err := configurator.Download()
AssertThat(t, err, Is{nil})
AssertThat(t, outputPath, Is{Not{nil}})
checkContentsEqual(t, outputPath, expectedFileContents)

uiOutputPath, err := configurator.DownloadUI()
AssertThat(t, err, Is{nil})
AssertThat(t, uiOutputPath, Is{Not{nil}})
Expand All @@ -327,7 +327,7 @@ func checkContentsEqual(t *testing.T, outputPath string, expectedFileContents st
data, err := ioutil.ReadFile(outputPath)
AssertThat(t, err, Is{nil})
AssertThat(t, string(data), EqualTo{expectedFileContents})

}

func TestUnknownRelease(t *testing.T) {
Expand Down Expand Up @@ -390,14 +390,14 @@ func TestStartStopProcess(t *testing.T) {
OS: runtime.GOOS,
Arch: runtime.GOARCH,
Version: Latest,
Limit: 42,
Args: "-limit 42",
}
configurator := NewDriversConfigurator(&lcConfig)
AssertThat(t, configurator.IsRunning(), Is{true}) //This is probably true because test binary has name selenoid.test; no fake process is launched
AssertThat(t, configurator.Start(), Is{nil})
configurator.Status()
AssertThat(t, configurator.Stop(), Is{nil})

AssertThat(t, configurator.IsUIRunning(), Is{false})
AssertThat(t, configurator.StartUI(), Is{nil})
configurator.UIStatus()
Expand Down
2 changes: 1 addition & 1 deletion selenoid/lifecycle.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ type LifecycleConfig struct {
ConfigDir string
Browsers string
Download bool
Limit int
Args string
Version string

// Docker specific
Expand Down

0 comments on commit 1eb5e60

Please sign in to comment.