Skip to content

Commit ae5d163

Browse files
authored
Merge pull request #4003 from arimu1/fix/3995-server-init-after-options
fix(server): call server.init after setting server options
2 parents 7605c08 + f8c8510 commit ae5d163

5 files changed

Lines changed: 69 additions & 6 deletions

File tree

‎jooby/src/main/java/io/jooby/Jooby.java‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,9 +131,6 @@ public Jooby() {
131131
} else {
132132
copyState(owner, this);
133133
}
134-
if (BOOT_SERVER != null) {
135-
BOOT_SERVER.init(this);
136-
}
137134
}
138135

139136
@Override
@@ -1242,6 +1239,9 @@ public static void runApp(
12421239
if (server.getOptions().defaults && appServerOptions != null) {
12431240
server.setOptions(appServerOptions);
12441241
}
1242+
for (var app : apps) {
1243+
server.init(app);
1244+
}
12451245
targetServer.start(apps.toArray(new Jooby[0]));
12461246
} catch (Throwable startupError) {
12471247
try {
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/*
2+
* Jooby https://jooby.io
3+
* Apache License Version 2.0 https://jooby.io/LICENSE.txt
4+
* Copyright 2014 Edgar Espina
5+
*/
6+
package io.jooby;
7+
8+
import static org.junit.jupiter.api.Assertions.assertEquals;
9+
import static org.junit.jupiter.api.Assertions.assertSame;
10+
11+
import org.junit.jupiter.api.Test;
12+
13+
import io.jooby.output.OutputFactory;
14+
15+
class Issue3995 {
16+
17+
private static class TestServer extends Server.Base {
18+
@Override
19+
public String getName() {
20+
return "test-server";
21+
}
22+
23+
@Override
24+
public OutputFactory getOutputFactory() {
25+
return OutputFactory.create();
26+
}
27+
28+
@Override
29+
public Server start(Jooby... application) {
30+
return this;
31+
}
32+
33+
@Override
34+
public Server stop() {
35+
return this;
36+
}
37+
}
38+
39+
@Test
40+
void serverInitMustRunAfterFinalServerOptionsAreSet() {
41+
var server = new TestServer();
42+
var configured = new ServerOptions().setPort(3995);
43+
44+
Jooby app = Jooby.createApp(server, ExecutionMode.DEFAULT, () -> new Jooby() {});
45+
46+
server.setOptions(configured);
47+
server.init(app);
48+
49+
var registryOptions = app.getServices().require(ServerOptions.class);
50+
assertSame(configured, registryOptions);
51+
assertEquals(3995, registryOptions.getPort());
52+
assertEquals("test-server", registryOptions.getServer());
53+
}
54+
}

‎jooby/src/test/java/io/jooby/JoobyRunnerTest.java‎

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.junit.jupiter.api.BeforeEach;
1717
import org.junit.jupiter.api.DisplayName;
1818
import org.junit.jupiter.api.Test;
19+
import org.mockito.InOrder;
1920
import org.mockito.MockedStatic;
2021
import org.mockito.Mockito;
2122

@@ -93,8 +94,11 @@ void testRunApp_MultipleApps_MutedServer_DefaultsTrue() {
9394

9495
// Verification
9596
// Defaults was true, so server.setOptions should be called with appOptions
96-
verify(server).setOptions(appOptions);
97-
verify(mutedServer).start(new Jooby[] {app1, app2});
97+
InOrder inOrder = inOrder(server, mutedServer);
98+
inOrder.verify(server).setOptions(appOptions);
99+
inOrder.verify(server).init(app1);
100+
inOrder.verify(server).init(app2);
101+
inOrder.verify(mutedServer).start(new Jooby[] {app1, app2});
98102
}
99103

100104
@Test
@@ -124,7 +128,9 @@ void testRunApp_SingleApp_NormalServer_DefaultsFalse() {
124128

125129
// Verification
126130
verify(server, never()).setOptions(any()); // Because defaults == false
127-
verify(server).start(new Jooby[] {app1});
131+
InOrder inOrder = inOrder(server);
132+
inOrder.verify(server).init(app1);
133+
inOrder.verify(server).start(new Jooby[] {app1});
128134
}
129135

130136
@DisplayName("Test Exception: StartupException thrown, stop throws ignored exception")

‎modules/jooby-test/src/main/java/io/jooby/test/JoobyExtension.java‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ private Jooby startApp(ExtensionContext context, JoobyTest metadata) throws Exce
7777
var defaultEnv = System.getProperty("application.env");
7878
System.setProperty("application.env", metadata.environment());
7979
app = Jooby.createApp(server, metadata.executionMode(), reflectionProvider(metadata.value()));
80+
server.init(app);
8081
server.start(app);
8182
if (defaultEnv != null) {
8283
System.setProperty("application.env", defaultEnv);
@@ -85,6 +86,7 @@ private Jooby startApp(ExtensionContext context, JoobyTest metadata) throws Exce
8586
}
8687
} else {
8788
app = fromFactoryMethod(context, metadata, factoryMethod);
89+
server.init(app);
8890
server.start(app);
8991
}
9092
ExtensionContext.Store store = getStore(context);

‎tests/src/test/java/io/jooby/junit/ServerTestRunner.java‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ public void ready(SneakyThrows.Consumer2<WebClient, WebClient> onReady) {
106106
if (options.isSSLEnabled()) {
107107
options.setSecurePort(0);
108108
}
109+
server.init(app);
109110
WebClient https = null;
110111
try {
111112
MutedServer.mute(server).start(app);

0 commit comments

Comments
 (0)