Skip to content

Commit e6f2e39

Browse files
committed
Automatically download and execute Selenium server when running tests
1 parent 08e501e commit e6f2e39

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

test/testSelenium.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ var temp = require('temp').track();
66
var colors = require('colors');
77
var semver = require('semver');
88
var childProcess = require('child_process');
9+
var net = require('net');
910
var seleniumInit = require('./selenium-init');
1011
var createServer = require('./server');
1112
var webPush = require('../index.js');
@@ -24,6 +25,30 @@ if (!process.env.VAPID_PRIVATE_KEY || !process.env.VAPID_PUBLIC_KEY) {
2425

2526
process.env.PATH = process.env.PATH + ':test_tools/';
2627

28+
function isPortOpen(port) {
29+
return new Promise(function(resolve, reject) {
30+
var tester = net.createServer();
31+
32+
tester.once('error', function(err) {
33+
if (err.code !== 'EADDRINUSE') {
34+
reject(err);
35+
} else {
36+
resolve(true);
37+
}
38+
});
39+
40+
tester.once('listening', function() {
41+
tester.once('close', function() {
42+
resolve(false);
43+
});
44+
45+
tester.close();
46+
});
47+
48+
tester.listen(port);
49+
});
50+
}
51+
2752
suite('selenium', function() {
2853
var webdriver = require('selenium-webdriver');
2954
var firefox = require('selenium-webdriver/firefox');
@@ -140,6 +165,8 @@ suite('selenium', function() {
140165

141166
promises.push(seleniumInit.downloadFirefoxNightly());
142167

168+
promises.push(seleniumInit.downloadSeleniumServer());
169+
143170
if (process.env.GCM_API_KEY) {
144171
if (process.platform === 'linux') {
145172
chromeBinaryPath = 'test_tools/chrome-linux/chrome';
@@ -178,6 +205,29 @@ suite('selenium', function() {
178205
console.log('Using Chromium: ' + chromeBinaryPath);
179206
console.log('Version: ' + childProcess.execSync(chromeBinaryPath + ' --version').toString().replace('\n', ''));
180207
} catch (e) {}
208+
209+
if (!fs.existsSync('test_tools/selenium-server-standalone-2.53.0.jar')) {
210+
throw new Error('Selenium server doesn\'t exist.');
211+
}
212+
213+
childProcess.exec('java -jar test_tools/selenium-server-standalone-2.53.0.jar');
214+
215+
// Return a promise that resolved once the Selenium server is listening to the port 4444.
216+
return new Promise(function(resolve, reject) {
217+
var timerID = setInterval(function() {
218+
isPortOpen(4444)
219+
.then(function(isOpen) {
220+
if (isOpen) {
221+
clearInterval(timerID);
222+
resolve();
223+
}
224+
})
225+
.catch(function() {
226+
clearInterval(timerID);
227+
reject();
228+
});
229+
}, 1000);
230+
})
181231
});
182232
});
183233

0 commit comments

Comments
 (0)