@@ -6,6 +6,7 @@ var temp = require('temp').track();
6
6
var colors = require ( 'colors' ) ;
7
7
var semver = require ( 'semver' ) ;
8
8
var childProcess = require ( 'child_process' ) ;
9
+ var net = require ( 'net' ) ;
9
10
var seleniumInit = require ( './selenium-init' ) ;
10
11
var createServer = require ( './server' ) ;
11
12
var webPush = require ( '../index.js' ) ;
@@ -24,6 +25,30 @@ if (!process.env.VAPID_PRIVATE_KEY || !process.env.VAPID_PUBLIC_KEY) {
24
25
25
26
process . env . PATH = process . env . PATH + ':test_tools/' ;
26
27
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
+
27
52
suite ( 'selenium' , function ( ) {
28
53
var webdriver = require ( 'selenium-webdriver' ) ;
29
54
var firefox = require ( 'selenium-webdriver/firefox' ) ;
@@ -140,6 +165,8 @@ suite('selenium', function() {
140
165
141
166
promises . push ( seleniumInit . downloadFirefoxNightly ( ) ) ;
142
167
168
+ promises . push ( seleniumInit . downloadSeleniumServer ( ) ) ;
169
+
143
170
if ( process . env . GCM_API_KEY ) {
144
171
if ( process . platform === 'linux' ) {
145
172
chromeBinaryPath = 'test_tools/chrome-linux/chrome' ;
@@ -178,6 +205,29 @@ suite('selenium', function() {
178
205
console . log ( 'Using Chromium: ' + chromeBinaryPath ) ;
179
206
console . log ( 'Version: ' + childProcess . execSync ( chromeBinaryPath + ' --version' ) . toString ( ) . replace ( '\n' , '' ) ) ;
180
207
} 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
+ } )
181
231
} ) ;
182
232
} ) ;
183
233
0 commit comments