Skip to content

Commit 3638ed7

Browse files
committed
[FEATURE] Add server settings
A project configuration can now define a default port for each HTTP and HTTPS server. Example: server: settings: httpPort: 1337 httpsPort: 1443
1 parent 0216d5d commit 3638ed7

File tree

2 files changed

+124
-2
lines changed

2 files changed

+124
-2
lines changed

lib/cli/commands/serve.js

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,29 @@ serve.handler = function(argv) {
6363
translatorName: argv.translator,
6464
configPath: argv.config
6565
}).then(function(tree) {
66+
let port = argv.port;
67+
let changePortIfInUse = false;
68+
69+
if (!port && tree.server && tree.server.settings) {
70+
if (argv.h2) {
71+
port = tree.server.settings.httpsPort;
72+
} else {
73+
port = tree.server.settings.httpPort;
74+
}
75+
}
76+
77+
if (!port) {
78+
changePortIfInUse = true; // only change if port isn't explicitly set
79+
if (argv.h2) {
80+
port = 8443;
81+
} else {
82+
port = 8080;
83+
}
84+
}
85+
6686
const serverConfig = {
67-
port: argv.port === undefined ? argv.h2 ? 8443 : 8080 : argv.port,
68-
changePortIfInUse: argv.port === undefined, // only change if port isn't explicitly set
87+
port,
88+
changePortIfInUse,
6989
h2: argv.h2,
7090
acceptRemoteConnections: !!argv.acceptRemoteConnections,
7191
cert: argv.h2 ? argv.cert : undefined,

test/lib/cli/commands/serve.js

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,3 +213,105 @@ test.serial("ui5 serve --sap-csp-policies", async (t) => {
213213
sendSAPTargetCSP: true
214214
}, "Starting server with specific server config");
215215
});
216+
217+
test.serial("ui5 serve with ui5.yaml port setting", async (t) => {
218+
const projectTree = {
219+
metadata: {
220+
name: "Sample"
221+
},
222+
server: {
223+
settings: {
224+
httpPort: 1337
225+
}
226+
}
227+
};
228+
normalizerStub.resolves(projectTree);
229+
serverStub.resolves({h2: false, port: 1});
230+
// loads project tree using http 2
231+
const pPrepareServerConfig = await serve.handler(defaultInitialHandlerArgs);
232+
// preprocess project config, skipping cert load
233+
const pServeServer = await pPrepareServerConfig;
234+
// serve server using config
235+
await pServeServer;
236+
237+
const injectedProjectTree = serverStub.getCall(0).args[0];
238+
const injectedServerConfig = serverStub.getCall(0).args[1];
239+
240+
t.deepEqual(injectedProjectTree, projectTree, "Starting server with given project tree");
241+
t.deepEqual(injectedServerConfig.port, 1337, "http port setting from project tree was used");
242+
t.deepEqual(injectedServerConfig.changePortIfInUse, false, "changePortIfInUse is set to false");
243+
});
244+
245+
test.serial("ui5 serve --h2 with ui5.yaml port setting", async (t) => {
246+
const projectTree = {
247+
metadata: {
248+
name: "Sample"
249+
},
250+
server: {
251+
settings: {
252+
httpsPort: 1443
253+
}
254+
}
255+
};
256+
normalizerStub.resolves(projectTree);
257+
serverStub.resolves({h2: true, port: 1});
258+
sslUtilStub.resolves({
259+
key: "randombyte-likes-ponies-key",
260+
cert: "randombyte-likes-ponies-cert"
261+
});
262+
263+
// loads project tree using http 2
264+
const pPrepareServerConfig = await serve.handler(Object.assign({}, defaultInitialHandlerArgs, {h2: true}));
265+
// preprocess project config
266+
const pFetchSSLCert = await pPrepareServerConfig;
267+
// Fetching ssl certificate
268+
const pServeServer = await pFetchSSLCert;
269+
// serve server using config
270+
await pServeServer;
271+
272+
const injectedProjectTree = serverStub.getCall(0).args[0];
273+
const injectedServerConfig = serverStub.getCall(0).args[1];
274+
275+
t.deepEqual(injectedProjectTree, projectTree, "Starting server with given project tree");
276+
t.deepEqual(injectedServerConfig.port, 1443, "https port setting from project tree was used");
277+
t.deepEqual(injectedServerConfig.changePortIfInUse, false, "changePortIfInUse is set to false");
278+
});
279+
280+
test.serial("ui5 serve --h2 with ui5.yaml port setting and port CLI argument", async (t) => {
281+
const projectTree = {
282+
metadata: {
283+
name: "Sample"
284+
},
285+
server: {
286+
settings: {
287+
httpPort: 1337,
288+
httpsPort: 1443
289+
}
290+
}
291+
};
292+
normalizerStub.resolves(projectTree);
293+
serverStub.resolves({h2: true, port: 1});
294+
sslUtilStub.resolves({
295+
key: "randombyte-likes-ponies-key",
296+
cert: "randombyte-likes-ponies-cert"
297+
});
298+
299+
// loads project tree using http 2
300+
const pPrepareServerConfig = await serve.handler(Object.assign({}, defaultInitialHandlerArgs, {
301+
h2: true,
302+
port: 5555
303+
}));
304+
// preprocess project config
305+
const pFetchSSLCert = await pPrepareServerConfig;
306+
// Fetching ssl certificate
307+
const pServeServer = await pFetchSSLCert;
308+
// serve server using config
309+
await pServeServer;
310+
311+
const injectedProjectTree = serverStub.getCall(0).args[0];
312+
const injectedServerConfig = serverStub.getCall(0).args[1];
313+
314+
t.deepEqual(injectedProjectTree, projectTree, "Starting server with given project tree");
315+
t.deepEqual(injectedServerConfig.port, 5555, "https port setting from CLI argument was used");
316+
t.deepEqual(injectedServerConfig.changePortIfInUse, false, "changePortIfInUse is set to false");
317+
});

0 commit comments

Comments
 (0)