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 | ;
|
34 |
|
35 | const path = require('path');
|
36 |
|
37 | const Bluebird = require('bluebird');
|
38 | const _ = require('lodash');
|
39 | const subprocess = require('./subprocess');
|
40 | const debug = require('debug')('testium-core:spawn-server');
|
41 |
|
42 | function 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 | }
|
73 | module.exports = spawnServer;
|