UNPKG

2.57 kBJavaScriptView Raw
1/*
2 * Copyright (c) 2015, Groupon, Inc.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * Redistributions of source code must retain the above copyright notice,
10 * this list of conditions and the following disclaimer.
11 *
12 * Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * Neither the name of GROUPON nor the names of its contributors may be
17 * used to endorse or promote products derived from this software without
18 * specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
21 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
23 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
26 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 */
32
33'use strict';
34
35const path = require('path');
36
37const Bluebird = require('bluebird');
38const _ = require('lodash');
39const subprocess = require('./subprocess');
40const debug = require('debug')('testium-core:spawn-server');
41
42function spawnServer(config, servers) {
43 const root = config.get('root');
44 const logDirectory = config.get('logDirectory', './test/log');
45
46 function resolveLogFile(name) {
47 return path.resolve(root, logDirectory, `${name}.log`);
48 }
49
50 function addDefaults(name, options) {
51 return _.extend(
52 {
53 logFilePath: resolveLogFile(name),
54 },
55 options
56 );
57 }
58
59 if (!Array.isArray(servers)) {
60 servers = [servers];
61 }
62
63 const optionsByName = servers.reduce((out, server) => {
64 debug('Preparing %s for launch', server.name);
65 out[server.name] = Bluebird.try(server.getOptions, [config]).then(
66 _.partial(addDefaults, server.name)
67 );
68 return out;
69 }, {});
70
71 return Bluebird.props(optionsByName).then(subprocess);
72}
73module.exports = spawnServer;