Skip to content
This repository was archived by the owner on Mar 3, 2026. It is now read-only.

Commit d532f2b

Browse files
committed
make web server plugable fix jooby-project#34
war support fix jooby-project#35 * unit test was updated it * servers setup and configuration is close to final
1 parent 8faf1cf commit d532f2b

File tree

81 files changed

+3380
-966
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

81 files changed

+3380
-966
lines changed

coverage-report/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
<source>${project.parent.basedir}/jooby-undertow/src/main/java</source>
4242
<source>${project.parent.basedir}/jooby-jetty/src/main/java</source>
4343
<source>${project.parent.basedir}/jooby-netty/src/main/java</source>
44+
<source>${project.parent.basedir}/jooby-servlet/src/main/java</source>
4445
</sources>
4546
</configuration>
4647
</execution>
@@ -57,6 +58,10 @@
5758
<source>${project.parent.basedir}/jooby-hbs/src/test/java</source>
5859
<source>${project.parent.basedir}/jooby-jackson/src/test/java</source>
5960
<source>${project.parent.basedir}/jooby-jdbc/src/test/java</source>
61+
<source>${project.parent.basedir}/jooby-undertow/src/test/java</source>
62+
<source>${project.parent.basedir}/jooby-jetty/src/test/java</source>
63+
<source>${project.parent.basedir}/jooby-netty/src/test/java</source>
64+
<source>${project.parent.basedir}/jooby-servlet/src/test/java</source>
6065
</sources>
6166
</configuration>
6267
</execution>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.jooby.integration;
2+
3+
import org.jooby.test.ServerFeature;
4+
import org.junit.Test;
5+
6+
public class ParamsFeature extends ServerFeature {
7+
8+
{
9+
post("/params", req -> req.params());
10+
}
11+
12+
@Test
13+
public void params() throws Exception {
14+
request()
15+
.post("/params?p1=1")
16+
.form()
17+
.add("p1", "2")
18+
.add("p2", "2")
19+
.expect("{p1=[1, 2], p2=2}");
20+
21+
}
22+
23+
}

