Skip to content

Commit a3356c5

Browse files
ijjktimneutkens
authored andcommitted
Try restarting chromedriver on timeout (vercel#6566)
Also added `HEADLESS` env var for local testing
1 parent 17806e2 commit a3356c5

File tree

6 files changed

+76
-19
lines changed

6 files changed

+76
-19
lines changed

.travis.yml

+3
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
packages: ["google-chrome-stable"]
88
}
99
},
10+
env: {
11+
HEADLESS: 'false'
12+
},
1013
language: "node_js",
1114
node_js: ["8", "10"],
1215
cache: {

package.json

+3-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
"testonly": "jest",
1111
"testall": "yarn check && yarn run testonly -- --coverage --forceExit --runInBand --reporters=default --reporters=jest-junit",
1212
"pretest": "yarn run lint",
13-
"test": "yarn run testall || yarn run testall",
13+
"test-take2": "git clean -d -x -e node_modules -e packages -f && yarn testall",
14+
"test": "yarn run testall || yarn run test-take2",
1415
"coveralls": "cat ./test/coverage/lcov.info | coveralls",
1516
"lint": "lerna run typescript && standard && standard --parser typescript-eslint-parser --plugin typescript packages/**/*.ts",
1617
"lint-fix": "standard --fix && standard --fix --parser typescript-eslint-parser --plugin typescript packages/**/*.ts",
@@ -67,7 +68,7 @@
6768
"babel-eslint": "9.0.0",
6869
"babel-jest": "23.6.0",
6970
"cheerio": "0.22.0",
70-
"chromedriver": "2.42.0",
71+
"chromedriver": "2.46.0",
7172
"clone": "2.1.1",
7273
"coveralls": "3.0.2",
7374
"cross-spawn": "6.0.5",

test/integration/with-router/test/index.test.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/* eslint-env jest */
22
/* global jasmine */
33
import { join } from 'path'
4+
import webdriver from 'next-webdriver'
45
import {
56
getReactErrorOverlayContent,
67
nextServer,
@@ -11,14 +12,14 @@ import {
1112
startApp,
1213
stopApp
1314
} from 'next-test-utils'
14-
import webdriver from 'next-webdriver'
15+
16+
jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000 * 60 * 5
1517

1618
describe('withRouter', () => {
1719
const appDir = join(__dirname, '../')
1820
let appPort
1921
let server
2022
let app
21-
jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000 * 60 * 5
2223

2324
beforeAll(async () => {
2425
await nextBuild(appDir)

test/lib/next-webdriver.js

+28-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
import wd from 'wd'
2+
import getPort from 'get-port'
3+
import waitPort from 'wait-port'
4+
5+
const doHeadless = process.env.HEADLESS !== 'false'
6+
let driverPort = 9515
27

38
export default async function (appPort, pathname) {
49
if (typeof appPort === 'undefined') {
@@ -17,6 +22,22 @@ export default async function (appPort, pathname) {
1722
return browser
1823
} catch (ex) {
1924
console.warn(`> Error when loading browser with url: ${url}`)
25+
26+
// Try restarting chromedriver max twice
27+
if (lc < 2) {
28+
const chromedriver = require('chromedriver')
29+
console.log('Trying to restart chromedriver with random port')
30+
driverPort = await getPort()
31+
chromedriver.stop()
32+
chromedriver.start([`--port=${driverPort}`])
33+
// https://github.com/giggio/node-chromedriver/issues/117
34+
await waitPort({
35+
port: driverPort,
36+
timeout: 1000 * 30 // 30 seconds
37+
})
38+
continue
39+
}
40+
2041
if (ex.message === 'TIMEOUT') continue
2142
throw ex
2243
}
@@ -27,7 +48,7 @@ export default async function (appPort, pathname) {
2748
}
2849

2950
function getBrowser (url, timeout) {
30-
const browser = wd.promiseChainRemote('http://localhost:9515/')
51+
const browser = wd.promiseChainRemote(`http://localhost:${driverPort}/`)
3152

3253
return new Promise((resolve, reject) => {
3354
let timeouted = false
@@ -37,7 +58,12 @@ function getBrowser (url, timeout) {
3758
reject(error)
3859
}, timeout)
3960

40-
browser.init({ browserName: 'chrome' }).get(url, err => {
61+
browser.init({
62+
browserName: 'chrome',
63+
...(doHeadless ? {
64+
chromeOptions: { args: ['--headless'] }
65+
} : {})
66+
}).get(url, err => {
4167
if (timeouted) {
4268
try {
4369
browser.close(() => {

test/unit/recursive-readdir.test.js

+2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
/* eslint-env jest */
2+
/* global jasmine */
23
import { recursiveReadDir } from 'next/dist/lib/recursive-readdir'
34
import { join } from 'path'
45

56
const resolveDataDir = join(__dirname, '..', 'isolated', '_resolvedata')
67
const dirWithPages = join(resolveDataDir, 'readdir', 'pages')
8+
jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000 * 60 * 5
79

810
describe('recursiveReadDir', () => {
911
it('should work', async () => {

yarn.lock

+37-13
Original file line numberDiff line numberDiff line change
@@ -3278,16 +3278,16 @@ chrome-trace-event@^1.0.0:
32783278
dependencies:
32793279
tslib "^1.9.0"
32803280

3281-
chromedriver@2.42.0:
3282-
version "2.42.0"
3283-
resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-2.42.0.tgz#49d8d314389e76e143a54451b85a8ddfcb1c6128"
3284-
integrity sha512-ypW3O2rjLCVQYf73ONFsLRArazecL3kj3dAHXPPF3vF5dGyi4NNerA1Hy3fctIvINRs9Ljo3N4l00S0UxiEOlQ==
3281+
chromedriver@2.46.0:
3282+
version "2.46.0"
3283+
resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-2.46.0.tgz#3d78e7eb9bb65dd804fe327a6bf76fced12be053"
3284+
integrity sha512-dLtKIJW3y/PuFrPmcw6Mb8Nh+HwSqgVrK1rWgTARXhHfWvV822X2VRkx2meU/tg2+YQL6/nNgT6n5qWwIDHbwg==
32853285
dependencies:
32863286
del "^3.0.0"
32873287
extract-zip "^1.6.7"
3288-
kew "^0.7.0"
32893288
mkdirp "^0.5.1"
3290-
request "^2.87.0"
3289+
request "^2.88.0"
3290+
tcp-port-used "^1.0.1"
32913291

32923292
ci-info@^1.5.0:
32933293
version "1.6.0"
@@ -4182,6 +4182,13 @@ [email protected]:
41824182
dependencies:
41834183
ms "2.0.0"
41844184

4185+
4186+
version "4.1.0"
4187+
resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.0.tgz#373687bffa678b38b1cd91f861b63850035ddc87"
4188+
integrity sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==
4189+
dependencies:
4190+
ms "^2.1.1"
4191+
41854192
debug@^3.1.0:
41864193
version "3.2.6"
41874194
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
@@ -4241,7 +4248,7 @@ deep-extend@^0.6.0:
42414248
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
42424249
integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
42434250

4244-
deep-is@~0.1.3:
4251+
deep-is@^0.1.3, deep-is@~0.1.3:
42454252
version "0.1.3"
42464253
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
42474254
integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
@@ -6820,6 +6827,11 @@ is-upper-case@^1.1.0:
68206827
dependencies:
68216828
upper-case "^1.1.0"
68226829

6830+
is-url@^1.2.2:
6831+
version "1.2.4"
6832+
resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52"
6833+
integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==
6834+
68236835
is-utf8@^0.2.0:
68246836
version "0.2.1"
68256837
resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
@@ -6850,6 +6862,15 @@ is-wsl@^1.1.0:
68506862
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
68516863
integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
68526864

6865+
6866+
version "2.0.1"
6867+
resolved "https://registry.yarnpkg.com/is2/-/is2-2.0.1.tgz#8ac355644840921ce435d94f05d3a94634d3481a"
6868+
integrity sha512-+WaJvnaA7aJySz2q/8sLjMb2Mw14KTplHmSwcSpZ/fWJPkUmqw3YTzSWbPJ7OAwRvdYTWF2Wg+yYJ1AdP5Z8CA==
6869+
dependencies:
6870+
deep-is "^0.1.3"
6871+
ip-regex "^2.1.0"
6872+
is-url "^1.2.2"
6873+
68536874
68546875
version "0.0.1"
68556876
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
@@ -7464,11 +7485,6 @@ junk@^1.0.1:
74647485
resolved "https://registry.yarnpkg.com/junk/-/junk-1.0.3.tgz#87be63488649cbdca6f53ab39bec9ccd2347f592"
74657486
integrity sha1-h75jSIZJy9ym9Tqzm+yczSNH9ZI=
74667487

7467-
kew@^0.7.0:
7468-
version "0.7.0"
7469-
resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b"
7470-
integrity sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=
7471-
74727488
kind-of@^2.0.1:
74737489
version "2.0.1"
74747490
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-2.0.1.tgz#018ec7a4ce7e3a86cb9141be519d24c8faa981b5"
@@ -10663,7 +10679,7 @@ [email protected]:
1066310679
tunnel-agent "^0.6.0"
1066410680
uuid "^3.1.0"
1066510681

10666-
request@^2.85.0, request@^2.87.0:
10682+
request@^2.85.0, request@^2.87.0, request@^2.88.0:
1066710683
version "2.88.0"
1066810684
resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
1066910685
integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==
@@ -11820,6 +11836,14 @@ [email protected]:
1182011836
mri "^1.1.0"
1182111837
tinydate "^1.0.0"
1182211838

11839+
tcp-port-used@^1.0.1:
11840+
version "1.0.1"
11841+
resolved "https://registry.yarnpkg.com/tcp-port-used/-/tcp-port-used-1.0.1.tgz#46061078e2d38c73979a2c2c12b5a674e6689d70"
11842+
integrity sha512-rwi5xJeU6utXoEIiMvVBMc9eJ2/ofzB+7nLOdnZuFTmNCLqRiQh2sMG9MqCxHU/69VC/Fwp5dV9306Qd54ll1Q==
11843+
dependencies:
11844+
debug "4.1.0"
11845+
is2 "2.0.1"
11846+
1182311847
temp-dir@^1.0.0:
1182411848
version "1.0.0"
1182511849
resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d"

0 commit comments

Comments
 (0)