You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.3 KiB
82 lines
2.3 KiB
// Copyright 2013 Selenium committers
|
|
// Copyright 2013 Software Freedom Conservancy
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
'use strict';
|
|
|
|
var assert = require('assert'),
|
|
fs = require('fs'),
|
|
util = require('util');
|
|
|
|
var promise = require('../..').promise,
|
|
isDevMode = require('../../_base').isDevMode(),
|
|
RemoteServer = require('../../remote').SeleniumServer,
|
|
build = require('./build');
|
|
|
|
|
|
var DEV_MODE_JAR_PATH =
|
|
'build/java/server/src/org/openqa/grid/selenium/selenium-standalone.jar';
|
|
var SELENIUM_SERVER_JAR_ENV = 'SELENIUM_SERVER_JAR';
|
|
var PROD_MODE_JAR_PATH = process.env[SELENIUM_SERVER_JAR_ENV];
|
|
|
|
|
|
function buildServer() {
|
|
if (process.env.SKIP_BUILD) {
|
|
return promise.fulfilled();
|
|
}
|
|
return build.of('selenium-server-standalone').onlyOnce().go();
|
|
}
|
|
|
|
|
|
function getProdModeJarPath() {
|
|
assert.ok(!!PROD_MODE_JAR_PATH,
|
|
'You must specify the Selenium server jar to use with the ' +
|
|
SELENIUM_SERVER_JAR_ENV + ' environment variable');
|
|
assert.ok(fs.existsSync(PROD_MODE_JAR_PATH),
|
|
SELENIUM_SERVER_JAR_ENV + ' does not exist: ' + PROD_MODE_JAR_PATH);
|
|
return PROD_MODE_JAR_PATH;
|
|
}
|
|
|
|
|
|
/**
|
|
* Manages the life and death of a Selenium server built in the current client.
|
|
* @throws {Error} If not running dev mode and the Selenium server cannot be
|
|
* found on the PATH.
|
|
* @constructor
|
|
* @extends {RemoteServer}
|
|
*/
|
|
function Server() {
|
|
var jarPath = isDevMode ? DEV_MODE_JAR_PATH : getProdModeJarPath();
|
|
RemoteServer.call(this, jarPath, {
|
|
port: 0
|
|
});
|
|
}
|
|
util.inherits(Server, RemoteServer);
|
|
|
|
|
|
/** @override */
|
|
Server.prototype.start = function(opt_timeout) {
|
|
var startServer = RemoteServer.prototype.start.bind(this, opt_timeout);
|
|
if (isDevMode) {
|
|
return buildServer().then(startServer);
|
|
}
|
|
return startServer();
|
|
};
|
|
|
|
|
|
// PUBLIC API
|
|
|
|
|
|
exports.Server = Server;
|