coverage-report/src/test/java/org/jooby/integration/RequestLocalsFeature.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public void unset() throws Exception {
5151
public void attributes() throws Exception {
5252
request()
5353
.get("/locals/attributes")
54-
.expect("{contextPath=/, path=/locals/attributes, l1=v1}");
54+
.expect("{contextPath=, path=/locals/attributes, l1=v1}");
5555

5656
}
5757

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package org.jooby.integration;
2+
3+
import org.jooby.Upload;
4+
import org.jooby.test.ServerFeature;
5+
import org.junit.Test;
6+
7+
public class UploadHeadersFeature extends ServerFeature {
8+
9+
{
10+
post("/file", req -> {
11+
Upload upload = req.param("file").to(Upload.class);
12+
String encoding = upload.header("Content-Transfer-Encoding").stringValue();
13+
String type = upload.header("Content-Type").stringValue();
14+
String disposition = upload.header("Content-Disposition").stringValue();
15+
return encoding + ";" + type + ";" + disposition + ";"
16+
+ upload.header("noHeader").toOptional(String.class);
17+
});
18+
}
19+
20+
@Test
21+
public void headers() throws Exception {
22+
request()
23+
.post("/file")
24+
.multipart()
25+
.file("file", "<project></project>".getBytes(), "application/xml;charset=UTF-8", "pom.xml")
26+
.expect(
27+
"binary;application/xml; charset=UTF-8;form-data; name=\"file\"; filename=\"pom.xml\";Optional.empty");
28+
29+
}
30+
31+
}

coverage-report/src/test/java/org/jooby/integration/session/SessionConfigCookieFeature.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ public void cookieConfig() throws Exception {
5959
.splitToList(value)
6060
);
6161

62-
System.out.println(setCookie);
6362
assertTrue(setCookie.remove(0).startsWith("custom.sid"));
6463
assertTrue(setCookie.remove("Path=/session") || setCookie.remove("Path=\"/session\""));
6564
assertTrue(setCookie.remove("HttpOnly") || setCookie.remove("HTTPOnly"));
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package org.jooby.integration.ws;
2+
3+
import java.util.concurrent.CountDownLatch;
4+
5+
import org.jooby.Err;
6+
import org.jooby.Status;
7+
import org.jooby.test.ServerFeature;
8+
import org.junit.After;
9+
import org.junit.Before;
10+
import org.junit.Test;
11+
12+
import com.ning.http.client.AsyncHttpClient;
13+
import com.ning.http.client.AsyncHttpClientConfig;
14+
import com.ning.http.client.websocket.WebSocket;
15+
import com.ning.http.client.websocket.WebSocketListener;
16+
import com.ning.http.client.websocket.WebSocketUpgradeHandler;
17+
18+
public class OnBadRequestErrFeature extends ServerFeature {
19+
20+
{
21+
ws("/bad-data", ws -> {
22+
23+
throw new Err(Status.BAD_REQUEST);
24+
});
25+
26+
}
27+
28+
private AsyncHttpClient client;
29+
30+
@Before
31+
public void before() {
32+
client = new AsyncHttpClient(new AsyncHttpClientConfig.Builder().build());
33+
}
34+
35+
@After
36+
public void after() {
37+
client.close();
38+
}
39+
40+
@Test
41+
public void onIllegalArgumentException() throws Exception {
42+
43+
CountDownLatch latch = new CountDownLatch(1);
44+
45+
client.prepareGet(ws("bad-data").toString())
46+
.execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(
47+
new WebSocketListener() {
48+
49+
@Override
50+
public void onOpen(final WebSocket websocket) {
51+
}
52+
53+
@Override
54+
public void onClose(final WebSocket websocket) {
55+
latch.countDown();
56+
}
57+
58+
@Override
59+
public void onError(final Throwable t) {
60+
}
61+
}).build()).get();
62+
63+
latch.await();
64+
}
65+
66+
}
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package org.jooby.integration.ws;
2+
3+
import static org.junit.Assert.assertArrayEquals;
4+
5+
import java.util.LinkedList;
6+
import java.util.concurrent.CountDownLatch;
7+
8+
import org.jooby.test.ServerFeature;
9+
import org.junit.After;
10+
import org.junit.Before;
11+
import org.junit.Test;
12+
13+
import com.ning.http.client.AsyncHttpClient;
14+
import com.ning.http.client.AsyncHttpClientConfig;
15+
import com.ning.http.client.websocket.WebSocket;
16+
import com.ning.http.client.websocket.WebSocketByteListener;
17+
import com.ning.http.client.websocket.WebSocketUpgradeHandler;
18+
19+
public class OnByteArrayMessageFeature extends ServerFeature {
20+
21+
{
22+
ws("/onBinaryMessage", (ws) -> {
23+
24+
ws.onMessage(message -> {
25+
String bytes = "=" + new String(message.to(byte[].class));
26+
ws.send(bytes.getBytes(), () -> {
27+
ws.close();
28+
});
29+
});
30+
});
31+
32+
}
33+
34+
private AsyncHttpClient client;
35+
36+
@Before
37+
public void before() {
38+
client = new AsyncHttpClient(new AsyncHttpClientConfig.Builder().build());
39+
}
40+
41+
@After
42+
public void after() {
43+
client.close();
44+
}
45+
46+
@Test
47+
public void sendBinaryMessage() throws Exception {
48+
LinkedList<Object> messages = new LinkedList<>();
49+
50+
CountDownLatch latch = new CountDownLatch(1);
51+
52+
client.prepareGet(ws("onBinaryMessage").toString())
53+
.execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(
54+
new WebSocketByteListener() {
55+
56+
@Override
57+
public void onFragment(final byte[] fragment, final boolean last) {
58+
}
59+
60+
@Override
61+
public void onMessage(final byte[] message) {
62+
messages.add(message);
63+
}
64+
65+
@Override
66+
public void onOpen(final WebSocket websocket) {
67+
websocket.sendMessage("hey!".getBytes());
68+
}
69+
70+
@Override
71+
public void onClose(final WebSocket websocket) {
72+
latch.countDown();
73+
}
74+
75+
@Override
76+
public void onError(final Throwable t) {
77+
}
78+
}).build()).get();
79+
latch.await();
80+
assertArrayEquals("=hey!".getBytes(), (byte[]) messages.get(0));
81+
}
82+
}
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package org.jooby.integration.ws;
2+
3+
import static org.junit.Assert.assertArrayEquals;
4+
5+
import java.nio.ByteBuffer;
6+
import java.util.LinkedList;
7+
import java.util.concurrent.CountDownLatch;
8+
9+
import org.jooby.test.ServerFeature;
10+
import org.junit.After;
11+
import org.junit.Before;
12+
import org.junit.Test;
13+
14+
import com.ning.http.client.AsyncHttpClient;
15+
import com.ning.http.client.AsyncHttpClientConfig;
16+
import com.ning.http.client.websocket.WebSocket;
17+
import com.ning.http.client.websocket.WebSocketByteListener;
18+
import com.ning.http.client.websocket.WebSocketUpgradeHandler;
19+
20+
public class OnByteBufferMessageFeature extends ServerFeature {
21+
22+
{
23+
ws("/onBinaryMessage/buffer", (ws) -> {
24+
25+
ws.onMessage(message -> {
26+
System.out.println("on message");
27+
String bytes = "=" + new String(message.to(byte[].class));
28+
ws.send(ByteBuffer.wrap(bytes.getBytes()), () -> {
29+
System.out.println("closing server");
30+
ws.close();
31+
});
32+
});
33+
34+
System.out.println("server open");
35+
});
36+
37+
}
38+
39+
private AsyncHttpClient client;
40+
41+
@Before
42+
public void before() {
43+
client = new AsyncHttpClient(new AsyncHttpClientConfig.Builder().build());
44+
}
45+
46+
@After
47+
public void after() {
48+
client.close();
49+
}
50+
51+
@Test
52+
public void sendBinaryMessageBuffer() throws Exception {
53+
LinkedList<Object> messages = new LinkedList<>();
54+
55+
CountDownLatch latch = new CountDownLatch(1);
56+
57+
client.prepareGet(ws("onBinaryMessage", "buffer").toString())
58+
.execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(
59+
new WebSocketByteListener() {
60+
61+
@Override
62+
public void onFragment(final byte[] fragment, final boolean last) {
63+
}
64+
65+
@Override
66+
public void onMessage(final byte[] message) {
67+
messages.add(message);
68+
}
69+
70+
@Override
71+
public void onOpen(final WebSocket websocket) {
72+
System.out.println("on open");
73+
websocket.sendMessage("hey!".getBytes());
74+
}
75+
76+
@Override
77+
public void onClose(final WebSocket websocket) {
78+
System.out.println("closing client");
79+
latch.countDown();
80+
}
81+
82+
@Override
83+
public void onError(final Throwable t) {
84+
}
85+
}).build()).get();
86+
latch.await();
87+
assertArrayEquals("=hey!".getBytes(), (byte[]) messages.get(0));
88+
}
89+
90+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package org.jooby.integration.ws;
2+
3+
import java.util.concurrent.CountDownLatch;
4+
5+
import org.jooby.test.ServerFeature;
6+
import org.junit.After;
7+
import org.junit.Before;
8+
import org.junit.Test;
9+
10+
import com.ning.http.client.AsyncHttpClient;
11+
import com.ning.http.client.AsyncHttpClientConfig;
12+
import com.ning.http.client.websocket.WebSocket;
13+
import com.ning.http.client.websocket.WebSocketListener;
14+
import com.ning.http.client.websocket.WebSocketUpgradeHandler;
15+
16+
public class OnCheckedErrFeature extends ServerFeature {
17+
18+
{
19+
ws("/checked-err", ws -> {
20+
21+
throw new IllegalStateException("intentionl err");
22+
});
23+
24+
}
25+
26+
private AsyncHttpClient client;
27+
28+
@Before
29+
public void before() {
30+
client = new AsyncHttpClient(new AsyncHttpClientConfig.Builder().build());
31+
}
32+
33+
@After
34+
public void after() {
35+
client.close();
36+
}
37+
38+
@Test
39+
public void onCheckedExceptionCloseSocket() throws Exception {
40+
CountDownLatch latch = new CountDownLatch(1);
41+
42+
client.prepareGet(ws("checked-err").toString())
43+
.execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(
44+
new WebSocketListener() {
45+
46+
@Override
47+
public void onOpen(final WebSocket websocket) {
48+
}
49+
50+
@Override
51+
public void onClose(final WebSocket websocket) {
52+
latch.countDown();
53+
}
54+
55+
@Override
56+
public void onError(final Throwable t) {
57+
}
58+
}).build()).get();
59+
60+
latch.await();
61+
}
62+
63+
}

0 commit comments

Comments
 (0)