From 14baea87e2d3b676ae21536fbb52a162fbdb0902 Mon Sep 17 00:00:00 2001 From: Ivan Krutov Date: Thu, 26 Nov 2020 11:44:47 +0300 Subject: [PATCH 1/2] Bump Chromedriver, Geckodriver and Operadriver versions --- browsers.json | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/browsers.json b/browsers.json index 3e8a856..ccb7001 100644 --- a/browsers.json +++ b/browsers.json @@ -4,23 +4,23 @@ "files": { "linux": { "amd64": { - "url": "http://chromedriver.storage.googleapis.com/85.0.4183.87/chromedriver_linux64.zip", + "url": "http://chromedriver.storage.googleapis.com/87.0.4280.20/chromedriver_linux64.zip", "filename": "chromedriver" } }, "darwin": { "amd64": { - "url": "http://chromedriver.storage.googleapis.com/85.0.4183.87/chromedriver_mac64.zip", + "url": "http://chromedriver.storage.googleapis.com/87.0.4280.20/chromedriver_mac64.zip", "filename": "chromedriver" } }, "windows": { "386": { - "url": "http://chromedriver.storage.googleapis.com/85.0.4183.87/chromedriver_win32.zip", + "url": "http://chromedriver.storage.googleapis.com/87.0.4280.20/chromedriver_win32.zip", "filename": "chromedriver.exe" }, "amd64": { - "url": "http://chromedriver.storage.googleapis.com/85.0.4183.87/chromedriver_win32.zip", + "url": "http://chromedriver.storage.googleapis.com/87.0.4280.20/chromedriver_win32.zip", "filename": "chromedriver.exe" } } @@ -32,27 +32,27 @@ "files": { "linux": { "386": { - "url": "https://github.com/mozilla/geckodriver/releases/download/v0.27.0/geckodriver-v0.27.0-linux32.tar.gz", + "url": "https://github.com/mozilla/geckodriver/releases/download/v0.28.0/geckodriver-v0.28.0-linux32.tar.gz", "filename": "geckodriver" }, "amd64": { - "url": "https://github.com/mozilla/geckodriver/releases/download/v0.27.0/geckodriver-v0.27.0-linux64.tar.gz", + "url": "https://github.com/mozilla/geckodriver/releases/download/v0.28.0/geckodriver-v0.28.0-linux64.tar.gz", "filename": "geckodriver" } }, "darwin": { "amd64": { - "url": "https://github.com/mozilla/geckodriver/releases/download/v0.27.0/geckodriver-v0.27.0-macos.tar.gz", + "url": "https://github.com/mozilla/geckodriver/releases/download/v0.28.0/geckodriver-v0.28.0-macos.tar.gz", "filename": "geckodriver" } }, "windows": { "386": { - "url": "https://github.com/mozilla/geckodriver/releases/download/v0.27.0/geckodriver-v0.27.0-win32.zip", + "url": "https://github.com/mozilla/geckodriver/releases/download/v0.28.0/geckodriver-v0.28.0-win32.zip", "filename": "geckodriver.exe" }, "amd64": { - "url": "https://github.com/mozilla/geckodriver/releases/download/v0.27.0/geckodriver-v0.27.0-win64.zip", + "url": "https://github.com/mozilla/geckodriver/releases/download/v0.28.0/geckodriver-v0.28.0-win64.zip", "filename": "geckodriver.exe" } } @@ -64,23 +64,23 @@ "files": { "linux": { "amd64": { - "url": "https://github.com/operasoftware/operachromiumdriver/releases/download/v.84.0.4147.89/operadriver_linux64.zip", + "url": "https://github.com/operasoftware/operachromiumdriver/releases/download/v.86.0.4240.80/operadriver_linux64.zip", "filename": "operadriver_linux64/operadriver" } }, "darwin": { "amd64": { - "url": "https://github.com/operasoftware/operachromiumdriver/releases/download/v.84.0.4147.89/operadriver_mac64.zip", + "url": "https://github.com/operasoftware/operachromiumdriver/releases/download/v.86.0.4240.80/operadriver_mac64.zip", "filename": "operadriver_mac64/operadriver" } }, "windows": { "386": { - "url": "https://github.com/operasoftware/operachromiumdriver/releases/download/v.84.0.4147.89/operadriver_win32.zip", + "url": "https://github.com/operasoftware/operachromiumdriver/releases/download/v.86.0.4240.80/operadriver_win32.zip", "filename": "operadriver_win32/operadriver.exe" }, "amd64": { - "url": "https://github.com/operasoftware/operachromiumdriver/releases/download/v.84.0.4147.89/operadriver_win64.zip", + "url": "https://github.com/operasoftware/operachromiumdriver/releases/download/v.86.0.4240.80/operadriver_win64.zip", "filename": "operadriver_win64/operadriver.exe" } } From c83fa6516904070288f041b3a349d96727b39f2f Mon Sep 17 00:00:00 2001 From: Ivan Krutov Date: Thu, 26 Nov 2020 12:21:13 +0300 Subject: [PATCH 2/2] Added MicrosoftEdge support (fixes #283) --- selenoid/docker.go | 20 ++++++-------- selenoid/docker_test.go | 59 ++++++++++++++++++++++++++++++++++++++--- 2 files changed, 63 insertions(+), 16 deletions(-) diff --git a/selenoid/docker.go b/selenoid/docker.go index 798e85c..7cf91db 100644 --- a/selenoid/docker.go +++ b/selenoid/docker.go @@ -38,9 +38,9 @@ import ( "github.com/aerokube/cm/render/rewriter" dc "github.com/aerokube/util/docker" "github.com/fatih/color" + . "github.com/fvbommel/sortorder" "io" "net/url" - . "github.com/fvbommel/sortorder" ) const ( @@ -49,6 +49,7 @@ const ( Latest = "latest" firefox = "firefox" android = "android" + edge = "MicrosoftEdge" opera = "opera" tag_1216 = "12.16" selenoidImage = "aerokube/selenoid" @@ -375,8 +376,7 @@ func (c *DockerConfigurator) createConfig() SelenoidConfig { c.Titlef(`Processing browser "%v"...`, color.GreenString(browserName)) tags := c.fetchImageTags(image) if c.VNC { - c.Pointf("Requested to download VNC images...") - image = fmt.Sprintf("selenoid/vnc_%s", browserName) + c.Pointf("Requested to download VNC images but this feature is now deprecated as all images contain VNC.") } versionConstraint := requestedBrowsers[browserName] pulledTags := c.filterTags(tags, versionConstraint) @@ -431,6 +431,9 @@ func (c *DockerConfigurator) getBrowsersToIterate(requestedBrowsers map[string][ if _, ok := requestedBrowsers[android]; ok { defaultBrowsers[android] = "selenoid/android" } + if _, ok := requestedBrowsers[edge]; ok { + defaultBrowsers[edge] = "browsers/edge" + } ret := make(map[string]string) for browserName := range requestedBrowsers { if image, ok := defaultBrowsers[browserName]; ok { @@ -497,11 +500,11 @@ func (c *DockerConfigurator) filterTags(tags []string, versionConstraints []*sem func (c *DockerConfigurator) createVersions(browserName string, image string, tags []string) config.Versions { versions := config.Versions{ - Default: c.getVersionFromTag(browserName, tags[0]), + Default: tags[0], Versions: make(map[string]*config.Browser), } for _, tag := range tags { - version := c.getVersionFromTag(browserName, tag) + version := tag browser := &config.Browser{ Image: imageWithTag(image, tag), Port: "4444", @@ -556,13 +559,6 @@ func (c *DockerConfigurator) getFullyQualifiedImageRef(ref string) string { return ref } -func (c *DockerConfigurator) getVersionFromTag(browserName string, tag string) string { - if c.VNC { - return strings.TrimPrefix(tag, browserName+"_") - } - return tag -} - // JSONMessage defines a message struct from docker. type JSONMessage struct { Status string `json:"status,omitempty"` diff --git a/selenoid/docker_test.go b/selenoid/docker_test.go index 4c441a1..7729090 100644 --- a/selenoid/docker_test.go +++ b/selenoid/docker_test.go @@ -92,6 +92,20 @@ func mux() http.Handler { }, )) + mux.HandleFunc("/v2/selenoid/android/tags/list", http.HandlerFunc( + func(w http.ResponseWriter, r *http.Request) { + w.Header().Add("Content-Type", "application/json") + fmt.Fprintln(w, `{"name":"android", "tags": ["10.0"]}`) + }, + )) + + mux.HandleFunc("/v2/browsers/edge/tags/list", http.HandlerFunc( + func(w http.ResponseWriter, r *http.Request) { + w.Header().Add("Content-Type", "application/json") + fmt.Fprintln(w, `{"name":"edge", "tags": ["88.0"]}`) + }, + )) + //Docker API mock mux.HandleFunc("/v1.29/version", http.HandlerFunc( func(w http.ResponseWriter, r *http.Request) { @@ -306,7 +320,7 @@ func testConfigure(t *testing.T, download bool) { LastVersions: 2, Tmpfs: 512, ShmSize: 256, - Browsers: "firefox:>45.0;opera", + Browsers: "firefox:>45.0;opera;android;MicrosoftEdge", Args: "-limit 42", VNC: true, Env: testEnv, @@ -321,7 +335,7 @@ func testConfigure(t *testing.T, download bool) { AssertThat(t, cfgPointer, Is{Not{nil}}) cfg := *cfgPointer - AssertThat(t, len(cfg), EqualTo{2}) + AssertThat(t, len(cfg), EqualTo{4}) firefoxVersions, hasFirefoxKey := cfg["firefox"] AssertThat(t, hasFirefoxKey, Is{true}) @@ -332,7 +346,7 @@ func testConfigure(t *testing.T, download bool) { correctFFBrowsers := make(map[string]*config.Browser) correctFFBrowsers["46.0"] = &config.Browser{ - Image: c.getFullyQualifiedImageRef("selenoid/vnc_firefox:46.0"), + Image: c.getFullyQualifiedImageRef("selenoid/firefox:46.0"), Port: "4444", Path: "/wd/hub", Tmpfs: tmpfsMap, @@ -351,7 +365,7 @@ func testConfigure(t *testing.T, download bool) { correctOperaBrowsers := make(map[string]*config.Browser) correctOperaBrowsers["44.0"] = &config.Browser{ - Image: c.getFullyQualifiedImageRef("selenoid/vnc_opera:44.0"), + Image: c.getFullyQualifiedImageRef("selenoid/opera:44.0"), Port: "4444", Path: "/", Tmpfs: tmpfsMap, @@ -362,6 +376,43 @@ func testConfigure(t *testing.T, download bool) { Default: "44.0", Versions: correctOperaBrowsers, }}) + + androidVersions, hasAndroidKey := cfg["android"] + AssertThat(t, hasAndroidKey, Is{true}) + AssertThat(t, androidVersions, Is{Not{nil}}) + + correctAndroidBrowsers := make(map[string]*config.Browser) + correctAndroidBrowsers["10.0"] = &config.Browser{ + Image: c.getFullyQualifiedImageRef("selenoid/android:10.0"), + Port: "4444", + Path: "/wd/hub", + Tmpfs: tmpfsMap, + ShmSize: 268435456, + Env: []string{testEnv}, + } + AssertThat(t, androidVersions, EqualTo{config.Versions{ + Default: "10.0", + Versions: correctAndroidBrowsers, + }}) + + edgeVersions, hasEdgeKey := cfg["MicrosoftEdge"] + AssertThat(t, hasEdgeKey, Is{true}) + AssertThat(t, edgeVersions, Is{Not{nil}}) + + correctEdgeBrowsers := make(map[string]*config.Browser) + correctEdgeBrowsers["88.0"] = &config.Browser{ + Image: c.getFullyQualifiedImageRef("browsers/edge:88.0"), + Port: "4444", + Path: "/", + Tmpfs: tmpfsMap, + ShmSize: 268435456, + Env: []string{testEnv}, + } + AssertThat(t, edgeVersions, EqualTo{config.Versions{ + Default: "88.0", + Versions: correctEdgeBrowsers, + }}) + }) }