Skip to content

Commit

Permalink
[FEATURE] Add server settings
Browse files Browse the repository at this point in the history
A project configuration can now define a default port for each HTTP and
HTTPS server.

Example:

server:
  settings:
    httpPort: 1337
    httpsPort: 1443
  • Loading branch information
RandomByte committed Sep 19, 2019
1 parent 0216d5d commit 3638ed7
Show file tree
Hide file tree
Showing 2 changed files with 124 additions and 2 deletions.
24 changes: 22 additions & 2 deletions lib/cli/commands/serve.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,29 @@ serve.handler = function(argv) {
translatorName: argv.translator,
configPath: argv.config
}).then(function(tree) {
let port = argv.port;
let changePortIfInUse = false;

if (!port && tree.server && tree.server.settings) {
if (argv.h2) {
port = tree.server.settings.httpsPort;
} else {
port = tree.server.settings.httpPort;
}
}

if (!port) {
changePortIfInUse = true; // only change if port isn't explicitly set
if (argv.h2) {
port = 8443;
} else {
port = 8080;
}
}

const serverConfig = {
port: argv.port === undefined ? argv.h2 ? 8443 : 8080 : argv.port,
changePortIfInUse: argv.port === undefined, // only change if port isn't explicitly set
port,
changePortIfInUse,
h2: argv.h2,
acceptRemoteConnections: !!argv.acceptRemoteConnections,
cert: argv.h2 ? argv.cert : undefined,
Expand Down
102 changes: 102 additions & 0 deletions test/lib/cli/commands/serve.js
Original file line number Diff line number Diff line change
Expand Up @@ -213,3 +213,105 @@ test.serial("ui5 serve --sap-csp-policies", async (t) => {
sendSAPTargetCSP: true
}, "Starting server with specific server config");
});

test.serial("ui5 serve with ui5.yaml port setting", async (t) => {
const projectTree = {
metadata: {
name: "Sample"
},
server: {
settings: {
httpPort: 1337
}
}
};
normalizerStub.resolves(projectTree);
serverStub.resolves({h2: false, port: 1});
// loads project tree using http 2
const pPrepareServerConfig = await serve.handler(defaultInitialHandlerArgs);
// preprocess project config, skipping cert load
const pServeServer = await pPrepareServerConfig;
// serve server using config
await pServeServer;

const injectedProjectTree = serverStub.getCall(0).args[0];
const injectedServerConfig = serverStub.getCall(0).args[1];

t.deepEqual(injectedProjectTree, projectTree, "Starting server with given project tree");
t.deepEqual(injectedServerConfig.port, 1337, "http port setting from project tree was used");
t.deepEqual(injectedServerConfig.changePortIfInUse, false, "changePortIfInUse is set to false");
});

test.serial("ui5 serve --h2 with ui5.yaml port setting", async (t) => {
const projectTree = {
metadata: {
name: "Sample"
},
server: {
settings: {
httpsPort: 1443
}
}
};
normalizerStub.resolves(projectTree);
serverStub.resolves({h2: true, port: 1});
sslUtilStub.resolves({
key: "randombyte-likes-ponies-key",
cert: "randombyte-likes-ponies-cert"
});

// loads project tree using http 2
const pPrepareServerConfig = await serve.handler(Object.assign({}, defaultInitialHandlerArgs, {h2: true}));
// preprocess project config
const pFetchSSLCert = await pPrepareServerConfig;
// Fetching ssl certificate
const pServeServer = await pFetchSSLCert;
// serve server using config
await pServeServer;

const injectedProjectTree = serverStub.getCall(0).args[0];
const injectedServerConfig = serverStub.getCall(0).args[1];

t.deepEqual(injectedProjectTree, projectTree, "Starting server with given project tree");
t.deepEqual(injectedServerConfig.port, 1443, "https port setting from project tree was used");
t.deepEqual(injectedServerConfig.changePortIfInUse, false, "changePortIfInUse is set to false");
});

test.serial("ui5 serve --h2 with ui5.yaml port setting and port CLI argument", async (t) => {
const projectTree = {
metadata: {
name: "Sample"
},
server: {
settings: {
httpPort: 1337,
httpsPort: 1443
}
}
};
normalizerStub.resolves(projectTree);
serverStub.resolves({h2: true, port: 1});
sslUtilStub.resolves({
key: "randombyte-likes-ponies-key",
cert: "randombyte-likes-ponies-cert"
});

// loads project tree using http 2
const pPrepareServerConfig = await serve.handler(Object.assign({}, defaultInitialHandlerArgs, {
h2: true,
port: 5555
}));
// preprocess project config
const pFetchSSLCert = await pPrepareServerConfig;
// Fetching ssl certificate
const pServeServer = await pFetchSSLCert;
// serve server using config
await pServeServer;

const injectedProjectTree = serverStub.getCall(0).args[0];
const injectedServerConfig = serverStub.getCall(0).args[1];

t.deepEqual(injectedProjectTree, projectTree, "Starting server with given project tree");
t.deepEqual(injectedServerConfig.port, 5555, "https port setting from CLI argument was used");
t.deepEqual(injectedServerConfig.changePortIfInUse, false, "changePortIfInUse is set to false");
});

0 comments on commit 3638ed7

Please sign in to comment.